Разработка автоматизированной подсистемы кадрового учета с использованием CASE средств (BPWin и ERWin) для МОУ Лицей №17

Разработка функциональной и инфологической модели системы "Кадровый учет" с использованием индустриального проектирования CASE средств (BPWin и ERWin). Программная система позволяет упростить процесс проведения регистрации и учета сотрудников лицея.

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

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

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

tуход = 25 + ( 3,6 - 2 ) 2 = 29

Qизбыт = Qизб.1 + Qизб.2 + Qизб.3 ,

где

Qизб. - избыток тепла от электрооборудования и освещения.

Qизб.1 = Е р ,

где

Е - коэффициент потерь электроэнергии на теплоотвод (Е=0.55 для освещения);

р - мощность, р = 40 Вт 5 = 200 Вт.

Qизб.1 = 0.55 * 200=110 Вт

Qизб.2 - теплопоступление от солнечной радиации,

Qизб.2 =m S k Qc ,

где

m - число окон, m = 1;

S - площадь окна, S = 5,4 м2;

k - коэффициент, учитывающий остекление. Для двойного остекления

k = 0.6;

Qc = 127 Вт/м - теплопоступление от окон.

Qизб.2 = 1 * 5.4 * 0.6 * 127 = 411,48 Вт

Qизб.3 - тепловыделения людей

Qизб.3 = n q ,

где

q = 80 Вт/чел. , n - число людей, например, n = 5

Qизб.3 = 5 * 80 = 400 Вт

Qизбыт = 110 +411,48 + 400 = 921,48 Вт

Из уравнения теплового баланса следует:

Lвент = 3600 * 921.48 =251.31 м3

1000*(29-18)*1.2

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

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

6.4 Выводы

Произведен анализ вредных факторов, оказывающих негативное влияние на органы зрения пользователя ПЭВМ. Указаны требования к рабочему месту, которые согласно ГОСТам обеспечивают максимальное удобство при работе с компьютером. Указаны правила обеспечения безопасности на рабочем месте. Выполнен расчет вентиляции для помещения (подсчитан объем вентилируемого помещения Lвент=251,31 м3/ч при общем объеме помещения Lпомещ=108 м3 и 5 работников).

  • ЗАКЛЮЧЕНИЕ
  • В ходе работы над проектом была создана автоматизированная подсистема кадрового учета, которая позволила автоматизировать и упростить процесс проведения регистрации и учета сотрудников организации. Дана методика обработки результатов работы отдела кадров с использованием системы, рассмотрены методы защиты информации от несанкционированного доступа и от потери данных.
  • Проведен анализ системы управления МОУ Лицей № 17. В результате анализа, основанного на структурном подходе, была создана модель организации, основе которой лежит методология функционального моделирования. Также исследована сфера деятельности учреждения. Для данной организации это исправление лиц вставших на путь конфликта с законом. В результате анализа были сформулированы цели, стоящие перед учреждением.
  • В процессе проведения исследования автоматизированной системы управления организации была описана функциональная модель структуры АСУ. Анализ показал, что в организации, из-за отсутствия высококвалифицированных сотрудников система специализированных автоматизированных подсистем и общее программное обеспечение находятся на начальном этапе разработки.
  • На основании данных, полученных в результате анализа организации было установлено, что первоочередным является создание автоматизированной подсистемы кадрового учета. На основе исследования предметной области была построена инфологическая модель, спроектирована база данных. Разработан обобщенный алгоритм функционирования автоматизированной подсистемы специалиста отдела кадров.
  • Разрабатываемая подсистема предназначена для получения сведений о сотрудниках предприятия: табельный номер, фамилия, имя, отчество, пол, год рождения, стаж, образование, специальность, должность, когда и какое учебное заведение окончил, место предыдущей работы, отношение к военной службе (состав и военно-учетная специальность), адрес, семейное положение и наличие детей.
  • Рассчитан экономический эффект от внедрения этой системы, который составит порядка 211420 руб., поэтому если учесть что система реально может функционировать в течение 5 лет без дополнительных расходов не превышающих допустимые, то за полезный срок эксплуатации в течение этих лет прибыль составит 422840 рублей, что подтверждает экономическую обоснованность внедрения данной системы.
  • Со временем созданная система будет развиваться, и совершенствоваться, будут добавлены новые критерии оценки результатов работы отдела кадров и усовершенствованна логика и алгоритмы ее работы.
  • Таким образом, внедрение и использование данного проекта позволит с наименьшими затратами и большей эффективностью специалисту отдела кадров выполнять свои должностные обязанности.
  • Список используемой литературы
  • 1. Дж. Ульман. Основы систем баз данных. - М.: Финансы и статистика,2003.
  • 2. К. Дейт. Введение в системы баз данных. - М.: Hаука, 1998.
  • 3. В.П. Корячко, В.М. Курейчик, И.П. Hоренков. Теоретические основы САПР. - М.: Энергоатомиздат, 1997.
  • 4. М.Р. Когаловский. Технология баз данных на персональных ЭВМ. - М.: Финансы и статистика, 1999.
  • 5. А.H. Hаумов, А.М. Вендров и др. Системы управления базами данных и знаний. - М.: Финансы и статистика, 2003.
  • 6. М.А. Аппак. Автоматизированные рабочие места на основе персональных ЭВМ. - М. :Радио и связь, 1999.
  • 7. С.М. Диго. Проектирование и использования баз данных. - М.: Финансы и статистика, 2005.
  • 8. Д. Веттинг. Nowell NetWare для пользователя. - М.: Радио и связь, 1997.
  • 9. С.И. Казаков. Основы сетевых технологий. - М.: Радио и связь, 1999.
  • 10. Nowell NetWare 4.02 for Lan Managers Nowell Corp. Документация к продукту.
  • 11. В.В. Кириллов. Структуризованный язык запросов (SQL). - СПб.:ИТМО, 2004.
  • 12. Б.Г. Голованов. Введение в программирование в сетях Nowell NetWare. - СПб.: Питер, 2006.
  • 13. В. Фаронов. Программирование баз данных в Delphi 6. - СПб.: Питер, 2002.
  • 14. П. Дарахвелидзе, Е. Марков. Программирование в Delphi 7. - СПб.: БХВ - Петербург, 2008.
  • 15. В. Сергеев. SQL SERVER. Руководство для профессионалов. - СПб.: БХВ - Петербург, 2008.
  • 16. ГОСТ 12.0.003-74. ССБТ Опасные и вредные факторы. Классификация.
  • 17. В.К. Шумилин, И.Г. Гетия. Охрана труда при работе на ПЭВМ и ЭВМ. Учебное пособие (часть 1).- М.: МИП, 2004.
  • 18. И.Г. Гетия, И.Н. Леонтьева, Е.Н. Кулемина. Учебное пособие. Проектирование вентиляции и кондиционирование воздуха, искусственного и естественного освещения в помещении ВЦ (спец.01.02; 21.01; 21.03;21.06; 22.01; 22.03; 23.03) - М: МГАПИ, 2005.
  • 19. И.Г. Гетия, В.К. Шумилин, И.Н. Леонтьева и др. Экология компьютерной техники. - М.: МГАПИ,1996.
  • 20. СНиП23-05-95. Естественное и искусственное освещение. Нормы проектирования.
  • 21. СанПин 2.2.2/2.4.1340-03. Гигиенические требования к персональным электронно-вычислительным машинам и организации работы.

Размещено на http://www.allbest.ru/

Приложение а

Инфологическая модель

Приложение б

Даталогическая модель

Приложение В

Блок-схема алгоритма

ПРИЛОЖЕНИЕ Г

Листинг основного файла проекта

program emp;

uses

Forms,

Windows,

SysUtils,

Dialogs,

MainForm_FormUnit in 'MainForm_FormUnit.pas' {MainForm},

AppBuilder_FormUnit in 'units\AppBuilder_FormUnit.pas' {AppBuilder},

MiscProcs_Unit in 'units\MiscProcs_Unit.pas',

TypesVars in 'units\TypesVars.pas',

Data_DataModule in 'data\Data_DataModule.pas' {Data: TDataModule},

Startup_FormUnit in 'Startup_FormUnit.pas' {Startup},

About_FormUnit in 'About_FormUnit.pas' {About},

Logon_FormUnit in 'Logon_FormUnit.pas' {Logon},

DateRange_FormUnit in 'dialogs\DateRange_FormUnit.pas' {DateRange},

SingleDate_FormUnit in 'dialogs\SingleDate_FormUnit.pas' {SingleDate},

Departament_FormUnit in 'dicts\Departament_FormUnit.pas' {Departament},

Employes_FormUnit in 'dicts\Employes_FormUnit.pas' {Employes},

Job_FormUnit in 'dicts\Job_FormUnit.pas' {Job},

FindEmploye_FormUnit in 'reports\FindEmploye_FormUnit.pas' {FindEmploye},

EmpDocList_FormUnit in 'list\EmpDocList_FormUnit.pas' {EmpDocList},

EmpDoc_FormUnit in 'list\EmpDoc_FormUnit.pas' {EmpDoc},

UserForm_FormUnit in 'UserForm_FormUnit.pas' {User},

OptionsForm_FormUnit in 'OptionsForm_FormUnit.pas' {Options},

Event_FormUnit in 'Event_FormUnit.pas' {Event};

{$R *.RES}

begin

Application.Initialize;

Application.Title := ' АРМ Отдел кадров 1.0';

SystemDate := Now;

SystemParametersInfo(SPI_SETBEEP, 0, nil, 0);

RegistryKey := ParamStr(1);

ProgramName := 'АРМ Отдел кадров 1.0';

Application.CreateForm(TMainForm, MainForm);

Application.CreateForm(TAppBuilder, AppBuilder);

Application.CreateForm(TStartup, Startup);

Startup.Show;

Startup.Update;

Application.CreateForm(TData, Data);

Application.CreateForm(TLogon, Logon);

Startup.RxStatus.Caption := 'Инициализация...';

Startup.Update;

Data.InitConnection;

if not AutoLogon then Logon.ShowModal else begin

Logon.UName.Text := Data.Connect.Username;

Logon.LogonProc;

end;

if not Application.Terminated then begin

Startup.RxStatus.Caption := 'Создание диалогов...';

Startup.Update;

Application.CreateForm(TDateRange, DateRange);

Application.CreateForm(TSingleDate, SingleDate);

Startup.RxStatus.Caption := 'Создание справочников...';

Startup.Update;

Application.CreateForm(TDepartament, Departament);

Departament.qryDepartament.Open;

Application.CreateForm(TJob, Job);

Job.qryJob.Open;

Application.CreateForm(TEmployes, Employes);

Employes.qryEmployes.Open;

Application.CreateForm(TOptions, Options);

Options.Init;

end;

Startup.Close;

if Data.Connect.Connected then Application.Run;

SystemParametersInfo(SPI_SETBEEP, 1, nil, 0);

end.

Процедура заполнения справочника на основании документов

CREATE PROCEDURE SET_DICTIONARY_BY_DOCUMENTS (

I_START_DATE DATE,

I_STOP_DATE DATE)

AS

DECLARE VARIABLE V_ID INTEGER;

DECLARE VARIABLE V_DOC_TYPE INTEGER;

DECLARE VARIABLE V_CREATE_DATE DATE;

DECLARE VARIABLE V_DOC_NO INTEGER;

DECLARE VARIABLE V_ADV_NO INTEGER;

DECLARE VARIABLE V_EMP_ID INTEGER;

DECLARE VARIABLE V_EMP_SALARY NUMERIC(15,4);

DECLARE VARIABLE V_EMP_JOB_ID INTEGER;

DECLARE VARIABLE V_EMP_DEP_ID INTEGER;

DECLARE VARIABLE V_STATUS INTEGER;

DECLARE VARIABLE V_TEMP_START_DATE DATE;

DECLARE VARIABLE V_TEMP_STOP_DATE DATE;

begin

for select ID, doc_type, CREATE_DATE, DOC_NO, ADV_NO, EMP_ID, EMP_SALARY, EMP_JOB_ID,

EMP_DEP_ID, STATUS

from emp_doc

where create_date between :i_start_date and :i_stop_date

order by create_date

into :V_ID, :V_doc_type, :V_CREATE_DATE, :V_DOC_NO, :V_ADV_NO, :V_EMP_ID, :V_EMP_SALARY, :V_EMP_JOB_ID, :V_EMP_DEP_ID, :V_STATUS

do begin

select work_start_date, work_stop_date from employes where id = :V_EMP_ID into :v_temp_start_date,

:v_temp_stop_date;

if (v_doc_type = -1) then begin

update employes set salary = 0,

status = 0,

dep_id = 0,

stat_id = 0

where id = :v_emp_id;

update employes set work_stop_date = :v_create_date, work_stop_id = :v_id

where id = :v_emp_id;

end

if (v_doc_type = 1) then begin

update employes set salary = :v_emp_salary,

status = :v_doc_type,

dep_id = :V_EMP_DEP_ID,

stat_id = :v_emp_job_id

where id = :v_emp_id;

if (v_temp_start_date is null) then update employes set work_start_date = :v_create_date, work_start_id =

:v_id where id = :v_emp_id;

if (v_create_date < v_temp_start_date) then update employes set work_start_date = :v_create_date,

work_start_id = :v_id where id = :v_emp_id;

end

end

end

Процедура отбора сотрудников номинированных на «13 зарплату», проработавших более года

CREATE PROCEDURE SELECT_MORE_YEAR (

I_DATE DATE)

RETURNS (

R_ID INTEGER,

R_START_DATE DATE,

R_DAYS INTEGER)

AS

DECLARE VARIABLE V_ID INTEGER;

DECLARE VARIABLE V_FIRE_DATE DATE;

DECLARE VARIABLE V_START_DATE DATE;

begin

for select employes.id from employes order by t_name into :v_id

do begin

v_fire_date = NULL;

v_start_date = NULL;

select max(create_date) from emp_doc where emp_id = :v_id and create_date < :i_date and doc_type = -1 into

:v_fire_date;

if (v_fire_date is null) then begin

select min(create_date) from emp_doc where emp_id = :v_id and create_date < :i_date and doc_type = 1

into :v_start_date;

end else begin

select min(create_date) from emp_doc where emp_id = :v_id and create_date < :i_date and create_date <

:v_fire_date and doc_type = 1 into :v_start_date;

end

r_id = v_id;

r_start_date = v_start_date;

r_days = i_date - v_start_date;

if (v_start_date < i_date-365) then suspend;

end

end

Процедура установки разрешений по правам пользователей

procedure TMainForm.SetSecurity;

var

qry : TIBOQuery;

begin

qry := TIBOQuery.Create(Self);

qry.SQL.Text := 'select * from users where id = '+IntToStr(SystemUser.UserId);

qry.Open;

if qry.FieldByName('can_manage').AsInteger = 1 then mnuUserMan.Enabled := True else mnuUserMan.Enabled

:= False;

CanDelete := qry.FieldByName('can_delete').AsInteger;

CanDeleteDict := qry.FieldByName('can_delete_dict').AsInteger;

if UpperCase(qry.FieldByName('name').AsString) = 'SYSDBA' then mnuArc.Enabled := True else

mnuArc.Enabled := False;

if UpperCase(qry.FieldByName('name').AsString) = 'SYSDBA' then ToolButton5.Enabled := True else

ToolButton5.Enabled := False;

qry.Free;

end;

Процедура вывода отчета «Уволенные сотрудники»

procedure TEmployes.PrintFired;

begin

qryEmployes.Filtered := False;

frEmpDataSet.DataSource := dsEmployes;

filter_type := 0;

qryEmployes.Close;

qryEmployes.SQL.Text := 'select * from employes where status = 0 order by t_name';

qryEmployes.Open;

frEmpReport.LoadFromFile(SystemPath+'\Reports\emp_registry_fired.frf');

frEmpReport.ShowReport;

qryEmployes.Filtered := True;

btnRefreshClick(Self);

end;

Процедура разделения документов по типу в журнале документов

procedure TEmpDocList.tabControlChange(Sender: TObject);

begin

qryEmpDocList.Close;

case tabControl.TabIndex of

0 : qryEmpDocList.SQL.Text := 'select * from emp_doc order by create_date, doc_no, adv_no';

1 : qryEmpDocList.SQL.Text := 'select * from emp_doc where doc_type = 1 order by create_date, doc_no,

adv_no';

2 : qryEmpDocList.SQL.Text := 'select * from emp_doc where doc_type = -1 order by create_date, doc_no,

adv_no';

end;

qryEmpDocList.Open;

end;

Скрипт для создания базы данных

SET SQL DIALECT 3;

SET NAMES WIN1251;

CREATE DATABASE 'LOCALHOST:C:\Projects\Employes\emp.gdb'

USER 'SYSDBA' PASSWORD 'masterkey'

PAGE_SIZE 16384

DEFAULT CHARACTER SET WIN1251;

CREATE DOMAIN V_DATE AS

DATE;

CREATE DOMAIN V_DOUBLE AS

NUMERIC(15,4);

CREATE DOMAIN V_DOUBLE_6 AS

NUMERIC(15,6);

CREATE DOMAIN V_INTEGER AS

INTEGER;

CREATE DOMAIN V_TEXT AS

CHAR(80);

CREATE DOMAIN V_TEXT10 AS

CHAR(10);

CREATE DOMAIN V_TEXT128 AS

CHAR(128);

CREATE DOMAIN V_TEXT200 AS

CHAR(200);

CREATE DOMAIN V_TEXT2048 AS

CHAR(2048);

CREATE DOMAIN V_TEXT25 AS

CHAR(25);

CREATE DOMAIN V_TEXT40 AS

CHAR(40);

CREATE DOMAIN V_TIMESTAMP AS

TIMESTAMP;

/******************************************************************************/

/**** Generators ****/

/******************************************************************************/

CREATE GENERATOR GEN_DEPARTAMENT_ID;

CREATE GENERATOR GEN_EMPLOYES_ID;

CREATE GENERATOR GEN_EMP_DOC_ID;

CREATE GENERATOR GEN_EVENTS_ID;

CREATE GENERATOR GEN_JOBS_ID;

CREATE GENERATOR GEN_OPTIONS_ID;

CREATE GENERATOR GEN_USERS_ID;

SET TERM ^ ;

/******************************************************************************/

/**** Stored Procedures ****/

/******************************************************************************/

CREATE PROCEDURE SELECT_MORE_YEAR (

I_DATE DATE)

RETURNS (

R_ID INTEGER,

R_START_DATE DATE,

R_DAYS INTEGER)

AS

BEGIN

EXIT;

END^

CREATE PROCEDURE SET_DICTIONARY_BY_DOCUMENTS (

I_START_DATE DATE,

I_STOP_DATE DATE)

AS

BEGIN

EXIT;

END^

SET TERM ; ^

/******************************************************************************/

/**** Tables ****/

/******************************************************************************/

CREATE TABLE DEPARTAMENT (

ID V_INTEGER NOT NULL,

NAME V_TEXT40 NOT NULL,

INIT_TIME V_TIMESTAMP DEFAULT 'now' NOT NULL

);

CREATE TABLE EMP_DOC (

ID V_INTEGER NOT NULL,

USER_ID V_INTEGER NOT NULL,

INIT_TIME V_TIMESTAMP DEFAULT 'NOW' NOT NULL,

CREATE_DATE V_DATE,

DOC_TYPE V_INTEGER,

DOC_NO V_INTEGER,

ADV_NO V_INTEGER,

EMP_ID V_INTEGER,

EMP_SALARY V_DOUBLE,

EMP_JOB_ID V_INTEGER,

EMP_DEP_ID V_INTEGER,

STATUS V_INTEGER

);

CREATE TABLE EMPLOYES (

ID V_INTEGER NOT NULL,

F_NAME V_TEXT,

S_NAME V_TEXT,

T_NAME V_TEXT NOT NULL,

BORN_DATE V_DATE,

PASS_SERIES V_TEXT10,

PASS_NO V_TEXT10,

PASS_ORIGIN V_TEXT,

PASS_DATE V_DATE,

PASS_ADDR V_TEXT128,

ADDR V_TEXT128,

WORK_BOOK_NO V_TEXT25,

INN V_TEXT25,

PENS_BOOK_NO V_TEXT25,

MED_BOOK V_TEXT25,

MED_ACCESS V_INTEGER,

EDUCATION V_TEXT,

SPECALISATION V_TEXT,

DEP_ID V_INTEGER DEFAULT 0,

STAT_ID V_INTEGER DEFAULT 0,

STATUS V_INTEGER DEFAULT 0,

GENDER V_INTEGER DEFAULT 0,

SALARY V_DOUBLE DEFAULT 0,

CHILDREN_COUNT V_INTEGER DEFAULT 0,

WORK_START_DATE V_DATE,

WORK_STOP_DATE V_DATE,

WORK_START_ID V_INTEGER DEFAULT 0,

WORK_STOP_ID V_INTEGER DEFAULT 0,

FAMILY_STATUS V_INTEGER DEFAULT

0,

ADD_INFO V_TEXT2048

);

CREATE TABLE EVENTS (

ID V_INTEGER NOT NULL,

USER_NAME V_TEXT40,

WORKSTATION V_TEXT40,

EVENT_ID V_INTEGER,

EVENT_DESC V_TEXT200,

CREATE_DATE V_DATE DEFAULT 'NOW' NOT NULL

);

CREATE TABLE JOBS (

ID V_INTEGER NOT NULL,

NAME V_TEXT40,

SAMPLE_SALARY V_DOUBLE

);

CREATE TABLE OPTIONS (

ID V_INTEGER NOT NULL,

PARAM_NAME V_TEXT25 NOT NULL,

PARAM_VAL V_TEXT40

);

CREATE TABLE USERS (

ID V_INTEGER NOT NULL,

NAME V_TEXT25,

CAN_DELETE V_INTEGER,

CAN_MANAGE V_INTEGER,

CAN_DELETE_DICT V_INTEGER,

CAN_LOGIN V_INTEGER,

USER_NAME V_TEXT

);

/******************************************************************************/

/**** Indices ****/

/******************************************************************************/

CREATE UNIQUE INDEX DEPARTAMENT_ID_IDX ON DEPARTAMENT (ID);

CREATE UNIQUE INDEX DEPARTAMENT_NAME_IDX ON DEPARTAMENT (NAME);

CREATE UNIQUE INDEX EMPLOYES_ID ON EMPLOYES (ID);

CREATE UNIQUE INDEX EMPLOYES_INN ON EMPLOYES (INN);

CREATE UNIQUE INDEX EMPLOYES_PASS ON EMPLOYES (PASS_NO, PASS_SERIES);

CREATE UNIQUE INDEX EMP_DOC_ID ON EMP_DOC (ID);

CREATE INDEX EVENTS_ID ON EVENTS (ID);

CREATE UNIQUE INDEX JOBS_ID ON JOBS (ID);

CREATE UNIQUE INDEX JOBS_NAME ON JOBS (NAME);

CREATE UNIQUE INDEX USERS_ID ON USERS (ID);

CREATE UNIQUE INDEX USERS_NAME ON USERS (NAME);

/******************************************************************************/

/**** Triggers ****/

/******************************************************************************/

SET TERM ^ ;

/* Trigger: DEPARTAMENT_BI */

CREATE TRIGGER DEPARTAMENT_BI FOR DEPARTAMENT

ACTIVE BEFORE INSERT POSITION 0

AS

BEGIN

IF (NEW.ID IS NULL) THEN

NEW.ID = GEN_ID(GEN_DEPARTAMENT_ID,1);

END

^

/* Trigger: EMPLOYES_BI */

CREATE TRIGGER EMPLOYES_BI FOR EMPLOYES

ACTIVE BEFORE INSERT POSITION 0

AS

BEGIN

IF (NEW.ID IS NULL) THEN

NEW.ID = GEN_ID(GEN_EMPLOYES_ID,1);

END

^

/* Trigger: EMP_DOC_BI */

CREATE TRIGGER EMP_DOC_BI FOR EMP_DOC

ACTIVE BEFORE INSERT POSITION 0

AS

BEGIN

IF (NEW.ID IS NULL) THEN

NEW.ID = GEN_ID(GEN_EMP_DOC_ID,1);

END

^

/* Trigger: EVENTS_BI */

CREATE TRIGGER EVENTS_BI FOR EVENTS

ACTIVE BEFORE INSERT POSITION 0

AS

BEGIN

IF (NEW.ID IS NULL) THEN

NEW.ID = GEN_ID(GEN_EVENTS_ID,1);

END

^

/* Trigger: JOBS_BI */

CREATE TRIGGER JOBS_BI FOR JOBS

ACTIVE BEFORE INSERT POSITION 0

AS

BEGIN

IF (NEW.ID IS NULL) THEN

NEW.ID = GEN_ID(GEN_JOBS_ID,1);

END

^

/* Trigger: OPTIONS_BI */

CREATE TRIGGER OPTIONS_BI FOR OPTIONS

ACTIVE BEFORE INSERT POSITION 0

AS

BEGIN

IF (NEW.ID IS NULL) THEN

NEW.ID = GEN_ID(GEN_OPTIONS_ID,1);

END

^

/* Trigger: USERS_BI */

CREATE TRIGGER USERS_BI FOR USERS

ACTIVE BEFORE INSERT POSITION 0

AS

BEGIN

IF (NEW.ID IS NULL) THEN

NEW.ID = GEN_ID(GEN_USERS_ID,1);

END

^

SET TERM ; ^

/******************************************************************************/

/**** Stored Procedures ****/

/******************************************************************************/

SET TERM ^ ;

ALTER PROCEDURE SELECT_MORE_YEAR (

I_DATE DATE)

RETURNS (

R_ID INTEGER,

R_START_DATE DATE,

R_DAYS INTEGER)

AS

DECLARE VARIABLE V_ID INTEGER;

DECLARE VARIABLE V_FIRE_DATE DATE;

DECLARE VARIABLE V_START_DATE DATE;

begin

for select employes.id from employes order by t_name into :v_id

do begin

v_fire_date = NULL;

v_start_date = NULL;

select max(create_date) from emp_doc where emp_id = :v_id and create_date < :i_date and doc_type =

-1 into :v_fire_date;

if (v_fire_date is null) then begin

select min(create_date) from emp_doc where emp_id = :v_id and create_date < :i_date and doc_type

= 1 into :v_start_date;

end else begin

select min(create_date) from emp_doc where emp_id = :v_id and create_date < :i_date and create_date < :v_fire_date and doc_type = 1 into :v_start_date;

end

r_id = v_id;

r_start_date = v_start_date;

r_days = i_date - v_start_date;

if (v_start_date < i_date-365) then suspend;

end

end

^

ALTER PROCEDURE SET_DICTIONARY_BY_DOCUMENTS (

I_START_DATE DATE,

I_STOP_DATE DATE)

AS

DECLARE VARIABLE V_ID INTEGER;

DECLARE VARIABLE V_DOC_TYPE INTEGER;

DECLARE VARIABLE V_CREATE_DATE DATE;

DECLARE VARIABLE V_DOC_NO INTEGER;

DECLARE VARIABLE V_ADV_NO INTEGER;

DECLARE VARIABLE V_EMP_ID INTEGER;

DECLARE VARIABLE V_EMP_SALARY NUMERIC(15,4);

DECLARE VARIABLE V_EMP_JOB_ID INTEGER;

DECLARE VARIABLE V_EMP_DEP_ID INTEGER;

DECLARE VARIABLE V_STATUS INTEGER;

DECLARE VARIABLE V_TEMP_START_DATE DATE;

DECLARE VARIABLE V_TEMP_STOP_DATE DATE;

begin

for select ID, doc_type, CREATE_DATE, DOC_NO, ADV_NO, EMP_ID, EMP_SALARY, EMP_JOB_ID, EMP_DEP_ID, STATUS

from emp_doc

where create_date between :i_start_date and :i_stop_date

order by create_date

into :V_ID, :V_doc_type, :V_CREATE_DATE, :V_DOC_NO, :V_ADV_NO, :V_EMP_ID, :V_EMP_SALARY, :V_EMP_JOB_ID, :V_EMP_DEP_ID, :V_STATUS

do begin

select work_start_date, work_stop_date from employes where id = :V_EMP_ID into :v_temp_start_date,

:v_temp_stop_date;

if (v_doc_type = -1) then begin

update employes set salary = 0,

status = 0,

dep_id = 0,

stat_id = 0

where id = :v_emp_id;

update employes set work_stop_date = :v_create_date, work_stop_id = :v_id

where id = :v_emp_id;

end

if (v_doc_type = 1) then begin

update employes set salary = :v_emp_salary,

status = :v_doc_type,

dep_id = :V_EMP_DEP_ID,

stat_id = :v_emp_job_id

where id = :v_emp_id;

if (v_temp_start_date is null) then update employes set work_start_date = :v_create_date,

work_start_id = :v_id where id = :v_emp_id;

if (v_create_date < v_temp_start_date) then update employes set work_start_date =

:v_create_date, work_start_id = :v_id where id = :v_emp_id;

end

end

end

^

SET TERM ; ^

Размещено на http://www.allbest.ru/


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

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