Файл: Проектирование реализации операций бизнес-процесса.pdf
Добавлен: 15.06.2023
Просмотров: 289
Скачиваний: 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. Описание программных модулей
end;
procedure TfmMain.acDocEmpListExecute(Sender: TObject);
begin
Rep_EmpList;
TreeView1Change(Self, TreeView1.Selected);
end;
procedure TfmMain.acEmpVacancyListExecute(Sender: TObject);
begin
fmVacancyList.Show;
end;
end.
unit uDepartments;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBCtrls, Grids, DBGrids, ExtCtrls, StdCtrls, Buttons;
type
TfmDepartments = class(TForm)
Panel1: TPanel;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
bbtPrint: TBitBtn;
BitBtn1: TBitBtn;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure bbtPrintClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmDepartments: TfmDepartments;
implementation
uses uDM, uRep;
{$R *.dfm}
procedure TfmDepartments.FormShow(Sender: TObject);
begin
DM.dstDepartments.Open;
DM.dstDepartments.Sort := 'Отдел';
end;
procedure TfmDepartments.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DM.dstDepartments.Close;
end;
procedure TfmDepartments.bbtPrintClick(Sender: TObject);
begin
Rep_Universal(DBGrid1, 1, 'Отделы');
end;
end.
unit uDM;
interface
uses
SysUtils, Classes, DB, ADODB;
type
TDM = class(TDataModule)
ADOConnection1: TADOConnection;
dstDepartments: TADODataSet;
dsDepartments: TDataSource;
dstPosts: TADODataSet;
dsPosts: TDataSource;
dstVacationTypes: TADODataSet;
dsVacationTypes: TDataSource;
dstFamilyStatus: TADODataSet;
dsFamilyStatus: TDataSource;
dstEducation: TADODataSet;
dsEducation: TDataSource;
dstDocTypes: TADODataSet;
dsDocTypes: TDataSource;
dstJobTypes: TADODataSet;
dsJobTypes: TDataSource;
dstRequisite: TADODataSet;
dsRequisite: TDataSource;
dstRequisiteDSDesigner: TWideStringField;
dstRequisiteDSDesigner2: TWideStringField;
dstRequisiteDSDesigner3: TWideStringField;
dstRequisiteDSDesigner4: TWideStringField;
dstRequisiteDSDesigner5: TWideStringField;
dstRequisiteDSDesigner6: TWideStringField;
dstRequisiteDSDesigner7: TWideStringField;
dstRequisiteDSDesigner8: TWideStringField;
dstRequisiteDSDesigner9: TWideStringField;
dstRequisiteDSDesigner10: TWideStringField;
dstStaff: TADODataSet;
dsStaff: TDataSource;
dstStaffID: TAutoIncField;
dstStaffID2: TIntegerField;
dstStaffID3: TIntegerField;
dstStaffDSDesigner: TWordField;
dstStaffDSDesigner2: TFloatField;
dstStaffDSDesigner3: TBCDField;
dstStaffDSDesigner4: TBCDField;
dstStaffField: TStringField;
dstStaffField2: TStringField;
dstEmployee: TADODataSet;
dsEmployee: TDataSource;
dstEmployeeN: TAutoIncField;
dstEmployeeDSDesigner: TWideStringField;
dstEmployeeDSDesigner2: TWideStringField;
dstEmployeeDSDesigner3: TWideStringField;
dstEmployeeDSDesigner4: TBooleanField;
dstEmployeeDSDesigner5: TDateTimeField;
dstEmployeeDSDesigner6: TWideStringField;
dstEmployeeDSDesigner7: TWideStringField;
dstEmployeeDSDesigner8: TWideStringField;
dstEmployeeDSDesigner9: TWideStringField;
dstEmployeeID: TIntegerField;
dstEmployeeID2: TIntegerField;
dstEmployeeDSDesigner1ID: TIntegerField;
dstEmployeeDSDesigner2ID: TIntegerField;
dstEmployeeID3: TIntegerField;
dstEmployeeDSDesigner10: TWideStringField;
dstEmployeeDSDesigner11: TWideStringField;
dstEmployeeDSDesigner12: TDateTimeField;
dstEmployeeDSDesigner13: TWideStringField;
dstEmployeeDSDesigner14: TWideStringField;
dstEmployeeDSDesigner15: TWideStringField;
dstEmployeeDSDesigner16: TWideStringField;
dstEmployeeDSDesigner17: TWideStringField;
dstEmployeeDSDesigner18: TWideStringField;
dstEmployeeDSDesigner19: TWideStringField;
dstEmployeeDSDesigner20: TWideStringField;
dstEmployeeDSDesigner21: TWideStringField;
dstEmployeeDSDesigner22: TBlobField;
dstEmployeeIntegerField: TStringField;
dstEmployeeIntegerField2: TStringField;
dstEmployeeIntegerField1: TStringField;
dstEmployeeIntegerField22: TStringField;
dstEmployeeIntegerField3: TStringField;
dstFamily: TADODataSet;
dsFamily: TDataSource;
dstFamilyID: TIntegerField;
dstFamilyDSDesigner: TWideStringField;
dstFamilyDSDesigner2: TWideStringField;
dstFamilyDSDesigner3: TDateTimeField;
dstFamilyDSDesigner4: TWideStringField;
dstFamilyDSDesigner5: TWideStringField;
dstEmpPosts: TADODataSet;
dsEmpPosts: TDataSource;
dstEmpPostsID2: TIntegerField;
dstEmpPostsID3: TIntegerField;
dstEmpPostsDSDesigner: TFloatField;
dstEmpPostsDSDesigner2: TBCDField;
dstEmpPostsDSDesigner3: TBCDField;
dstEmpPostsDSDesigner4: TDateTimeField;
dstEmpPostsDSDesigner5: TDateTimeField;
dstEmpPostsID4: TIntegerField;
dstEmpPostsN: TWideStringField;
dstEmpPostsDSDesigner6: TDateTimeField;
dstEmpPostsDSDesigner7: TWideStringField;
dstEmpPostsDSDesigner8: TBooleanField;
dstEmpPostsID5: TIntegerField;
dstEmpPostsID6: TIntegerField;
dstEmpPostsStringField: TStringField;
dstEmpPostsField: TStringField;
dstEmpPostsIntegerField: TStringField;
dstEmployeeByDep: TADODataSet;
AutoIncField1: TAutoIncField;
IntegerField1: TIntegerField;
IntegerField2: TIntegerField;
WideStringField18: TWideStringField;
StringField1: TStringField;
StringField2: TStringField;
dsEmployeeByDep: TDataSource;
dstVacancy: TADODataSet;
dstStaffField3: TIntegerField;
dstVacation: TADODataSet;
dsVacation: TDataSource;
dstVacationID: TIntegerField;
dstVacationDSDesigner: TDateTimeField;
dstVacationDSDesigner2: TDateTimeField;
dstVacationDSDesigner3: TWordField;
dstVacationDSDesigner4: TDateTimeField;
dstVacationDSDesigner5: TDateTimeField;
dstVacationID2: TIntegerField;
dstVacationDSDesigner6: TWideStringField;
dstVacationStringField: TStringField;
dstMission: TADODataSet;
dsMission: TDataSource;
dstMissionID: TIntegerField;
dstMissionDSDesigner: TDateTimeField;
dstMissionDSDesigner2: TWideStringField;
dstMissionDSDesigner3: TDateTimeField;
dstMissionDSDesigner4: TWideStringField;
dstMissionDSDesigner5: TWideStringField;
dstEmpPostsField2: TCurrencyField;
dstEmployeeByDepDSDesigner: TWideStringField;
dstEmployeeByDepDSDesigner2: TWideStringField;
dstVacancyList: TADODataSet;
dsVacancyList: TDataSource;
dstVacancyListDSDesigner: TWideStringField;
dstVacancyListDSDesigner2: TWideStringField;
dstVacancyListDSDesigner3: TWordField;
dstVacancyListDSDesigner4: TFloatField;
dstVacancyListDSDesigner5: TBCDField;
dstVacancyListDSDesigner6: TBCDField;
dstVacancyListDSDesigner7: TIntegerField;
dstVacancyListDSDesigner8: TIntegerField;
procedure DataModuleDestroy(Sender: TObject);
procedure dstEmployeeByDepAfterScroll(DataSet: TDataSet);
procedure dstStaffCalcFields(DataSet: TDataSet);
procedure dstEmpPostsCalcFields(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;
var
DM: TDM;
implementation
{$R *.dfm}
procedure TDM.DataModuleDestroy(Sender: TObject);
begin
ADOConnection1.Close;
end;
//Синхронизация наборов данных для выбранного на главной форме работника:
procedure TDM.dstEmployeeByDepAfterScroll(DataSet: TDataSet);
begin
dstEmployee.Locate('ТабN', dstEmployeeByDep.FieldByName('ТабN').AsInteger, []);
end;
//Расчет кол-ва вакансий для текущей позиции в штатном расписании:
procedure TDM.dstStaffCalcFields(DataSet: TDataSet);
var
Num: Integer;
begin
dstVacancy.Parameters.ParamByName('pStaffID').Value := DataSet.FieldByName('ID').Value;
dstVacancy.Open;
if dstVacancy.FieldByName('Колво').IsNull then
Num := 0
else
Num := dstVacancy.FieldByName('Колво').Value;
DataSet.FieldByName('Вакансий').Value := DataSet.FieldByName('ШтатныхЕд').Value - Num;
dstVacancy.Close;
end;
//Расчет зарплаты работника:
procedure TDM.dstEmpPostsCalcFields(DataSet: TDataSet);
begin
DataSet.FieldByName('Зарплата').AsCurrency := DataSet.FieldByName('Оклад').AsCurrency *
DataSet.FieldByName('Ставка').AsFloat + DataSet.FieldByName('Надбавка').AsCurrency;
end;
end.
unit uEmpCard;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ExtDlgs, StdCtrls, DBCtrls, Mask, ExtCtrls, Grids,
DBGrids, Buttons;
type
TfmEmpCard = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
DBImage1: TDBImage;
btFoto: TButton;
OpenPictureDialog1: TOpenPictureDialog;
Label1: TLabel;
DBEdit1: TDBEdit;
Label2: TLabel;
DBEdit2: TDBEdit;
Label3: TLabel;
DBEdit3: TDBEdit;
Label4: TLabel;
DBEdit4: TDBEdit;
Label5: TLabel;
DBEdit5: TDBEdit;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
GroupBox1: TGroupBox;
DBEdit9: TDBEdit;
Label9: TLabel;
DBEdit8: TDBEdit;
Label8: TLabel;
DBEdit7: TDBEdit;
Label7: TLabel;
DBEdit6: TDBEdit;
Label6: TLabel;
DBLookupComboBox1: TDBLookupComboBox;
DBLookupComboBox2: TDBLookupComboBox;
DBLookupComboBox3: TDBLookupComboBox;
DBLookupComboBox4: TDBLookupComboBox;
Label15: TLabel;
Label16: TLabel;
DBEdit11: TDBEdit;
Label17: TLabel;
DBEdit12: TDBEdit;
Label18: TLabel;
DBEdit13: TDBEdit;
Label19: TLabel;
DBEdit14: TDBEdit;
Label20: TLabel;
DBEdit15: TDBEdit;
Label21: TLabel;
DBEdit16: TDBEdit;
Label22: TLabel;
DBEdit17: TDBEdit;
DBLookupComboBox5: TDBLookupComboBox;
GroupBox2: TGroupBox;
Label23: TLabel;
DBEdit18: TDBEdit;
Label24: TLabel;
DBEdit19: TDBEdit;
GroupBox3: TGroupBox;
Label28: TLabel;
Label29: TLabel;
DBEdit10: TDBEdit;
DBEdit23: TDBEdit;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
TabSheet4: TTabSheet;
Label25: TLabel;
Label26: TLabel;
DBEdit21: TDBEdit;
Label30: TLabel;
DBEdit24: TDBEdit;
Label31: TLabel;
DBEdit25: TDBEdit;
Label32: TLabel;
DBEdit26: TDBEdit;
Label33: TLabel;
DBEdit27: TDBEdit;
Label34: TLabel;
Label35: TLabel;
DBEdit29: TDBEdit;
Label36: TLabel;
DBEdit30: TDBEdit;
Label37: TLabel;
DBEdit31: TDBEdit;
DBCheckBox1: TDBCheckBox;
DBLookupComboBox6: TDBLookupComboBox;
DBLookupComboBox7: TDBLookupComboBox;
Label27: TLabel;
DBEdit22: TDBEdit;
DBNavigator2: TDBNavigator;
bbtOK: TBitBtn;
bbtCancel: TBitBtn;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
Label38: TLabel;
Label39: TLabel;
Label40: TLabel;
DBEdit20: TDBEdit;
Label41: TLabel;
BitBtn5: TBitBtn;
procedure btFotoClick(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure DBLookupComboBox6Click(Sender: TObject);
procedure bbtCancelClick(Sender: TObject);
procedure bbtOKClick(Sender: TObject);
procedure PageControl1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmEmpCard: TfmEmpCard;
implementation
uses uDM, DB, uMain;
{$R *.dfm}
procedure TfmEmpCard.btFotoClick(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;
procedure TfmEmpCard.RadioButton1Click(Sender: TObject);
begin
if not (DM.dstEmployee.State in [dsEdit, dsInsert]) then
DM.dstEmployee.Edit;
DM.dstEmployee.FieldByName('Пол').Value := RadioButton1.Checked
end;
procedure TfmEmpCard.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if DM.dstEmployee.State = dsInsert then
DM.dstEmployee.Cancel;
if DM.dstEmpPosts.RecordCount = 0 then
begin
Application.MessageBox('Не указана должность работника!',
'Ошибка сохранения', MB_OK + MB_ICONERROR);
Abort;
end
else
begin
DM.dstFamily.Close;
DM.dstEmpPosts.Close;
DM.dstStaff.Close;
DM.dstJobTypes.Close;
end;
end;
procedure TfmEmpCard.FormShow(Sender: TObject);
begin
DM.dstFamily.Open;
DM.dstEmpPosts.Open;
DM.dstStaff.Open;
DM.dstJobTypes.Open;
//Определениеполаработника:
if DM.dstEmployee.FieldByName('Пол').Value <> Null then
begin
RadioButton1.Checked := DM.dstEmployee.FieldByName('Пол').Value;
RadioButton2.Checked := not DM.dstEmployee.FieldByName('Пол').Value;
end
else
RadioButton1.Checked := False;
end;
//При выборе штатной должности автоматически подставляются данные по зарплате:
procedure TfmEmpCard.DBLookupComboBox6Click(Sender: TObject);
begin
DM.dstEmpPosts.FieldByName('Ставка').Value := DM.dstStaff.FieldByName('Ставка').Value;
DM.dstEmpPosts.FieldByName('Оклад').Value := DM.dstStaff.FieldByName('Оклад').Value;
DM.dstEmpPosts.FieldByName('Надбавка').Value := DM.dstStaff.FieldByName('Надбавка').Value;
end;
procedure TfmEmpCard.bbtCancelClick(Sender: TObject);
begin
if DM.dstEmployee.State = dsInsert then
DM.dstEmployee.Cancel
else
Application.MessageBox('Отменаневозможна! Данные были сохранены ранее.',
'Информация', MB_OK + MB_ICONINFORMATION);
Close;
end;
//Сохранениезаписи:
procedure TfmEmpCard.bbtOKClick(Sender: TObject);
begin
if DM.dstEmpPosts.RecordCount = 0 then
Application.MessageBox('Не указана должность работника!',
'Ошибка сохранения', MB_OK + MB_ICONERROR)
else
begin
try
if DM.dstEmployee.State in [dsEdit, dsInsert] then
DM.dstEmployee.Post;
except
Application.MessageBox('Незаданывсенеобходимыеданные!',
'Ошибкасохранения', MB_OK + MB_ICONERROR);
end;
Close;
end;
end;
//Перед вводом данных о семье и должности, запись о работнике сохраняется:
procedure TfmEmpCard.PageControl1Change(Sender: TObject);
begin
if PageControl1.ActivePageIndex in [2,3] then
try
if DM.dstEmployee.State in [dsEdit, dsInsert] then
DM.dstEmployee.Post;
except
Application.MessageBox('Незаданывсенеобходимыеданные!',
'Ошибкасохранения', MB_OK + MB_ICONERROR);
end;
end;
end.
unit uFamily;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBCtrls, Grids, DBGrids, ExtCtrls, StdCtrls, Buttons;
type
TfmFamily = class(TForm)
Panel1: TPanel;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
BitBtn1: TBitBtn;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmFamily: TfmFamily;
implementation
uses uDM, uRep;
{$R *.dfm}
procedure TfmFamily.FormShow(Sender: TObject);
begin
DM.dstDepartments.Open;
end;
procedure TfmFamily.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DM.dstDepartments.Close;
end;
end.
unit uMission;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBCtrls, Grids, DBGrids, ExtCtrls, StdCtrls, Buttons;
type
TfmMission = class(TForm)
Panel1: TPanel;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
bbtPrint: TBitBtn;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure bbtPrintClick(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmMission: TfmMission;
implementation
uses uDM, uRep;
{$R *.dfm}
procedure TfmMission.FormShow(Sender: TObject);
begin
DM.dstMission.Open;
end;
procedure TfmMission.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DM.dstMission.Close;
end;
procedure TfmMission.bbtPrintClick(Sender: TObject);
begin
Rep_Universal(DBGrid1, 5, fmMission.Caption);
end;
procedure TfmMission.BitBtn2Click(Sender: TObject);
begin
Rep_Mission;
end;
end.
unit uPosts;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBCtrls, Grids, DBGrids, ExtCtrls, StdCtrls, Buttons;
type
TfmPosts = class(TForm)
Panel1: TPanel;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
bbtPrint: TBitBtn;
BitBtn1: TBitBtn;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure bbtPrintClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmPosts: TfmPosts;
implementation
uses uDM, uRep, uEmpCard, uStaff;
{$R *.dfm}
procedure TfmPosts.FormShow(Sender: TObject);
begin
DM.dstPosts.Open;
DM.dstPosts.Sort := 'Должность';
end;
procedure TfmPosts.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if not (fmStaff.Showing or fmEmpCard.Showing) then
DM.dstPosts.Close;
end;
procedure TfmPosts.bbtPrintClick(Sender: TObject);
begin
Rep_Universal(DBGrid1, 1, 'Справочникпрофессий');
end;
end.
unituRep;
//Модуль для формирования отчетов и документов
interface
uses
Windows, SysUtils, Classes, ComObj, DB, Controls, Forms, ADODB, Math, DBGrids;
procedure Rep_Universal(ADBGrid: TDBGrid; NumCol: Integer; ACaption: string);
procedure Rep_Receive;
procedure Rep_Release;
procedure Rep_Staff;
procedure Rep_Card;
procedure Rep_Vacation;
procedure Rep_Contract;
procedure Rep_Mission;
procedure Rep_Insurance;
procedure Rep_DocumentsPFR;
procedure Rep_EmpList;
function GetRightDate(ADate: TDateTime): string;
implementation
uses
uDM, DateUtils, Dialogs, uEmpCard;
//Функция возвращает дату формата "xx месяца xxxx г."
function GetRightDate(ADate: TDateTime): string;
var
Month: string;
begin
case MonthOf(ADate) of
1: Month := 'января';
2: Month := 'февраля';
3: Month := 'марта';
4: Month := 'апреля';
5: Month := 'мая';
6: Month := 'июня';
7: Month := 'июля';
8: Month := 'августа';
9: Month := 'сентября';
10: Month := 'октября';
11: Month := 'ноября';
12: Month := 'декабря';
end;
Result := FormatDateTime('dd ' + Month + ' yyyy г.', ADate);
end;
//Формирование отчета по выбранному набору данных (вывод заголовков видимых
//полейиихзначений):
procedure Rep_Universal(ADBGrid: TDBGrid; NumCol: Integer; ACaption: string);
var
Excel: Variant;
i, j, Width: Integer;
begin
Excel := CreateOleObject('Excel.Application');
Screen.Cursor := crHourGlass;
try
try
Excel.Application.EnableEvents := False;
Excel.Workbooks.Add;
for i:=0 to NumCol-1 do
begin
//Вывод в шапку таблицы названий полей из DBGrid'а:
Excel.Cells[5,i+1] := ADBGrid.Columns[i].Title.Caption;