Файл: Проектирование реализации операций бизнес-процесса.pdf
Добавлен: 15.06.2023
Просмотров: 291
Скачиваний: 2
СОДЕРЖАНИЕ
1.1. Выбор комплекса задач автоматизации
1.2. Характеристика существующих бизнес-процессов
1.3. Характеристика документооборота, возникающего при решении задачи
Функции и задачи создаваемой АС:
Ожидаемые технико-экономические результаты создания АС:
1.4. Обоснование проектных решений по информационному обеспечению
1.5. Обоснование проектных решений по программному обеспечению
2.1. Информационная модель и её описание
2.2. Характеристика нормативно-справочной, входной и оперативной информации
2.3. Характеристика результатной информации
2.4. Общие положения (дерево функций и сценарий диалога)
2.5. Характеристика базы данных
2.6. Структурная схема пакета (дерево вызова программных модулей)
2.7. Описание программных модулей
//Форматированиезаголовка:
Width := Min(30, Trunc(ADBGrid.Columns[i].Width * 0.2));
Excel.Cells[5,i+1].ColumnWidth := Width;
Excel.Cells[5,i+1].Font.Bold := True;
end;
Excel.Cells[1,1] := Date;
Excel.Cells[3,1] := ACaption;
Excel.Cells[3,1].Font.Bold := True;
Excel.Cells[3,1].Font.Size := 12;
i := 5;
//Экспорт данных из таблиц БД:
with ADBGrid.DataSource.DataSet do
begin
DisableControls; //Отключаем сетку на время формирования отчета
First;
while not Eof do
begin
Inc(i);
//Выводятся NumCol первых полей таблицы, отображенных в DBGrid'е:
for j:=0 to NumCol-1 do
Excel.Cells[i,j+1] := FieldByName(ADBGrid.Columns[j].FieldName).AsString;
Next;
end;
end; //with
Excel.Application.EnableEvents := True;
Excel.Visible := True;
except
Excel.Quit;
end;
finally
ADBGrid.DataSource.DataSet.EnableControls;
Screen.Cursor := crDefault;
ADBGrid.Enabled := True;
end;
end;
//Формирование приказа о приеме на работу для текущей выбранной должности
//работника (если у него несколько должностей):
procedure Rep_Receive;
var
Excel: Variant;
WorkbookName: string;
begin
//ШаблонхранитсявпапкеШаблоны:
WorkbookName := GetCurrentDir + '\Шаблоны\' + 'Приказоприеме.xlt';
Excel := CreateOleObject('Excel.Application');
try
Excel.Workbooks.Open(WorkbookName);
//Экспорт данных из таблицы БД:
with DM do
begin
dstRequisite.Open;
dstEmpPosts.Open;
dstDepartments.Open;
//Выводреквизитов:
Excel.Cells[9,2] := dstRequisite.FieldByName('НаименованиеОрг').AsString;
Excel.Cells[41,5] := dstRequisite.FieldByName('РукДолжн').AsString;
Excel.Cells[41,10] := dstRequisite.FieldByName('РукФИО').AsString;
Excel.Cells[13,10] := Date;
Excel.Cells[44,10] := GetRightDate(Date);
Excel.Cells[13,8] := dstEmployee.FieldByName('ТабN').AsString + '1';
Excel.Cells[17,9] := dstEmpPosts.FieldByName('ПринятС').AsString;
Excel.Cells[21,2] := dstEmployee.FieldByName('Фамилия').AsString + ' ' +
dstEmployee.FieldByName('Имя').AsString + ' ' +
dstEmployee.FieldByName('Отчество').AsString;
Excel.Cells[21,10] := FormatFloat('0000', dstEmployee.FieldByName('ТабN').AsInteger);
if dstDepartments.Locate('ID', dstEmpPosts.FieldByName('ОтделID').AsInteger, []) then
Excel.Cells[23,3] := dstDepartments.FieldByName('Отдел').AsString;
Excel.Cells[25,2] := dstEmpPosts.FieldByName('Должность').AsString;
Excel.Cells[28,2] := dstEmpPosts.FieldByName('ХарактерРаботы').AsString;
Excel.Cells[31,5] := dstStaff.FieldByName('Ставка').AsFloat * dstStaff.FieldByName('Оклад').AsFloat;
Excel.Cells[32,5] := dstEmpPosts.FieldByName('Надбавка').AsString;
Excel.Cells[36,5] := dstEmpPosts.FieldByName('Основание').AsString;
Excel.Cells[37,5] := dstEmpPosts.FieldByName('ДоговорДата').AsString;
Excel.Cells[37,8] := dstEmpPosts.FieldByName('ДоговорN').AsString;
dstRequisite.Close;
dstDepartments.Close;
//Набор данных закрываем только если нет других открытых форм, связанных с данным набором:
if not fmEmpCard.Showing then
dstEmpPosts.Close;
end; //with
Excel.Visible := True;
except
Excel.Quit;
end;
end;
//Формирование приказа об увольнении:
procedureRep_Release;
var
Excel: Variant;
WorkbookName: string;
begin
//ШаблонхранитсявпапкеШаблоны:
WorkbookName := GetCurrentDir + '\Шаблоны\' + 'Приказобувольнении.xlt';
Excel := CreateOleObject('Excel.Application');
try
Excel.Workbooks.Open(WorkbookName);
//Экспорт данных из таблиц БД:
with DM do
begin
dstRequisite.Open;
dstEmpPosts.Open;
dstDepartments.Open;
//Выводреквизитов:
Excel.Cells[9,2] := dstRequisite.FieldByName('НаименованиеОрг').AsString;
Excel.Cells[40,5] := dstRequisite.FieldByName('РукДолжн').AsString;
Excel.Cells[40,11] := dstRequisite.FieldByName('РукФИО').AsString;
Excel.Cells[15,10] := Date;
Excel.Cells[42,11] := GetRightDate(Date);
Excel.Cells[15,9] := dstEmployee.FieldByName('ТабN').AsString + '2';
Excel.Cells[18,6] := dstEmpPosts.FieldByName('ДоговорДата').AsString;
Excel.Cells[18,8] := dstEmpPosts.FieldByName('ДоговорN').AsString;
Excel.Cells[10,12] := dstEmpPosts.FieldByName('ДоговорN').AsString;
Excel.Cells[11,12] := dstEmpPosts.FieldByName('ДоговорДата').AsString;
Excel.Cells[19,6] := dstEmpPosts.FieldByName('ПринятПо').AsString;
Excel.Cells[21,2] := dstEmployee.FieldByName('Фамилия').AsString + ' ' +
dstEmployee.FieldByName('Имя').AsString + ' ' +
dstEmployee.FieldByName('Отчество').AsString;
Excel.Cells[21,12] := FormatFloat('0000', dstEmployee.FieldByName('ТабN').AsInteger);
if dstDepartments.Locate('ID', dstEmpPosts.FieldByName('ОтделID').AsInteger, []) then
Excel.Cells[23,2] := dstDepartments.FieldByName('Отдел').AsString;
Excel.Cells[25,2] := dstEmpPosts.FieldByName('Должность').AsString;
dstRequisite.Close;
dstDepartments.Close;
//Набор данных закрываем только если нет других открытых форм, связанных с данным набором:
if not fmEmpCard.Showing then
dstEmpPosts.Close;
end; //with
Excel.Visible := True;
except
Excel.Quit;
end;
end;
//Формирование штатного расписания:
procedureRep_Staff;
var
Excel: Variant;
WorkbookName: string;
i, PosInc, Count: Integer;
Pay1, Pay2: Currency;
begin
//Шаблон хранится в папке Шаблоны:
WorkbookName := GetCurrentDir + '\Шаблоны\Штатное расписание.xlt';
Excel := CreateOleObject('Excel.Application');
try
Excel.Workbooks.Open(WorkbookName);
Excel.Cells[12,12] := 1;
Excel.Cells[12,13] := Date;
Excel.Cells[12,4] := Date;
Excel.Cells[12,7] := IncYear(Date);
//Экспорт данных из таблицы БД:
with DM do
begin
dstDepartments.Open;
//Формирование таблицы:
i := 0;
PosInc := 20;
Count := 0;
Pay1 := 0;
Pay2 := 0;
dstDepartments.First;
//Циклпоотделам:
while not dstDepartments.Eof do
begin
DM.dstStaff.Filter := 'ОтделID = ' + dstDepartments.FieldByName('ID').AsString;
//Цикл по должностям в отделе:
dstStaff.First;
while not dstStaff.Eof do
begin
//Добавление новой строки:
ifi<> 0 then
begin
Excel.Rows.Item[PosInc+i].Select;
Excel.Selection.Insert;
Excel.Rows.Item[PosInc].Select;
Excel.Selection.Copy;
Excel.Rows.Item[PosInc+i].Select;
Excel.ActiveSheet.Paste;
Excel.Application.CutCopyMode := False;
end;
Excel.Cells[i+PosInc,2] := dstDepartments.FieldByName('Отдел').AsString;
Excel.Cells[i+PosInc,5] := dstStaff.FieldByName('Должность').AsString;
Excel.Cells[i+PosInc,8] := dstStaff.FieldByName('ШтатныхЕд').AsInteger;
Excel.Cells[i+PosInc,9] :=
dstStaff.FieldByName('Ставка').AsFloat * dstStaff.FieldByName('Оклад').AsFloat;
Excel.Cells[i+PosInc,12] := dstStaff.FieldByName('Надбавка').AsFloat;
Excel.Cells[i+PosInc,16] := dstStaff.FieldByName('Надбавка').AsFloat +
dstStaff.FieldByName('Ставка').AsFloat * dstStaff.FieldByName('Оклад').AsFloat;
Inc(Count, dstStaff.FieldByName('ШтатныхЕд').AsInteger);
Pay1 := Pay1 + dstStaff.FieldByName('Ставка').AsFloat * dstStaff.FieldByName('Оклад').AsCurrency;
Pay2 := Pay2 + dstStaff.FieldByName('Надбавка').AsInteger;
dstStaff.Next;
Inc(i);
end;
dstDepartments.Next;
end;
//Выводреквизитов:
dstRequisite.Open;
Excel.Cells[9,2] := dstRequisite.FieldByName('НаименованиеОрг').AsString;
Excel.Cells[i+27,15] := dstRequisite.FieldByName('ГлБухФИО').AsString;
dstRequisite.Close;
dstDepartments.Close;
end; //with
Excel.Cells[i+20,8] := Count; //Кол-вочеловеквштате
Excel.Cells[i+20,9] := Pay1;
Excel.Cells[i+20,12] := Pay2;
Excel.Cells[i+20,16] := Pay1 + Pay2;
Excel.Cells[13,16] := Count; //Кол-во человек в штате
Excel.Visible := True;
except
Excel.Quit;
end;
end;
procedure Rep_Card;
var
Excel: Variant;
WorkbookName: string;
i: Integer;
PlaceOfBirth: string;
begin
//ШаблонхранитсявпапкеШаблоны:
WorkbookName := GetCurrentDir + '\Шаблоны\' + 'Личнаякарточка.xlt';
Excel := CreateOleObject('Excel.Application');
try
Excel.Workbooks.Open(WorkbookName);
//Экспорт данных из таблиц БД:
with DM do
begin
dstRequisite.Open;
dstEmpPosts.Open;
dstDepartments.Open;
//Лист 1------------------------------------------------------------------
Excel.Worksheets[1].Activate;
//Выводреквизитов:
Excel.Cells[9,2] := dstRequisite.FieldByName('НаименованиеОрг').AsString;
Excel.Cells[13,2] := Date;
Excel.Cells[13,3] := FormatFloat('0000', dstEmployee.FieldByName('ТабN').AsInteger);
Excel.Cells[13,4] := dstEmployee.FieldByName('ИНН').AsString;
Excel.Cells[13,5] := dstEmployee.FieldByName('ПенсСвид').AsString;
Excel.Cells[13,7] := dstEmpPosts.FieldByName('ХарактерРаботы').AsString;
Excel.Cells[13,9] := dstEmployee.FieldByName('Пол').AsString;
Excel.Cells[18,8] := dstEmpPosts.FieldByName('ДоговорN').AsString;
Excel.Cells[19,8] := dstEmpPosts.FieldByName('ДоговорДата').AsString;
Excel.Cells[20,3] := dstEmployee.FieldByName('Фамилия').AsString;
Excel.Cells[20,6] := dstEmployee.FieldByName('Имя').AsString;
Excel.Cells[20,9] := dstEmployee.FieldByName('Отчество').AsString;
Excel.Cells[21,4] := dstEmployee.FieldByName('ДатаРождения').AsString;
//Формирование строки места рождения:
PlaceOfBirth := '';
if (not dstEmployee.FieldByName('РождСтрана').IsNull) and
(dstEmployee.FieldByName('РождСтрана').AsString <> 'Россия') then
PlaceOfBirth := dstEmployee.FieldByName('РождСтрана').AsString;
if (not dstEmployee.FieldByName('РождОбласть').IsNull) and
(dstEmployee.FieldByName('РождОбласть').AsString <> '') then
begin
if PlaceOfBirth <> '' then
PlaceOfBirth := PlaceOfBirth + ', ';
PlaceOfBirth := PlaceOfBirth + dstEmployee.FieldByName('РождОбласть').AsString;
end;
if (not dstEmployee.FieldByName('РождРайон').IsNull) and
(dstEmployee.FieldByName('РождРайон').AsString <> '') then
begin
if PlaceOfBirth <> '' then
PlaceOfBirth := PlaceOfBirth + ', ';
PlaceOfBirth := PlaceOfBirth + dstEmployee.FieldByName('РождРайон').AsString;
end;
if (not dstEmployee.FieldByName('РождГород').IsNull) and
(dstEmployee.FieldByName('РождГород').AsString <> '') then
begin
if PlaceOfBirth <> '' then
PlaceOfBirth := PlaceOfBirth + ', ';
PlaceOfBirth := PlaceOfBirth + dstEmployee.FieldByName('РождГород').AsString;
end;
Excel.Cells[23,4] := PlaceOfBirth;
Excel.Cells[29,4] := dstEmployee.FieldByName('Образование').AsString;
//Лист 2------------------------------------------------------------------
Excel.Worksheets[2].Activate;
Excel.Cells[4,5] := Date;
Excel.Cells[10,5] := dstEmployee.FieldByName('СемПоложение').AsString;
//Списокродственников:
dstFamily.Open;
dstFamily.First;
i := 15;
while not dstFamily.Eof do
begin
Excel.Cells[i,2] := dstFamily.FieldByName('Родство').AsString;
Excel.Cells[i,5] := dstFamily.FieldByName('ФИО').AsString;
Excel.Cells[i,9] := YearOf(dstFamily.FieldByName('ДатаРождения').AsDateTime);
Inc(i);
dstFamily.Next;
end;
dstFamily.Close;
Excel.Cells[20,4] := dstEmployee.FieldByName('ДокументСерия').AsString
+ ' ' + dstEmployee.FieldByName('ДокументНомер').AsString;
Excel.Cells[20,9] := dstEmployee.FieldByName('ДокументДата').AsString;
Excel.Cells[21,3] := dstEmployee.FieldByName('ДокументВыдан').AsString;
Excel.Cells[33,4] := dstEmployee.FieldByName('Телефон').AsString;
//Лист 3------------------------------------------------------------------
Excel.Worksheets[3].Activate;
//Список занимаемых должностей:
dstEmpPosts.First;
i := 9;
while not dstEmpPosts.Eof do
begin
Excel.Cells[i,2] := dstEmpPosts.FieldByName('ПринятС').AsString;
Excel.Cells[i,3] := dstEmpPosts.FieldByName('Отдел').AsString;
Excel.Cells[i,5] := dstEmpPosts.FieldByName('Должность').AsString;
Excel.Cells[i,7] := dstEmpPosts.FieldByName('Надбавка').AsFloat +
dstEmpPosts.FieldByName('Ставка').AsFloat * dstEmpPosts.FieldByName('Оклад').AsFloat;
Excel.Cells[i,9] := dstEmpPosts.FieldByName('Основание').AsString;
Inc(i);
dstEmpPosts.Next;
end;
//Лист 4------------------------------------------------------------------
Excel.Worksheets[4].Activate;
//Списокотпусков:
dstVacation.Open;
dstVacation.First;
i := 21;
while not dstVacation.Eof do
begin
Excel.Cells[i,2] := dstVacation.FieldByName('ВидОтпуска').AsString;
Excel.Cells[i,4] := dstVacation.FieldByName('ПериодС').AsString;
Excel.Cells[i,6] := dstVacation.FieldByName('ПериодПо').AsString;
Excel.Cells[i,7] := dstVacation.FieldByName('Дней').AsString;
Excel.Cells[i,8] := dstVacation.FieldByName('ДатаС').AsString;
Excel.Cells[i,9] := dstVacation.FieldByName('ДатаПо').AsString;
Excel.Cells[i,10] := dstVacation.FieldByName('Основание').AsString;
Inc(i);
dstVacation.Next;
end;
dstVacation.Close;
dstRequisite.Close;
//Набор данных закрываем только если нет других открытых форм, связанных с данным набором:
if not fmEmpCard.Showing then
dstEmpPosts.Close;
end; //with
Excel.Visible := True;
except
Excel.Quit;
end;
end;
//Формирование приказа о предоставлении отпуска:
procedure Rep_Vacation;
var
Excel: Variant;
WorkbookName: string;
begin
//ШаблонхранитсявпапкеШаблоны:
WorkbookName := GetCurrentDir + '\Шаблоны\' + 'Приказоботпуске.xlt';
Excel := CreateOleObject('Excel.Application');
try
Excel.Workbooks.Open(WorkbookName);
//Экспорт данных из таблицы БД:
with DM do
begin
dstRequisite.Open;
dstEmpPosts.Open;
dstDepartments.Open;
//Выводреквизитов:
Excel.Cells[10,2] := dstRequisite.FieldByName('НаименованиеОрг').AsString;
Excel.Cells[46,11] := dstRequisite.FieldByName('РукДолжн').AsString;
Excel.Cells[46,25] := dstRequisite.FieldByName('РукФИО').AsString;
Excel.Cells[16,25] := Date;
Excel.Cells[50,22] := GetRightDate(Date);
Excel.Cells[16,21] := dstEmployee.FieldByName('ТабN').AsString + '3';
Excel.Cells[21,2] := dstEmployee.FieldByName('Фамилия').AsString + ' ' +
dstEmployee.FieldByName('Имя').AsString + ' ' +
dstEmployee.FieldByName('Отчество').AsString;
Excel.Cells[21,28] := FormatFloat('0000', dstEmployee.FieldByName('ТабN').AsInteger);
if dstDepartments.Locate('ID', dstEmpPosts.FieldByName('ОтделID').AsInteger, []) then
Excel.Cells[23,2] := dstDepartments.FieldByName('Отдел').AsString;
Excel.Cells[25,2] := dstEmpPosts.FieldByName('Должность').AsString;
Excel.Cells[29,8] := GetRightDate(dstVacation.FieldByName('ПериодС').AsDateTime) +
' по ' + GetRightDate(dstVacation.FieldByName('ПериодПо').AsDateTime);
if dstVacation.FieldByName('ВидОтпуска').AsString = 'Ежегодныйотпуск' then
begin
Excel.Cells[31,18] := dstVacation.FieldByName('Дней').AsString;
Excel.Cells[32,3] := GetRightDate(dstVacation.FieldByName('ДатаС').AsDateTime) +
' по ' + GetRightDate(dstVacation.FieldByName('ДатаПо').AsDateTime);
end
else
begin
Excel.Cells[35,2] := dstVacation.FieldByName('ВидОтпуска').AsString;
Excel.Cells[37,3] := dstVacation.FieldByName('Дней').AsString;
Excel.Cells[38,3] := GetRightDate(dstVacation.FieldByName('ДатаС').AsDateTime) +
' по ' + GetRightDate(dstVacation.FieldByName('ДатаПо').AsDateTime);
end;
Excel.Cells[40,9] := dstVacation.FieldByName('Дней').AsString;
Excel.Cells[41,3] := GetRightDate(dstVacation.FieldByName('ДатаС').AsDateTime) +
' по ' + GetRightDate(dstVacation.FieldByName('ДатаПо').AsDateTime);
dstRequisite.Close;
dstDepartments.Close;
//Набор данных закрываем только если нет других открытых форм, связанных с данным набором:
if not fmEmpCard.Showing then
dstEmpPosts.Close;
end; //with
Excel.Visible := True;
except
Excel.Quit;
end;
end;
//Формирование трудового договора:
procedureRep_Contract;
var
Excel: Variant;
WorkbookName: string;
begin
//ШаблонхранитсявпапкеШаблоны:
WorkbookName := GetCurrentDir + '\Шаблоны\' + 'Трудовойдоговор.xlt';
Excel := CreateOleObject('Excel.Application');
try
Excel.Workbooks.Open(WorkbookName);
//Экспорт данных из таблицы БД:
with DM do
begin
dstRequisite.Open;
dstEmpPosts.Open;
dstDepartments.Open;
//Лист 1------------------------------------------------------------------
Excel.Worksheets[1].Activate;
//Выводреквизитов:
Excel.Cells[9,2] := dstRequisite.FieldByName('НаименованиеОрг').AsString;
Excel.Cells[15,2] := dstRequisite.FieldByName('НаименованиеОрг').AsString;
Excel.Cells[17,3] := dstRequisite.FieldByName('РукДолжн').AsString;
Excel.Cells[17,8] := dstRequisite.FieldByName('РукФИО').AsString;
Excel.Cells[13,8] := dstEmployee.FieldByName('ТабN').AsString + '4';
Excel.Cells[13,9] := Date;
Excel.Cells[20,2] := dstEmployee.FieldByName('Фамилия').AsString + ' ' +
dstEmployee.FieldByName('Имя').AsString + ' ' +
dstEmployee.FieldByName('Отчество').AsString;
if dstDepartments.Locate('ID', dstEmpPosts.FieldByName('ОтделID').AsInteger, []) then
Excel.Cells[31,3] := dstDepartments.FieldByName('Отдел').AsString;
Excel.Cells[26,5] := dstEmpPosts.FieldByName('Должность').AsString;
Excel.Cells[46,7] := dstEmpPosts.FieldByName('ПринятС').AsString;
Excel.Cells[47,7] := dstEmpPosts.FieldByName('ПринятПо').AsString;
//Лист 3------------------------------------------------------------------
Excel.Worksheets[3].Activate;
Excel.Cells[46,2] := 'Оклад';
Excel.Cells[46,9] := dstStaff.FieldByName('Ставка').AsFloat * dstStaff.FieldByName('Оклад').AsCurrency;
Excel.Cells[47,2] := 'Надбавка';
Excel.Cells[47,9] := dstEmpPosts.FieldByName('Надбавка').AsString;
Excel.Cells[54,9] := dstEmpPosts.FieldByName('Надбавка').AsCurrency +
dstStaff.FieldByName('Ставка').AsFloat * dstStaff.FieldByName('Оклад').AsCurrency;
//Лист 4------------------------------------------------------------------
Excel.Worksheets[4].Activate;
//Выводреквизитов:
Excel.Cells[37,2] := dstRequisite.FieldByName('ЮрАдрес').AsString;
Excel.Cells[48,2] := dstRequisite.FieldByName('РукДолжн').AsString;
Excel.Cells[51,2] := dstRequisite.FieldByName('РукФИО').AsString;
//Выводреквизитов: