Специализированный программный продукт по работе со счетами-фактуры

Системы управления базами данных. Обоснование необходимости автоматизации оформления счетов-фактур. Модели данных, особенности языка Visual FoxPro 5.0. Руководство пользователя программы. Технико-экономическое обоснование автоматизации. Текст программы.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 22.02.2012
Размер файла 664,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

LOCAL oSearchDlog,oAddRec,cChildAlias,cPapaAlias,i,lPrimeKey

LOCAL cPapaKey,cChildKey,nSaveSess,oRel,cTagName,lBadViewKey,nSaveRec,nSaveRec2

LOCAL lBadChildKey,lUpdatableParentKey,lNoSendParentUpdates,lNoSendChildUpdates

DO CASE

CASE THIS.Parent.EditMode

** Code for saving record

this.Parent.UpdateRows()

CASE EMPTY(THIS.Parent.GridRef)&& not using Grid object

** Code for adding record

this.Parent.OldAlias = ALIAS()&&save alias in case reverting

this.Parent.oldrec = RECNO()&&save record in case reverting

IF CURSORGETPROP("SourceType")#3 AND ;

!CURSORGETPROP("offline") AND ;

!CURSORGETPROP("SendUpdates")

=MESSAGEBOX(C_NOUPDATE_LOC)

RETURN

ENDIF

APPEND BLANK

OTHERWISE

** Code for adding record

this.Parent.OldAlias = ALIAS()&&save alias in case reverting

this.Parent.oldrec = RECNO()&&save record in case reverting

lPrimeKey = .F.&&is child key primary index

IF !EMPTY(THIS.Parent.oDataRelation)

oRel = EVAL(THIS.Parent.oDataRelation)

ENDIF

DO CASE

CASE TYPE("m.oRel") = "O"&&data environment

WITH oRel

cPapaAlias = .ParentAlias

cPapaKey = .RelationalExpr

cChildAlias = .ChildAlias

cChildKey = .ChildOrder

ENDWITH

oRel = .NULL.&&reset

CASE !EMPTY(THIS.Parent.viewkey)&&using views

cPapaAlias = ALIAS()

cPapaKey = THIS.Parent.ParentKey

cChildAlias = THIS.Parent.GridAlias

cChildKey = THIS.Parent.viewkey

* Need to check if Key field is updatable

IF CURSORGETPROP("SourceType",m.cChildAlias)#3 AND !CURSORGETPROP("offline",m.cChildAlias) AND ;

ATC(","+m.cChildKey+",",","+CURSORGETPROP("UpdatableFieldList",m.cChildAlias)+",")=0

lBadViewKey = .T.

ENDIF

OTHERWISE

cPapaAlias = ALIAS()

cPapaKey = RELATION(1)

cChildAlias = THIS.Parent.GridAlias

cChildKey = ORDER(m.cChildAlias)

ENDCASE

* Test to see if both keys are of the same data type

SELECT (THIS.Parent.GridAlias)

cGridKeyType = ""

IF EMPTY(THIS.Parent.viewkey) AND !EMPTY(m.cChildKey)&&regular table used

* Get the Child Key field since only index tag is here

* if these is an expression, then default to blank.

cTagName = ""

FOR i = 1 TO TagCount("")

IF UPPER(TAG(m.i)) == UPPER(m.cChildKey)

cTagName = KEY(m.i)

lPrimeKey = PRIMARY(m.i)

EXIT

ENDIF

ENDFOR

* Check if we have an index expression here.

IF ATC("(",m.cTagName)#0 OR ATC("+",m.cTagName)#0

cChildKey = ""

ELSE

cChildKey = m.cTagName

cGridKeyType = TYPE(m.cChildKey)

ENDIF

ENDIF

IF CURSORGETPROP("SourceType",m.cPapaAlias)#3 AND !CURSORGETPROP("offline",m.cPapaAlias) AND ;

!CURSORGETPROP("SendUpdates",m.cPapaAlias)

lNoSendParentUpdates = .T.

ENDIF

IF CURSORGETPROP("SourceType",m.cChildAlias)#3 AND !CURSORGETPROP("offline",m.cChildAlias) AND ;

!CURSORGETPROP("SendUpdates",m.cChildAlias)

lNoSendChildUpdates = .T.

ENDIF

* Check if have two views and both do not send updates

IF m.lNoSendParentUpdates AND m.lNoSendChildUpdates

=MESSAGEBOX(C_NOUPDATE_LOC)

RETURN

ENDIF

SELECT (THIS.Parent.OldAlias )

IF !EMPTY(m.cGridKeyType) AND m.cGridKeyType # TYPE(m.cPapaKey)

lBadChildKey = .T.

ENDIF

DO CASE

CASE m.lNoSendParentUpdates AND (m.lBadViewKey OR m.lBadChildKey)

=MESSAGEBOX(C_NOUPDATE_LOC)

RETURN

CASE m.lPrimeKey AND m.lNoSendParentUpdates

=MESSAGEBOX(C_NOUPDATE2_LOC)

RETURN

CASE m.lNoSendChildUpdates&&child view does not send updates

IF MESSAGEBOX(C_NOCHILDUPDATE_LOC,MB_Q_YESNO) # MB_A_YES

RETURN

ENDIF

APPEND BLANK

CASE m.lBadViewKey&&view key in not updatable

IF MESSAGEBOX(C_KEYFLDNOUPDATE_LOC,MB_Q_YESNO) # MB_A_YES

RETURN

ENDIF

APPEND BLANK

CASE m.lBadChildKey &&bad child key -- different data type from parent

IF MESSAGEBOX(C_BADCHILDKEY_LOC,MB_Q_YESNO) # MB_A_YES

RETURN

ENDIF

APPEND BLANK

OTHERWISE

* Need to check if Key field is updatable

lUpdatableParentKey = .T.

IF CURSORGETPROP("SourceType",m.cPapaAlias)#3 AND !CURSORGETPROP("offline",m.cPapaAlias) AND;

ATC(","+m.cPapaKey+",",","+CURSORGETPROP("UpdatableFieldList",m.cPapaAlias)+",")=0

* cPapaKey = ""

lUpdatableParentKey = .F.

ENDIF

* Check for expression in cPapaKey if so, then do not update record with keyvalue

IF ATC("(",m.cPapaKey)#0 OR ATC("+",m.cPapaKey)#0

cPapaKey = ""

ENDIF

nSaveSess = SET("DATASESSION")

oAddRec = CREATE("GridAddRec")

IF TYPE("m.oAddRec") # "O"

=MESSAGEBOX(C_NOOBJ_LOC)

RETURN

ENDIF

oAddRec.ChildPrimaryKey = m.lPrimeKey

oAddRec.UpdatableParentKey = m.lUpdatableParentKey

oAddRec.NoSendUpdates = m.lNoSendParentUpdates

oAddRec.KeyField = m.cPapaKey

oAddRec.KeyValue = IIF(!EMPTY(m.cPapaKey),EVAL(m.cPapaKey),"")

oAddRec.runaddform()

IF oAddRec.AddOption = OPT_CANCEL

RETURN

ENDIF

SET DATASESSION TO nSaveSess

SELECT (THIS.Parent.OldAlias)

IF TYPE("oAddRec.KeyValue") = "C"

oAddRec.KeyValue = TRIM(oAddRec.KeyValue)

ENDIF

* Add record to parent table

nSaveRec = RECNO()

IF INLIST(oAddRec.AddOption,OPT_ADD_PARENT,OPT_ADD_BOTH)

IF EMPTY(m.cPapaKey)

APPEND BLANK IN (m.cPapaAlias)

ELSE

INSERT INTO (m.cPapaAlias) ((oAddRec.KeyField)) VALUES(oAddRec.KeyValue)

ENDIF

ENDIF

nSaveRec2 = RECNO()

* Add child record

IF INLIST(oAddRec.AddOption,OPT_ADD_CHILD,OPT_ADD_BOTH)

* Need to check

GO m.nSaveRec

IF EMPTY(m.cChildKey) OR TYPE("m.cChildKey")#TYPE('oAddRec.KeyValue')

APPEND BLANK IN (m.cChildAlias)

ELSE

INSERT INTO (m.cChildAlias) ((m.cChildKey)) VALUES(oAddRec.KeyValue)

ENDIF

GO m.nSaveRec2

ENDIF

ENDCASE

ENDCASE

this.Parent.EditMode = !THIS.Parent.EditMode

this.Parent.AddMode = THIS.Parent.EditMode

this.Parent.topfile = .F.

thisform.LockScreen = .T.

this.Parent.ButtonRefresh()

this.Parent.NavRefresh()

thisform.LockScreen = .F.

ENDPROC

PROCEDURE Error

LPARAMETERS nError, cMethod, nLine

this.parent.error(m.nError, m.cMethod, m.nLine)

ENDPROC

PROCEDURE Click

#DEFINE MSGBOX_YES6

#DEFINE C_MSGBOX136

#DEFINE C_DELETE_LOC"Aы oотите удалить yту запись?"

#DEFINE C_NOLOCK_LOC"Запись не может быть удалена, так как используется."

* Note: Cascading deletes should be handled via RI triggers in DBC!

IF DELETED()

RECALL

ELSE

IF MESSAGEBOX(C_DELETE_LOC,C_MSGBOX1) = MSGBOX_YES

Delete

IF THIS.Parent.UpdateRows() &&success

* Success

IF !EOF()

Skip 1

ENDIF

IF EOF() AND !BOF()

Skip -1

ENDIF

ENDIF

thisform.LockScreen = .T.

this.Parent.ButtonRefresh()

this.Parent.NavRefresh()

thisform.LockScreen = .F.

ENDIF

ENDIF

IF THISFORM.ShowWindow = 2

Activate Window (THISFORM.Name)

ENDIF

ENDPROC

PROCEDURE Error

LPARAMETERS nError, cMethod, nLine

this.parent.error(m.nError, m.cMethod, m.nLine)

ENDPROC

PROCEDURE Click

#DEFINE C_NOUPDATE_LOC"You cannot edit because the view(s) selected does not send updates."

LOCAL lNoSendParentUpdates,lNoSendChildUpdates

LOCAL aTablesUsed,nTablesUsed,i

** Reverting record

IF THIS.Parent.EditMode

IF THIS.Parent.usedataenv

SELECT (THIS.Parent.OldAlias)

IF CURSORGETPROP("Buffering")>1

=TableRevert(.T.)

ENDIF

IF !EMPTY(THIS.Parent.GridAlias)

SELECT (THIS.Parent.GridAlias)

IF CURSORGETPROP("Buffering")>1

=TableRevert(.T.)

ENDIF

ENDIF

ELSE

DIMENSION aTablesUsed[1]

m.nTablesUsed = AUSED(aTablesUsed)

FOR i = 1 TO m.nTablesUsed

IF CURSORGETPROP("Buffering",aTablesUsed[m.i,1])>1

=TableRevert(.T.,aTablesUsed[m.i,1])

ENDIF

ENDFOR

ENDIF

* Go back to original place

SELECT (THIS.Parent.OldAlias)

IF RECCOUNT() < THIS.Parent.oldrec&&added record at EOF()

GO TOP

ELSE

GO THIS.Parent.oldrec

ENDIF

ELSE

* Check to see if view allows updates

IF CURSORGETPROP("SourceType")#3 AND !CURSORGETPROP("offline") AND;

!CURSORGETPROP("SendUpdates")

lNoSendParentUpdates = .T.

ENDIF

IF !EMPTY(THIS.Parent.GridAlias) AND ;

CURSORGETPROP("SourceType",THIS.Parent.GridAlias)#3 AND ;

!CURSORGETPROP("offline",THIS.Parent.GridAlias) AND ;

!CURSORGETPROP("SendUpdates",THIS.Parent.GridAlias)

lNoSendChildUpdates= .T.

ENDIF

IF (m.lNoSendChildUpdates AND m.lNoSendParentUpdates) OR;

(EMPTY(THIS.Parent.GridAlias) AND m.lNoSendParentUpdates)

=MESSAGEBOX(C_NOUPDATE_LOC)

RETURN

ENDIF

this.Parent.OldAlias = ALIAS()&&save alias in case reverting

this.Parent.oldrec = RECNO()&&save record in case reverting

ENDIF

** Editing record

this.Parent.EditMode = !THIS.Parent.EditMode

this.Parent.AddMode = .F.

thisform.LockScreen = .T.

this.Parent.ButtonRefresh()

this.Parent.NavRefresh()

thisform.LockScreen = .F.

ENDPROC

PROCEDURE Error

LPARAMETERS nError, cMethod, nLine

this.parent.error(m.nError, m.cMethod, m.nLine)

ENDPROC

Размещено на Allbest.ru


Подобные документы

  • Обзор программных средств разработки приложений и обоснование выбора языка программирования. Классификация приложений для работы с базами данных. Функциональная структура базы данных с указанием назначения программных модулей, руководство пользователя.

    дипломная работа [645,3 K], добавлен 21.11.2010

  • Обзор возможностей, базовых классов и элементов управления Microsoft Visual Foxpro, описание функций и возможностей языка SQL. Постановка задачи, руководство пользователя и листинг программы. Компоненты информационной системы, основные функции СУБД.

    курсовая работа [360,1 K], добавлен 12.06.2010

  • Базы данных и системы управления базами данных. Структура простейшей базы данных, свойства полей. Понятие языка SQL. Проектирование баз данных, режимы работы, объекты. СУБД Microsoft Access. Создание базы данных "Электротовары" средствами Visual FoxPro.

    курсовая работа [5,7 M], добавлен 29.04.2014

  • Математическая и физическая модели ПМК для автоматизации учета данных о научной работе в ВУЗе. Разработка программного обеспечения программно–методического комплекса для автоматизации учета данных о научной работе в ВУЗе, их экономическое обоснование.

    дипломная работа [4,8 M], добавлен 30.06.2012

  • Компоненты и классификация банков данных. Модели данных: иерархическая, сетевая, реляционная, постреляционная, многомерная, объектно-ориентированная. Настольные системы управления базами данных: VisualdBase, Рarаdох, Microsoft FoxРrо и Visual FoxРrо.

    курсовая работа [849,8 K], добавлен 25.04.2015

  • Теоретические основы создания баз данных в Visual Foxpro 9.0. Описание программы, использование ее команд. Создание табличной базы данных, отношений между таблицами в многотабличной базе данных больных в больнице. Редактирование табличного отчета.

    курсовая работа [681,2 K], добавлен 19.12.2013

  • Обоснование необходимости разработки программы для игры "Тетрис". Математическая и графическая части алгоритма. Выбор языка и среды программирования. Отладка текста программы, разработка интерфейса пользователя. Тестирование, руководство пользователя.

    курсовая работа [1,5 M], добавлен 17.01.2011

  • Обоснование необходимости создания программного продукта. Данные, которые хранятся в базе данных. Обоснование их достаточности. Операции по обработке данных. Описание интерфейса пользователя с иллюстрациями диалоговых окон. Инструкция для пользователя.

    курсовая работа [886,5 K], добавлен 11.10.2008

  • Разработка программы с целью автоматизации учета счет-фактур с использованием СУБД Microsoft Access, ее основные этапы и характеристика, ожидаемые конечные результаты и выгоды. Требования к организации сбора информации. Руководство пользователя.

    курсовая работа [1,1 M], добавлен 23.03.2011

  • Разработка программы средствами Turbo Pascal для автоматизации процесса работы с небольшими базами данных. Состав используемого аппаратного обеспечения. Общая схема структуры языка программирования Паскаля и приемы процедурного программирования.

    курсовая работа [61,6 K], добавлен 09.03.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.