Автоматизированная информационная система обработки данных учета пенсионных начислений и компенсаций ЦСО Военного комиссариата Курской области

Проектирование автоматизированной информационной системы обработки данных учета пенсионных начислений и компенсаций ЦСО Военного комиссариата Курской области. Анализ возможностей использования решений на базе Microsoft Dynamics AX (Microsoft Axapta).

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 12.11.2013
Размер файла 5,7 M

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

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

От людей

Всего

Количество наружного воздуха, необходим. для дыхания

1

2

0,3

6,811

0,3

7,4

120

3

2

0,3

0,436

0,3

1,0

120

4

2

0,3

0,545

0,3

1,1

120

5

5

1,5

0,672

0,75

2,9

300

6

2

0,3

1,942

0,3

2,5

120

?

15,1

е) Влаговыделения

Определяется по формуле:

, кг/ч

где Wi - влаговыделения одним человеком г/ч; ni- число людей в помещении.

Также добавляют 1,5 кг/ч на влажную уборку помещения, принимаемую один раз в день.

Таблица 5.5 - Итоги расчета теплового баланса

№ Помещения

1

3

4

5

6

уборка

?

Кол-во людей

2

2

2

5

2

-

13

Влаговыделения ТП

0,15

0,15

0,15

0,375

0,15

1,5

2,48

Влаговыделения ХП

0,13

0,13

0,13

0,325

0,13

1,5

2,35

5.2 Построение в Id диаграмме процессов обработки воздуха в теплый и холодный период года

5.2.1 Расчет производительности СКВ

а) ТП (Теплый период)

1. Определяем угловой коэффициент луча процесса:

2. Находим температуры приточного и удаляемого воздуха:

Строим на Id- диаграмме луч процесса, через точку В и наносим точки П, У, соответствующие найденным температурам.

3. Определяем необходимый воздухообмен.

Определяем воздухообмен по полному тепловыделению:

Определяем теплообмен по явному тепловыделению:

Определяем воздухообмен по влаговыделению:

Затем на поле I-d диаграммы наносим линию dП= const, по которой находим положение точек П' и О, характеризующих состояние воздуха на выходе из кондиционера и из камеры орошения.

б) ХП (Холодный период)

1. Определяем угловой коэффициент луча процесса:

2. Находим температуры приточного и удаляемого воздуха:

Строим на Id- диаграмме луч процесса, через точку В и наносим точки П, У, соответствующие найденным температурам.

3. Определяем необходимый воздухообмен.

Определяем воздухообмен по полному тепловыделению:

Определяем теплообмен по явному тепловыделению:

Определяем воздухообмен по влаговыделению:

Затем на поле I-d диаграммы наносим линию dП= const, по которой находим положение точек П и О, характеризующих состояние воздуха на выходе из кондиционера и из камеры орошения.

5.2.2 Расчет количества тепла для подогревателей 1-ого и 2-ого подогрева

Выбираем максимальный воздухообмен с запасом 5% = 10675*5%=11200 кг/ч,

Мощность воздухоподогревателя I ступени - 135 кВт

Мощность воздухоподогревателя II ступени- 28 кВт

Для теплого периода, судя по диаграмме подогревателей II подогрева не понадобится, воздух с температуры 140С нагреется до расчетной внутренней за счет теплоизбытков в помещении:

= 20 кВт

5.2.3 Расчет количества холода в воздухоохладителях для летнего периода

Расход холода для осуществления процесса охлаждения и осушки воздуха:

производительность СКВ должна равняться 45 кВт

5.2.4 Расчет количества воды, испарившейся в оросительной камере

Расход влаги на испарение в камере орошения:

ХП:

5.3 Выбор типоразмера кондиционера и расчет его секций

Расчетный воздухообменG = 11200 кг/ч =>L = 9300 м3/ч.

По расчетному воздухообмену принимаем центральный кондиционер КТЦ 2А-10

5.3.1 Расчет и подбор воздухонагревателей

Задача расчета воздухонагревателя заключается в выборе поверхности воздухонагревателя с запасом 10%

Исходя из доступного перепада температур, вычисляют расход горячей воды, кг/ч;

Средний арифметический температурный напор в воздухонагревателе, 0С;

Вычисляют массовую скорость в живом сечении Vp, кг/(м2•с);

где G- расход воздуха через сечение теплообменника, кг/ч;

- площадь сечения для прохода воздуха

Скорость течения воды:

Требуемая площадь поверхности воздухонагревателя, м2;

где К- коэффициент теплопередачи, Вт/ (м2•с)

С- коэффициент для двухрядных -16,86; однорядных- 15,6.

Расчет I ступени подогрева воздуха:

Запас +10% = 51,66м2;51,66/2 = 25,83

Принимаем 2 двухрядных теплообменника высотой 1метр с площадью 25,9 м2 каждый с обводным каналом ВНО. Индекс 01.11213

Расчет II ступени подогрева воздуха:

Принимаем 1 однорядный теплообменник высотой 1,25 с площадью 16,35 м2 без обводного канала ВН. Индекс 01.10113

5.3.2 Расчет камер орошения

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

а)Расчет для теплого периода

По расходу воздуха G=11200задаются типом камеры и числом форсунок nф. По диаграмме в зависимости от конечной и начальной относительной влажности обрабатываемого в камере орошения воздуха определяют давление перед форсунками РФ. Оно составит 120 кПа. Для этого значения расход воды через форсункуgф составит 420 кг/ч.

Выбираем для кондиционера КТЦ 2А-10 с общим числом форсунок - 42. (Исполнение 1).

Общий расход воды через форсунки составит:

Определяем коэффициент орошения:

По значению коэффициента орошения определяют достижимое значение = 0,57

Энтальпия насыщенного воздуха при начальной температуре воды, кДж/кг:

На Id диаграмме на пересечении линии Iwн с линией полного насыщения (ц=100%), находят требуемую начальную температуру воды twн и вычисляют конечную температуру воды. Температура воды перед форсункой составит tm=7,70С.

б) Расчет для холодного периода

По Id- диаграмме находят начальные и конечные параметры воздуха и температуру мокрого термометра.

Вычисляем требуемый показатель эффективности режима изоэнтальпийного увлажнения воздуха Eа, по которому определяется коэффициент орошения В и вычисляют расход воды.

По таблице найдем В= 1,55

Вычисляем производительность одной форсунки:

По значению находим необходимое давление воды перед форсунками РФ, оно составит 115 кПа.

Принимаем камеру орошения Индекс 01.01300 исполнение 1

5.4 Холодоснабжение СКВ

Так как охлаждение воздуха происходит в оросительной камере, подготовка оборотной воды осуществляется в испарителе холодильной установки. Расчет холода для охлаждения в чиллере воды из оросительной камеры производится по уравнению:

Подбираем чиллер серии WRAT182, Холодопроизводительностью 47,9 кВт

Мощность потребляемая компрессором- 14,4 кВт

Тип компрессора- Поршневой

Напряжение питания компрессора- 380-415/3/50+N

Число герм. компрессоров (охл. контуров) - 2/2

Осевые вентиляторы с установочной мощностью- 2Ч0,32 кВт

Общая производительность по воздуху - 4,16 м3/с

Транспортная масса- 430 кг.

Длина- 1642 мм.

Глубина- 954 мм.

Высота- 1570 мм.

Принимаем объем аккумулирующего бака 150LЧ GPA 150

Потребный расход воды определяется холодопроизводительностью чиллера и расчетным перепадом температур на входе и выходе чиллера и рассчитывается по формуле:

где Q- холодопроизводительность чиллера, кВт

- перепад температур на чиллере (5-6 0С)

Потребный напор насосной станции складывается из следующих потерь:

1) Потери в теплообменнике чиллера (+50% к потерям в трубопроводе, от бака к чиллеру и обратно.

2) Потери в самой насосной станции и потери на соединениях между чиллером и насосной станцией.

3) Потери в сети (трубопроводах, арматуре)

По номограмме подбираем диаметр50 мм, задавшись скоростью 1,5 м/с, и расходом 6,84 м3/ч, потери давления составят 420 Па/м

Длина трубопровода5м, Ртр= 2100 Па + Рм = 3000 Па

Полные потери составят +50 = 3000*1,5= 4500 Па.

По каталогу принимаем насостипа АЦКМ 65-40-180

n= 1500 мин-1, КПД = 70%,

5.5 Аэродинамический расчет СКВ

Цель аэродинамического расчета системы- это определение размеров сечений всех участков системы при заданных расходах воздуха через них, а также потерь давления на отдельных участках и в системе в целом.

5.5.1 Выбор схемы распределения воздуха в помещении

Приточные решетки располагаем в помещении снизу, подача воздуха происходит по воздуховодам, расположенным в подвале здания, вытяжка происходит через воздуховоды, проложенные на чердаке здания.

Установив в помещении место расположения приточных и вытяжных решеток необходимо предварительно определить их размеры.

Площадь живого сечения вытяжных и приточных решеток:

Vрек- рекомендуемая скорость в решетках, не более 6 м/с

После подбора решетки определяют расчетную скорость на выходе из решетки.

Таблица 5.6 - Результаты воздухообменов и подбор решеток

№ помещения

Расход L, м3/ч

Площадь Fрасч

Кол-во

Размеры, мм

Площадь живого сечения,м2

Скорость

приточные решетки

1

4900

0,247

2

200Ч800

0,266

5,1

3

560

0,028

1

150Ч600

0,072

2,2

4

600

0,030

1

150Ч600

0,072

2,3

5

1350

0,068

1

200Ч800

0,133

2,8

6

1900

0,096

1

200Ч800

0,133

4,0

вытяжные решетки

1

4400

0,222

2

200Ч800

0,266

4,6

3

500

0,025

1

150Ч600

0,072

1,9

4

540

0,027

1

150Ч600

0,072

2,1

5

1200

0,061

1

200Ч800

0,133

2,5

6

1700

0,086

1

200Ч800

0,133

3,6

Расходы на притоки и вытяжке подбираем по теплоизбыткам в данных комнатах и с учетом воздушного подпора на притоке порядка 10%, который предусмотрен для исключения подсасывания воздуха из не кондиционируемых помещений.

5.5.2 Подбор диаметров воздуховодов и расчет потерь давления

Подбор диаметров воздуховодов сведен в таблицу 5.7 для приточной системы и таблицу 5.8 для вытяжной системы.

Таблица 5.7 - Аэродинамический расчет приточной системы

Таблица 5.8 - Аэродинамический расчет вытяжной системы

5.5.3 Подбор вентилятора

Для приточной системы

Вентилятор подбирается по двум параметрам:

L= 9300 м3/ч

P=509,3+120+37+60+200= 926 Па

Требуемое давление, развиваемое вентилятором

Pтр= 1кПа

Технические характеристика вентилятора:

индекс: 01.41430

Полное давление 1,6 кПа

Номинальная производительность 12,5 тыс. м3/ч

Частота вращения 1440 об/мин

Электродвигатель 4А132М4, мощность 11 кВт.

Для вытяжной системы

L= 8340 м3/ч

P= 536 кПа

Требуемое давление Pтр= 0,6 кПа.

Технические характеристики вентилятора: индекс: 01.41330

Полное давление 1,1 кПа

Номинальная производительность 12,5 тыс. м3/ч

Частота вращения 1440 об/мин

Электродвигатель 4А132М4, мощность 7,5 кВт.

Выводы по главе

Проведение расчета системы вентиляции кондиционирования офисного помещения Центра Социального Обеспечения было осуществлено по пяти направлениям:

1. Рассчитано поступление тепла и влаги в помещение серверной.

2. Построены в ID диаграмме процессы обработки воздуха в теплый и холодный периоды года.

3. Выбран типоразмер кондиционера и рассчитаны его секции.

4. Рассчитано холодоснабжение СКВ.

5. Проведен аэродинамический расчет СКВ.

Таким образом расчет системы вентиляции и кондиционирования офисного помещения Центра Социального Обеспечения доказал свою важность для офисных помещений предприятий.

Выводы

В ходе выполнения выпускной квалификационной работы были выполнены следующие задачи:

Проведен анализ типовых программных решений для учета данных в системах начисления военный пенсий. Анализ показал, что универсального автоматизированного модуля не существует, оценив все преимущества и недостатки существующих платформ, было принято решение о переводе на современную windows-платформу существующей системы с использованием СУБД Microsoft® Visual FoxPro 9.0 Professional SP2.

Проведен обзор программного обеспечения, используемого в ЦСО ВККО. Обзор показал, что система устарела до критического уровня, она не способна поддерживать современные технологии, дальнейшие мероприятия по поддержке и обновлению системы нецелесообразны.

Разработано программное обеспечение управления таблицами данных в автоматизированной информационной системе формирования отчетных данных реестра по начислению пенсионных выплат и компенсаций ЦСО Военного комиссариата Курской области. В ходе разработки была сформирована база данных проекта, включающая в себя пять таблиц. Для удобства доступа к данным таблиц были созданы стандартные экранные формы.

Выполнено тестирование разработанного приложения. Результаты тестирования показали, что индексные связи работают и целостность базы данных не нарушается, контроль за соответствием типов данных соблюдается.

Выполнен расчет системы кондиционирования офисного помещения ЦСО. Расчет системы вентиляции и кондиционирования офисного помещения Центра Социального Обеспечения доказал свою важность для офисных помещений предприятий.

Осуществлен перевод существующей системы «Pension» на новую платформу MSVFP с сохранением формата данных и обеспечена целостность данных таблиц.

Все поставленные задачи выпускной квалификационной работы выполнены, цель достигнута.

Библиографический список

1. Басаков М. И. Современное делопроизводство: учебное пособие для вузов / М. И. Басаков. - Ростов н/Д : Феникс, 2007. - 480с
Винокуров М.А. , Гутгарц Р.Д., Пархомов В.А. Автоматизация кадрового учета: Учеб. пособие. - М.:изд-во «Инфра», 2001. - 325 с.

2. Радченко М.Г. (фирма "1С) "1С:Предприятие 8.2. Коротко о главном. Новые возможности версии 8.2", изд-во ООО "1С-Паблишинг", 2009г.-416 с.

3. Гончаров Д. И., Хрусталева Е. Ю. "Технологии интеграции 1С:Предприятия 8.2", "1С-Паблишинг", 2011г. - 358 с.

4. Габец А.П., Д.В. Козырев, Д.С. Кухлевский, Е.Ю. Хрусталева, «Реализация прикладных задач в системе "1С:Предприятие 8.2", "1С-Паблишинг", 2010г. - 714 с.

5. Мансурова Н.А., Веселов П.С. Предпосылки и этапы внедрения системы электронного документооборота в сфере малого и среднего бизнеса // Экономические исследования. 2010г.

6. В. Корепин, Microsoft Dynamics AX 2009. Руководство пользователя. Том 1, Эком, 2010г. - 1520с.

7. В. Корепин, Microsoft Dynamics AX 2009. Руководство пользователя. Том 1, ЭКОМ Паблишерз, 2010г. - 1632с.

8. Артур Гриф, Майкл Фрюргаард Понтоппидан, Ларс Драгхейм Олсен, перев. С. Чернятинский, Microsoft Dynamics AX 4.0, ЭКОМ Паблишерз, 2008г. - 608с.

9. Сухов Н.Е., Практический курс программирования на CA-Clipper, Киев : BHV, 1994. - 400 с.

10. Рик Спенс, Clipper Полное руководство по программированию, Третье издание.Версия 5.01, Тивали, 1994г. - 480с.

11. Лес Пинтер FoxPro 2.0 Application Programming / Пер. с англ. Д.В.Артемова. -- М., Киев: Эдель, Век, 1994. -- 427с.

12. Клепинин В.Б. Агафонова Т.П., Visual FoxPro 9.0 наиболее полное руководство в подлиннике ч.1 и ч.2, BHV(СПб), 2008г.

13. Попов А.А., Создание приложений для FOXPRO 2.5/2.6 в DOS и WINDOWS, "Калашников и Ко", 1997г. - 660с.

14. Попов А.А. Программирование в среде FoxPro 2.0. Построение систем обработки данных. -- М.: Радио и связь, 1994. -- 352 с.

15. Щекин Р.В. Справочник по теплоснабжению и вентиляции, кн. 1. Отопление и теплоснабжение. Киев.: "Будевельник", 2006 г.- 416с.

16. Щекин Р.В. Справочник по теплоснабжению и вентиляции, кн. 2 Вентиляция и кондиционирование воздуха. Киев: "Будевельник", 2006 г.- 352с.

17. Штокман Е.А, В.А. Шилов и др. Вентиляция, Кондиционирование и очистка воздуха на предприятиях пищевой промышленности. Москва, 2001 г. 688с.

18. Методические указания к курсовой работе. Кондиционирование воздуха и холодоснабжение.

19. СНиП 2.04.05-91. М.: Стройиздат, 2008г.

20. СНиП II-3-79*. Строительная теплотехника/ Госстрой России.- М.: ГУП ЦПП, 2008г.

Интернет ресурсы

1. http://www.1c.ru/ - официальный сайт 1С

2. http://v8.1c.ru/doc8/10.htm - официальный сайт 1С: Документооборот

3. http://www.microsoft.com/ru-ru/dynamics/ax/overview.aspx - официальный сайт Microsoft Dynamics AX на русском

4. http://citforum.ru/database/foxpro/index.shtml - Краткое руководство по системе управления базами данных для Windows

5. http://clipper.borda.ru/ - Русскоязычный форум по Clipper

Приложения

Некоторые фрагменты программного кода приложения, обеспечивающие целостность данных таблиц и индексов в базе данных

**__RI_HEADER!@ Do NOT REMOVE or MODIFY this line!!!! @!__RI_HEADER**

procedureRIDELETE

localllRetVal

llRetVal=.t.

IF (ISRLOCKED() and !deleted()) OR !RLOCK()

llRetVal=.F.

ELSE

IF !deleted()

DELETE

IF CURSORGETPROP('BUFFERING') > 1

=TABLEUPDATE()

ENDIF

ENDIF not already deleted

ENDIF

UNLOCK RECORD (RECNO())

llRetVal=pnerror=0

RETURN llRetVal

procedureRIUPDATE

lparameterstcFieldName,tcNewValue,tcCascadeParent

localllRetVal

llRetVal=.t.

IF ISRLOCKED() OR !RLOCK()

llRetVal=.F.

ELSE

IF EVAL(tcFieldName)<>tcNewValue

PRIVATE pcCascadeParent

pcCascadeParent=upper(iif(type("tcCascadeParent")<>"C","",tcCascadeParent))

REPLACE (tcFieldName) WITH tcNewValue

IF CURSORGETPROP('BUFFERING') > 1

=TABLEUPDATE()

ENDIF

ENDIF values don't already match

ENDIF it's locked already, or I was able to lock it

UNLOCK RECORD (RECNO())

llRetVal=pnerror=0

returnllRetVal

procedurerierror

parameterstnErrNo,tcMessage,tcCode,tcProgram

locallnErrorRows,lnXX

lnErrorRows=alen(gaErrors,1)

if type('gaErrors[lnErrorRows,1]')<>"L"

dimensiongaErrors[lnErrorRows+1,alen(gaErrors,2)]

lnErrorRows=lnErrorRows+1

endif

gaErrors[lnErrorRows,1]=tnErrNo

gaErrors[lnErrorRows,2]=tcMessage

gaErrors[lnErrorRows,3]=tcCode

gaErrors[lnErrorRows,4]=""

lnXX=1

do while !empty(program(lnXX))

gaErrors[lnErrorRows,4]=gaErrors[lnErrorRows,4]+","+;

program(lnXX)

lnXX=lnXX+1

enddo

gaErrors[lnErrorRows,5]=pcParentDBF

gaErrors[lnErrorRows,6]=pnParentRec

gaErrors[lnErrorRows,7]=pcParentID

gaErrors[lnErrorRows,8]=pcParentExpr

gaErrors[lnErrorRows,9]=pcChildDBF

gaErrors[lnErrorRows,10]=pnChildRec

gaErrors[lnErrorRows,11]=pcChildID

gaErrors[lnErrorRows,12]=pcChildExpr

returntnErrNo

PROCEDURE riopen

PARAMETERS tcTable,tcOrder

LOCAL lcCurWkArea,lcNewWkArea,lnInUseSpot,lnOccurs,lnOccurance

lnInUseSpot=0

lnOccurs = OCCURS(UPPER(tcTable)+"*",UPPER(pcRIcursors))

FOR lnOccurance = 1 TO lnOccurs

lnInUseSpot=ATC(tcTable+"*",pcRIcursors,lnOccurance)

IF ISDIGIT(SUBSTR(pcRIcursors,lnInUseSpot-1,1)) OR;

EMPTY(SUBSTR(pcRIcursors,lnInUseSpot-1,1))

EXIT

ENDIF

lnInUseSpot=0

ENDFOR

IF lnInUseSpot=0

lcCurWkArea=select()

SELECT 0

lcNewWkArea=select()

IF NOT EMPTY(tcOrder)

USE (tcTable) AGAIN ORDER (tcOrder) ;

ALIAS ("__ri"+LTRIM(STR(SELECT()))) share

ELSE

USE (tcTable) AGAIN ALIAS ("__ri"+LTRIM(STR(SELECT()))) share

ENDIF

ifpnerror=0

pcRIcursors=pcRIcursors+upper(tcTable)+"?"+STR(SELECT(),5)

else

lcNewWkArea=0

endifsomething bad happened while attempting to open the file

ELSE

lcNewWkArea=val(substr(pcRIcursors,lnInUseSpot+len(tcTable)+1,5))

pcRIcursors = strtran(pcRIcursors,upper(tcTable)+"*"+str(lcNewWkArea,5),;

upper(tcTable)+"?"+str(lcNewWkArea,5))

IF NOT EMPTY(tcOrder)

SET ORDER TO (tcOrder) IN (lcNewWkArea)

ENDIF sent an order

ifpnerror<>0

lcNewWkArea=0

endifsomething bad happened while setting order

ENDIF

RETURN (lcNewWkArea)

PROCEDURE riend

PARAMETERS tlSuccess

locallnXX,lnSpot,lcWorkArea

IF tlSuccess

END TRANSACTION

ELSE

SET DELETED OFF

ROLLBACK

SET DELETED ON

ENDIF

IF EMPTY(pcRIolderror)

ON ERROR

ELSE

ON ERROR &pcRIolderror.

ENDIF

FOR lnXX=1 TO occurs("*",pcRIcursors)

lnSpot=atc("*",pcRIcursors,lnXX)+1

USE IN (VAL(substr(pcRIcursors,lnSpot,5)))

ENDFOR

IF pcOldCompat = "ON"

SET COMPATIBLE ON

ENDIF

IF pcOldDele="OFF"

SET DELETED OFF

ENDIF

IF pcOldExact="ON"

SET EXACT ON

ENDIF

IF pcOldTalk="ON"

SET TALK ON

ENDIF

do case

case empty(pcOldDBC)

set data to

casepcOldDBC<>DBC()

set data to (pcOldDBC)

endcase

RETURN .T.

PROCEDURE rireuse

* rireuse.prg

PARAMETERS tcTableName,tcWkArea

pcRIcursors = strtran(pcRIcursors,upper(tcTableName)+"?"+str(tcWkArea,5),;

upper(tcTableName)+"*"+str(tcWkArea,5))

RETURN .t.

**************************************************************************

** "Referential integrity delete trigger for" bank

PROCEDURE __RI_DELETE_bank

LOCAL llRetVal

llRetVal = .t.

PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID

PRIVATE pcParentExpr,pcChildExpr

STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr

STORE 0 TO pnParentRec,pnChildRec

IF _triggerlevel=1

BEGIN TRANSACTION

PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;

pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC

pcOldTalk=SET("TALK")

SET TALK OFF

pcOldDele=SET("DELETED")

pcOldExact=SET("EXACT")

pcOldCompat=SET("COMPATIBLE")

SET COMPATIBLE OFF

SET DELETED ON

SET EXACT OFF

pcRIcursors=""

pcRIwkareas=""

pcRIolderror=ON("error")

pnerror=0

ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())

IF TYPE('gaErrors(1)')<>"U"

releasegaErrors

ENDIF

PUBLIC gaErrors(1,12)

pcOldDBC=DBC()

SET DATA TO ("DATA1")

ENDIF first trigger

LOCAL lcParentID && parent's value to be sought in child

LOCAL lcChildWkArea && child work area handle returned by riopen

LOCAL lcParentWkArea

LOCAL llDelHeaderarea

LOCAL lcStartArea

lcStartArea=select()

llRetVal=.t.

lcParentWkArea=select()

SELECT (lcParentWkArea)

pcParentDBF=dbf()

pnParentRec=recno()

STORE KOD_BANK TO lcParentID,pcParentID

pcParentExpr="KOD_BANK"

lcChildWkArea=riopen("ev","bank")

IF lcChildWkArea<=0

IF _triggerlevel=1

DO riend WITH .F.

ENDIF at the end of the highest trigger level

RETURN .F.

ENDIF not able to open the child work area

pcChildDBF=dbf(lcChildWkArea)

SELECT (lcChildWkArea)

SEEK lcParentID

SCAN WHILE BANK=lcParentID AND llRetVal

pnChildRec=recno()

pcChildID=BANK

pcChildExpr="BANK"

llRetVal=ridelete()

ENDSCAN get all of the ev records

=rireuse("ev",lcChildWkArea)

IF NOT llRetVal

IF _triggerlevel=1

DO riend WITH llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

ENDIF

IF _triggerlevel=1

doriend with llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

** "End of Referential integrity Delete trigger for" bank

**************************************************************************

**************************************************************************

procedure__RI_UPDATE_bank

** "Referential integrity update trigger for" bank

LOCAL llRetVal

llRetVal = .t.

PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID

PRIVATE pcParentExpr,pcChildExpr

STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr

STORE 0 TO pnParentRec,pnChildRec

IF _triggerlevel=1

BEGIN TRANSACTION

PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;

pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC

pcOldTalk=SET("TALK")

SET TALK OFF

pcOldDele=SET("DELETED")

pcOldExact=SET("EXACT")

pcOldCompat=SET("COMPATIBLE")

SET COMPATIBLE OFF

SET DELETED ON

SET EXACT OFF

pcRIcursors=""

pcRIwkareas=""

pcRIolderror=ON("error")

pnerror=0

ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())

IF TYPE('gaErrors(1)')<>"U"

releasegaErrors

ENDIF

PUBLIC gaErrors(1,12)

pcOldDBC=DBC()

SET DATA TO ("DATA1")

ENDIF first trigger

LOCAL lcParentID && parent's value to be sought in child

LOCAL lcOldParentID && previous parent id value

LOCAL lcChildWkArea && child work area handle returned by riopen

LOCAL lcChildID && child's value to be sought in parent

LOCAL lcOldChildID && old child id value

LOCAL lcParentWkArea && parentwork area handle returned by riopen

LOCAL lcStartArea

lcStartArea=select()

llRetVal=.t.

lcParentWkArea=select()

SELECT (lcParentWkArea)

pcParentDBF=dbf()

pnParentRec=recno()

lcOldParentID=OLDVAL("KOD_BANK")

pcParentID=lcOldParentID

pcParentExpr="KOD_BANK"

lcParentID=KOD_BANK

IF lcParentID<>lcOldParentID

lcChildWkArea=riopen("ev")

IF lcChildWkArea<=0

IF _triggerlevel=1

DO riend WITH .F.

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN .F.

ENDIF not able to open the child work area

pcChildDBF=dbf(lcChildWkArea)

SELECT (lcChildWkArea)

SCAN FOR BANK=lcOldParentID

pnChildRec=recno()

pcChildID=BANK

pcChildExpr="BANK"

IF NOT llRetVal

EXIT

ENDIF && not llretval

llRetVal=riupdate("BANK",lcParentID,"BANK")

ENDSCAN get all of the ev records

=rireuse("ev",lcChildWkArea)

IF NOT llRetVal

IF _triggerlevel=1

DO riend WITH llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

ENDIF

ENDIF this parent id changed

IF _triggerlevel=1

doriend with llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

** "End of Referential integrity Update trigger for" bank

**************************************************************************

**************************************************************************

procedure__RI_UPDATE_ev

** "Referential integrity update trigger for" ev

LOCAL llRetVal

llRetVal = .t.

PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID

PRIVATE pcParentExpr,pcChildExpr

STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr

STORE 0 TO pnParentRec,pnChildRec

IF _triggerlevel=1

BEGIN TRANSACTION

PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;

pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC

pcOldTalk=SET("TALK")

SET TALK OFF

pcOldDele=SET("DELETED")

pcOldExact=SET("EXACT")

pcOldCompat=SET("COMPATIBLE")

SET COMPATIBLE OFF

SET DELETED ON

SET EXACT OFF

pcRIcursors=""

pcRIwkareas=""

pcRIolderror=ON("error")

pnerror=0

ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())

IF TYPE('gaErrors(1)')<>"U"

releasegaErrors

ENDIF

PUBLIC gaErrors(1,12)

pcOldDBC=DBC()

SET DATA TO ("DATA1")

ENDIF first trigger

LOCAL lcParentID && parent's value to be sought in child

LOCAL lcOldParentID && previous parent id value

LOCAL lcChildWkArea && child work area handle returned by riopen

LOCAL lcChildID && child's value to be sought in parent

LOCAL lcOldChildID && old child id value

LOCAL lcParentWkArea && parentwork area handle returned by riopen

LOCAL lcStartArea

lcStartArea=select()

llRetVal=.t.

lcChildWkArea=select()

IF _triggerlevel=1 or type("pccascadeparent")#"C" or (NOT pccascadeparent=="VEDOMR")

SELECT (lcChildWkArea)

lcChildID=VEDOMR

lcOldChildID=oldval("VEDOMR")

pcChildDBF=dbf(lcChildWkArea)

pnChildRec=recno(lcChildWkArea)

pcChildID=lcOldChildID

pcChildExpr="VEDOMR"

if isnull(lcChildID) or isnull(lcOldChildID) or lcChildID <> lcOldChildID

lcParentWkArea=riopen("vedomr","kod_vedomr")

IF lcParentWkArea<=0

IF _triggerlevel=1

DO riend WITH .F.

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN .F.

ENDIF not able to open the child work area

pcParentDBF=dbf(lcParentWkArea)

llRetVal=SEEK(lcChildID,lcParentWkArea)

pnParentRec=recno(lcParentWkArea)

ifllRetVal and not (isrlocked(pnParentRec, lcParentWkArea) or ;

isflocked(lcParentWkArea))

if rlock(lcParentWkArea)

unlock record pnParentRec in (lcParentWkArea)

else

=rireuse("tparen",lcParentWkArea)

pnError = rierror(-1,"Insert restrict rule violated.","","")

IF _triggerlevel=1

DO riend WITH llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

endif

endif

=rireuse("vedomr",lcParentWkArea)

IF NOT llRetVal

pnError = rierror(-1,"Insert restrict rule violated.","","")

IF _triggerlevel=1

DO riend WITH llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

ENDIF no parent

ENDIF this value was changed

ENDIF not part of a cascade from "vedomr"

IF _triggerlevel=1 or type("pccascadeparent")#"C" or (NOT pccascadeparent=="BANK")

SELECT (lcChildWkArea)

lcChildID=BANK

lcOldChildID=oldval("BANK")

pcChildDBF=dbf(lcChildWkArea)

pnChildRec=recno(lcChildWkArea)

pcChildID=lcOldChildID

pcChildExpr="BANK"

if isnull(lcChildID) or isnull(lcOldChildID) or lcChildID <> lcOldChildID

lcParentWkArea=riopen("bank","kod_bank")

IF lcParentWkArea<=0

IF _triggerlevel=1

DO riend WITH .F.

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN .F.

ENDIF not able to open the child work area

pcParentDBF=dbf(lcParentWkArea)

llRetVal=SEEK(lcChildID,lcParentWkArea)

pnParentRec=recno(lcParentWkArea)

ifllRetVal and not (isrlocked(pnParentRec, lcParentWkArea) or ;

isflocked(lcParentWkArea))

if rlock(lcParentWkArea)

unlock record pnParentRec in (lcParentWkArea)

else

=rireuse("tparen",lcParentWkArea)

pnError = rierror(-1,"Insert restrict rule violated.","","")

IF _triggerlevel=1

DO riend WITH llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

endif

endif

=rireuse("bank",lcParentWkArea)

IF NOT llRetVal

pnError = rierror(-1,"Insert restrict rule violated.","","")

IF _triggerlevel=1

DO riend WITH llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

ENDIF no parent

ENDIF this value was changed

ENDIF not part of a cascade from "bank"

IF _triggerlevel=1 or type("pccascadeparent")#"C" or (NOT pccascadeparent=="GRWK")

SELECT (lcChildWkArea)

lcChildID=GRWK

lcOldChildID=oldval("GRWK")

pcChildDBF=dbf(lcChildWkArea)

pnChildRec=recno(lcChildWkArea)

pcChildID=lcOldChildID

pcChildExpr="GRWK"

if isnull(lcChildID) or isnull(lcOldChildID) or lcChildID <> lcOldChildID

lcParentWkArea=riopen("grwk","kod_grvk")

IF lcParentWkArea<=0

IF _triggerlevel=1

DO riend WITH .F.

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN .F.

ENDIF not able to open the child work area

pcParentDBF=dbf(lcParentWkArea)

llRetVal=SEEK(lcChildID,lcParentWkArea)

pnParentRec=recno(lcParentWkArea)

ifllRetVal and not (isrlocked(pnParentRec, lcParentWkArea) or ;

isflocked(lcParentWkArea))

if rlock(lcParentWkArea)

unlock record pnParentRec in (lcParentWkArea)

else

=rireuse("tparen",lcParentWkArea)

pnError = rierror(-1,"Insert restrict rule violated.","","")

IF _triggerlevel=1

DO riend WITH llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

endif

endif

=rireuse("grwk",lcParentWkArea)

IF NOT llRetVal

pnError = rierror(-1,"Insert restrict rule violated.","","")

IF _triggerlevel=1

DO riend WITH llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

ENDIF no parent

ENDIF this value was changed

ENDIF not part of a cascade from "grwk"

IF _triggerlevel=1 or type("pccascadeparent")#"C" or (NOT pccascadeparent=="USER")

SELECT (lcChildWkArea)

lcChildID=ID

lcOldChildID=oldval("ID")

pcChildDBF=dbf(lcChildWkArea)

pnChildRec=recno(lcChildWkArea)

pcChildID=lcOldChildID

pcChildExpr="ID"

if isnull(lcChildID) or isnull(lcOldChildID) or lcChildID <> lcOldChildID

lcParentWkArea=riopen("user","kod_user")

IF lcParentWkArea<=0

IF _triggerlevel=1

DO riend WITH .F.

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN .F.

ENDIF not able to open the child work area

pcParentDBF=dbf(lcParentWkArea)

llRetVal=SEEK(lcChildID,lcParentWkArea)

pnParentRec=recno(lcParentWkArea)

ifllRetVal and not (isrlocked(pnParentRec, lcParentWkArea) or ;

isflocked(lcParentWkArea))

if rlock(lcParentWkArea)

unlock record pnParentRec in (lcParentWkArea)

else

=rireuse("tparen",lcParentWkArea)

pnError = rierror(-1,"Insert restrict rule violated.","","")

IF _triggerlevel=1

DO riend WITH llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

endif

endif

=rireuse("user",lcParentWkArea)

IF NOT llRetVal

pnError = rierror(-1,"Insert restrict rule violated.","","")

IF _triggerlevel=1

DO riend WITH llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

ENDIF no parent

ENDIF this value was changed

ENDIF not part of a cascade from "user"

lcParentWkArea=lcChildWkArea

IF _triggerlevel=1

doriend with llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

** "End of Referential integrity Update trigger for" ev

**************************************************************************

**************************************************************************

** "Referential integrity insert trigger for" ev

PROCEDURE __RI_INSERT_ev

LOCAL llRetVal

llRetVal = .t.

PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID

PRIVATE pcParentExpr,pcChildExpr

STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr

STORE 0 TO pnParentRec,pnChildRec

IF _triggerlevel=1

BEGIN TRANSACTION

PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;

pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC

pcOldTalk=SET("TALK")

SET TALK OFF

pcOldDele=SET("DELETED")

pcOldExact=SET("EXACT")

pcOldCompat=SET("COMPATIBLE")

SET COMPATIBLE OFF

SET DELETED ON

SET EXACT OFF

pcRIcursors=""

pcRIwkareas=""

pcRIolderror=ON("error")

pnerror=0

ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())

IF TYPE('gaErrors(1)')<>"U"

releasegaErrors

ENDIF

PUBLIC gaErrors(1,12)

pcOldDBC=DBC()

SET DATA TO ("DATA1")

ENDIF first trigger

LOCAL lcChildID && child's value to be sought in parent

LOCAL lcParentWkArea && parentwork area handle returned by riopen

LOCAL lcChildWkArea && child's work area

LOCAL lcStartArea

lcStartArea=select()

llRetVal=.t.

lcChildWkArea=SELECT()

SELECT (lcChildWkArea)

lcChildID=VEDOMR

pcChildDBF=dbf(lcChildWkArea)

pnChildRec=recno(lcChildWkArea)

pcChildID=lcChildID

pcChildExpr="VEDOMR"

lcParentWkArea=riopen("vedomr","kod_vedomr")

IF lcParentWkArea<=0

IF _triggerlevel=1

DO riend WITH .F.

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN .F.

ENDIF not able to open the child work area

pcParentDBF=dbf(lcParentWkArea)

llRetVal=SEEK(lcChildID,lcParentWkArea)

pnParentRec=recno(lcParentWkArea)

ifllRetVal and not (isrlocked(pnParentRec, lcParentWkArea) or ;

isflocked(lcParentWkArea))

if rlock(lcParentWkArea)

unlock record pnParentRec in (lcParentWkArea)

else

=rireuse("tparen",lcParentWkArea)

pnError = rierror(-1,"Insert restrict rule violated.","","")

IF _triggerlevel=1

DO riend WITH llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

endif

endif

=rireuse("vedomr",lcParentWkArea)

IF NOT llRetVal

pnError = rierror(-1,"Insert restrict rule violated.","","")

IF _triggerlevel=1

DO riend WITH llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

ENDIF

SELECT (lcChildWkArea)

lcChildID=BANK

pcChildDBF=dbf(lcChildWkArea)

pnChildRec=recno(lcChildWkArea)

pcChildID=lcChildID

pcChildExpr="BANK"

lcParentWkArea=riopen("bank","kod_bank")

IF lcParentWkArea<=0

IF _triggerlevel=1

DO riend WITH .F.

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN .F.

ENDIF not able to open the child work area

pcParentDBF=dbf(lcParentWkArea)

llRetVal=SEEK(lcChildID,lcParentWkArea)

pnParentRec=recno(lcParentWkArea)

ifllRetVal and not (isrlocked(pnParentRec, lcParentWkArea) or ;

isflocked(lcParentWkArea))

if rlock(lcParentWkArea)

unlock record pnParentRec in (lcParentWkArea)

else

=rireuse("tparen",lcParentWkArea)

pnError = rierror(-1,"Insert restrict rule violated.","","")

IF _triggerlevel=1

DO riend WITH llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

endif

endif

=rireuse("bank",lcParentWkArea)

IF NOT llRetVal

pnError = rierror(-1,"Insert restrict rule violated.","","")

IF _triggerlevel=1

DO riend WITH llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

ENDIF

SELECT (lcChildWkArea)

lcChildID=GRWK

pcChildDBF=dbf(lcChildWkArea)

pnChildRec=recno(lcChildWkArea)

pcChildID=lcChildID

pcChildExpr="GRWK"

lcParentWkArea=riopen("grwk","kod_grvk")

IF lcParentWkArea<=0

IF _triggerlevel=1

DO riend WITH .F.

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN .F.

ENDIF not able to open the child work area

pcParentDBF=dbf(lcParentWkArea)

llRetVal=SEEK(lcChildID,lcParentWkArea)

pnParentRec=recno(lcParentWkArea)

ifllRetVal and not (isrlocked(pnParentRec, lcParentWkArea) or ;

isflocked(lcParentWkArea))

if rlock(lcParentWkArea)

unlock record pnParentRec in (lcParentWkArea)

else

=rireuse("tparen",lcParentWkArea)

pnError = rierror(-1,"Insert restrict rule violated.","","")

IF _triggerlevel=1

DO riend WITH llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

endif

endif

=rireuse("grwk",lcParentWkArea)

IF NOT llRetVal

pnError = rierror(-1,"Insert restrict rule violated.","","")

IF _triggerlevel=1

DO riend WITH llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

ENDIF

SELECT (lcChildWkArea)

lcChildID=ID

pcChildDBF=dbf(lcChildWkArea)

pnChildRec=recno(lcChildWkArea)

pcChildID=lcChildID

pcChildExpr="ID"

lcParentWkArea=riopen("user","kod_user")

IF lcParentWkArea<=0

IF _triggerlevel=1

DO riend WITH .F.

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN .F.

ENDIF not able to open the child work area

pcParentDBF=dbf(lcParentWkArea)

llRetVal=SEEK(lcChildID,lcParentWkArea)

pnParentRec=recno(lcParentWkArea)

ifllRetVal and not (isrlocked(pnParentRec, lcParentWkArea) or ;

isflocked(lcParentWkArea))

if rlock(lcParentWkArea)

unlock record pnParentRec in (lcParentWkArea)

else

=rireuse("tparen",lcParentWkArea)

pnError = rierror(-1,"Insert restrict rule violated.","","")

IF _triggerlevel=1

DO riend WITH llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

endif

endif

=rireuse("user",lcParentWkArea)

IF NOT llRetVal

pnError = rierror(-1,"Insert restrict rule violated.","","")

IF _triggerlevel=1

DO riend WITH llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

ENDIF

IF _triggerlevel=1

doriend with llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

** "End of Referential integrity insert trigger for" ev

**************************************************************************

**************************************************************************

** "Referential integrity delete trigger for" grwk

PROCEDURE __RI_DELETE_grwk

LOCAL llRetVal

llRetVal = .t.

PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID

PRIVATE pcParentExpr,pcChildExpr

STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr

STORE 0 TO pnParentRec,pnChildRec

IF _triggerlevel=1

BEGIN TRANSACTION

PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;

pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC

pcOldTalk=SET("TALK")

SET TALK OFF

pcOldDele=SET("DELETED")

pcOldExact=SET("EXACT")

pcOldCompat=SET("COMPATIBLE")

SET COMPATIBLE OFF

SET DELETED ON

SET EXACT OFF

pcRIcursors=""

pcRIwkareas=""

pcRIolderror=ON("error")

pnerror=0

ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())

IF TYPE('gaErrors(1)')<>"U"

releasegaErrors

ENDIF

PUBLIC gaErrors(1,12)

pcOldDBC=DBC()

SET DATA TO ("DATA1")

ENDIF first trigger

LOCAL lcParentID && parent's value to be sought in child

LOCAL lcChildWkArea && child work area handle returned by riopen

LOCAL lcParentWkArea

LOCAL llDelHeaderarea

LOCAL lcStartArea

lcStartArea=select()

llRetVal=.t.

lcParentWkArea=select()

SELECT (lcParentWkArea)

pcParentDBF=dbf()

pnParentRec=recno()

STORE KOD_GRVK TO lcParentID,pcParentID

pcParentExpr="KOD_GRVK"

lcChildWkArea=riopen("ev","grvk")

IF lcChildWkArea<=0

IF _triggerlevel=1

DO riend WITH .F.

ENDIF at the end of the highest trigger level

RETURN .F.

ENDIF not able to open the child work area

pcChildDBF=dbf(lcChildWkArea)

SELECT (lcChildWkArea)

SEEK lcParentID

SCAN WHILE GRWK=lcParentID AND llRetVal

pnChildRec=recno()

pcChildID=GRWK

pcChildExpr="GRWK"

llRetVal=ridelete()

ENDSCAN get all of the ev records

=rireuse("ev",lcChildWkArea)

IF NOT llRetVal

IF _triggerlevel=1

DO riend WITH llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

ENDIF

IF _triggerlevel=1

doriend with llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

** "End of Referential integrity Delete trigger for" grwk

**************************************************************************

**************************************************************************

procedure__RI_UPDATE_grwk

** "Referential integrity update trigger for" grwk

LOCAL llRetVal

llRetVal = .t.

PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID

PRIVATE pcParentExpr,pcChildExpr

STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr

STORE 0 TO pnParentRec,pnChildRec

IF _triggerlevel=1

BEGIN TRANSACTION

PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;

pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC

pcOldTalk=SET("TALK")

SET TALK OFF

pcOldDele=SET("DELETED")

pcOldExact=SET("EXACT")

pcOldCompat=SET("COMPATIBLE")

SET COMPATIBLE OFF

SET DELETED ON

SET EXACT OFF

pcRIcursors=""

pcRIwkareas=""

pcRIolderror=ON("error")

pnerror=0

ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())

IF TYPE('gaErrors(1)')<>"U"

releasegaErrors

ENDIF

PUBLIC gaErrors(1,12)

pcOldDBC=DBC()

SET DATA TO ("DATA1")

ENDIF first trigger

LOCAL lcParentID && parent's value to be sought in child

LOCAL lcOldParentID && previous parent id value

LOCAL lcChildWkArea && child work area handle returned by riopen

LOCAL lcChildID && child's value to be sought in parent

LOCAL lcOldChildID && old child id value

LOCAL lcParentWkArea && parentwork area handle returned by riopen

LOCAL lcStartArea

lcStartArea=select()

llRetVal=.t.

lcParentWkArea=select()

SELECT (lcParentWkArea)

pcParentDBF=dbf()

pnParentRec=recno()

lcOldParentID=OLDVAL("KOD_GRVK")

pcParentID=lcOldParentID

pcParentExpr="KOD_GRVK"

lcParentID=KOD_GRVK

IF lcParentID<>lcOldParentID

lcChildWkArea=riopen("ev")

IF lcChildWkArea<=0

IF _triggerlevel=1

DO riend WITH .F.

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN .F.

ENDIF not able to open the child work area

pcChildDBF=dbf(lcChildWkArea)

SELECT (lcChildWkArea)

SCAN FOR GRWK=lcOldParentID

pnChildRec=recno()

pcChildID=GRWK

pcChildExpr="GRWK"

IF NOT llRetVal

EXIT

ENDIF && not llretval

llRetVal=riupdate("GRWK",lcParentID,"GRWK")

ENDSCAN get all of the ev records

=rireuse("ev",lcChildWkArea)

IF NOT llRetVal

IF _triggerlevel=1

DO riend WITH llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

ENDIF

ENDIF this parent id changed

IF _triggerlevel=1

doriend with llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

** "End of Referential integrity Update trigger for" grwk

*************************************************************************

*************************************************************************

** "Referential integrity delete trigger for" user

PROCEDURE __RI_DELETE_user

LOCAL llRetVal

llRetVal = .t.

PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID

PRIVATE pcParentExpr,pcChildExpr

STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr

STORE 0 TO pnParentRec,pnChildRec

IF _triggerlevel=1

BEGIN TRANSACTION

PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;

pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC

pcOldTalk=SET("TALK")

SET TALK OFF

pcOldDele=SET("DELETED")

pcOldExact=SET("EXACT")

pcOldCompat=SET("COMPATIBLE")

SET COMPATIBLE OFF

SET DELETED ON

SET EXACT OFF

pcRIcursors=""

pcRIwkareas=""

pcRIolderror=ON("error")

pnerror=0

ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())

IF TYPE('gaErrors(1)')<>"U"

releasegaErrors

ENDIF

PUBLIC gaErrors(1,12)

pcOldDBC=DBC()

SET DATA TO ("DATA1")

ENDIF first trigger

LOCAL lcParentID && parent's value to be sought in child

LOCAL lcChildWkArea && child work area handle returned by riopen

LOCAL lcParentWkArea

LOCAL llDelHeaderarea

LOCAL lcStartArea

lcStartArea=select()

llRetVal=.t.

lcParentWkArea=select()

SELECT (lcParentWkArea)

pcParentDBF=dbf()

pnParentRec=recno()

STORE KOD_USER TO lcParentID,pcParentID

pcParentExpr="KOD_USER"

lcChildWkArea=riopen("ev","id")

IF lcChildWkArea<=0

IF _triggerlevel=1

DO riend WITH .F.

ENDIF at the end of the highest trigger level

RETURN .F.

ENDIF not able to open the child work area

pcChildDBF=dbf(lcChildWkArea)

SELECT (lcChildWkArea)

SEEK lcParentID

SCAN WHILE ID=lcParentID AND llRetVal

pnChildRec=recno()

pcChildID=ID

pcChildExpr="ID"

llRetVal=ridelete()

ENDSCAN get all of the ev records

=rireuse("ev",lcChildWkArea)

IF NOT llRetVal

IF _triggerlevel=1

DO riend WITH llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

ENDIF

IF _triggerlevel=1

doriend with llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

** "End of Referential integrity Delete trigger for" user

**************************************************************************

**************************************************************************

procedure__RI_UPDATE_user

** "Referential integrity update trigger for" user

LOCAL llRetVal

llRetVal = .t.

PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID

PRIVATE pcParentExpr,pcChildExpr

STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr

STORE 0 TO pnParentRec,pnChildRec

IF _triggerlevel=1

BEGIN TRANSACTION

PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;

pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC

pcOldTalk=SET("TALK")

SET TALK OFF

pcOldDele=SET("DELETED")

pcOldExact=SET("EXACT")

pcOldCompat=SET("COMPATIBLE")

SET COMPATIBLE OFF

SET DELETED ON

SET EXACT OFF

pcRIcursors=""

pcRIwkareas=""

pcRIolderror=ON("error")

pnerror=0

ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())

IF TYPE('gaErrors(1)')<>"U"

releasegaErrors

ENDIF

PUBLIC gaErrors(1,12)

pcOldDBC=DBC()

SET DATA TO ("DATA1")

ENDIF first trigger

LOCAL lcParentID && parent's value to be sought in child

LOCAL lcOldParentID && previous parent id value

LOCAL lcChildWkArea && child work area handle returned by riopen

LOCAL lcChildID && child's value to be sought in parent

LOCAL lcOldChildID && old child id value

LOCAL lcParentWkArea && parentwork area handle returned by riopen

LOCAL lcStartArea

lcStartArea=select()

llRetVal=.t.

lcParentWkArea=select()

SELECT (lcParentWkArea)

pcParentDBF=dbf()

pnParentRec=recno()

lcOldParentID=OLDVAL("KOD_USER")

pcParentID=lcOldParentID

pcParentExpr="KOD_USER"

lcParentID=KOD_USER

IF lcParentID<>lcOldParentID

lcChildWkArea=riopen("ev")

IF lcChildWkArea<=0

IF _triggerlevel=1

DO riend WITH .F.

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN .F.

ENDIF not able to open the child work area

pcChildDBF=dbf(lcChildWkArea)

SELECT (lcChildWkArea)

SCAN FOR ID=lcOldParentID

pnChildRec=recno()

pcChildID=ID

pcChildExpr="ID"

IF NOT llRetVal

EXIT

ENDIF && not llretval

llRetVal=riupdate("ID",lcParentID,"USER")

ENDSCAN get all of the ev records

=rireuse("ev",lcChildWkArea)

IF NOT llRetVal

IF _triggerlevel=1

DO riend WITH llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

ENDIF

ENDIF this parent id changed

IF _triggerlevel=1

doriend with llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

** "End of Referential integrity Update trigger for" user

**************************************************************************

**************************************************************************

** "Referential integrity delete trigger for" vedomr

PROCEDURE __RI_DELETE_vedomr

LOCAL llRetVal

llRetVal = .t.

PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID

PRIVATE pcParentExpr,pcChildExpr

STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr

STORE 0 TO pnParentRec,pnChildRec

IF _triggerlevel=1

BEGIN TRANSACTION

PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;

pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC

pcOldTalk=SET("TALK")

SET TALK OFF

pcOldDele=SET("DELETED")

pcOldExact=SET("EXACT")

pcOldCompat=SET("COMPATIBLE")

SET COMPATIBLE OFF

SET DELETED ON

SET EXACT OFF

pcRIcursors=""

pcRIwkareas=""

pcRIolderror=ON("error")

pnerror=0

ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())

IF TYPE('gaErrors(1)')<>"U"

releasegaErrors

ENDIF

PUBLIC gaErrors(1,12)

pcOldDBC=DBC()

SET DATA TO ("DATA1")

ENDIF first trigger

LOCAL lcParentID && parent's value to be sought in child

LOCAL lcChildWkArea && child work area handle returned by riopen

LOCAL lcParentWkArea

LOCAL llDelHeaderarea

LOCAL lcStartArea

lcStartArea=select()

llRetVal=.t.

lcParentWkArea=select()

SELECT (lcParentWkArea)

pcParentDBF=dbf()

pnParentRec=recno()

STORE KOD_VEDOMR TO lcParentID,pcParentID

pcParentExpr="KOD_VEDOMR"

lcChildWkArea=riopen("ev","vedomr")

IF lcChildWkArea<=0

IF _triggerlevel=1

DO riend WITH .F.

ENDIF at the end of the highest trigger level

RETURN .F.

ENDIF not able to open the child work area

pcChildDBF=dbf(lcChildWkArea)

SELECT (lcChildWkArea)

SEEK lcParentID

SCAN WHILE VEDOMR=lcParentID AND llRetVal

pnChildRec=recno()

pcChildID=VEDOMR

pcChildExpr="VEDOMR"

llRetVal=ridelete()

ENDSCAN get all of the ev records

=rireuse("ev",lcChildWkArea)

IF NOT llRetVal

IF _triggerlevel=1

DO riend WITH llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

ENDIF

IF _triggerlevel=1

doriend with llRetVal

ENDIF at the end of the highest trigger level

SELECT (lcStartArea)

RETURN llRetVal

** "End of Referential integrity Delete trigger for" vedomr

**************************************************************************

**************************************************************************

procedure__RI_UPDATE_vedomr

** "Referential integrity update trigger for" vedomr

LOCAL llRetVal

llRetVal = .t.

PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID

PRIVATE pcParentExpr,pcChildExpr

STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr

STORE 0 TO pnParentRec,pnChildRec

IF _triggerlevel=1

BEGIN TRANSACTION

PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;

pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC

pcOldTalk=SET("TALK")

SET TALK OFF

pcOldDele=SET("DELETED")

pcOldExact=SET("EXACT")

pcOldCompat=SET("COMPATIBLE")

SET COMPATIBLE OFF

SET DELETED ON

SET EXACT OFF

pcRIcursors=""

pcRIwkareas=""

pcRIolderror=ON("error")

pnerror=0

ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())

IF TYPE('gaErrors(1)')<>"U"

releasegaErrors

ENDIF

PUBLIC gaErrors(1,12)

pcOldDBC=DBC()

SET DATA TO ("DATA1")

ENDIF first trigger

LOCAL lcParentID && parent's value to be sought in child

LOCAL lcOldParentID && previous parent id value

LOCAL lcChildWkArea && child work area handle returned by riopen

LOCAL lcChildID && child's value to be sought in parent

LOCAL lcOldChildID && old child id value

LOCAL lcParentWkArea && parentwork area handle returned by riopen

LOCAL lcStartArea

lcStartArea=select()

llRetVal=.t.

lcParentWkArea=select()

SELECT (lcParentWkArea)

pcParentDBF=dbf()

pnParentRec=recno()

lcOldParentID=OLDVAL("KOD_VEDOMR")

pcParentID=lcOldParentID


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

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