Файл: Проектирование реализации операций бизнес-процесса «Складской учет» («Электротовары»).pdf
Добавлен: 01.04.2023
Просмотров: 70
Скачиваний: 2
СОДЕРЖАНИЕ
1. ТЕХНИКО-ЭКОНОМИЧЕСКАЯ ХАРАКТЕРИСТИКА ПРЕДМЕТНОЙ ОБЛАСТИ И ПРЕДПРИЯТИЯ
1.1. Характеристика предприятия и его деятельности
1.2. Организационная структура управления предприятием
1.3. Выбор комплекса задач автоматизации и характеристика существующих бизнес процессов
2. ИНФОРМАЦИОННОЕ ОБЕСПЕЧЕНИЕ ЗАДАЧИ
2.1. Информационная модель и её описание
2.2. Используемые классификаторы и системы кодирования
2.3. Характеристика нормативно-справочной, входной и оперативной информации
2.4. Характеристика результатной информации
3. ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ЗАДАЧИ
3.1. Общие положения (дерево функций и сценарий диалога)
3.2. Характеристика базы данных
3.3. Структурная схема пакета (дерево вызова программных модулей)
3.4. Описание программных модулей
4. КОНТРОЛЬНЫЙ ПРИМЕР РЕАЛИЗАЦИИ И ЕГО ОПИСАНИЕ
ПРИЛОЖЕНИЕ
Исходный код программы
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, DB, ADODB, XPMan, ComObj;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
ADOConnection1: TADOConnection;
Auto: TADOTable;
driver: TADOTable;
gsm: TADOTable;
gsmauto: TADOTable;
marka: TADOTable;
postupgsm: TADOTable;
trip: TADOTable;
vidachagsm: TADOTable;
Autoid: TAutoIncField;
Autogosnomer: TWideStringField;
Autocolor: TWideStringField;
Autodriverid: TIntegerField;
Automarkaid: TIntegerField;
AutomarkaL: TStringField;
AutodriverL: TStringField;
gsmid: TAutoIncField;
gsmcaption: TWideStringField;
gsmostatok: TIntegerField;
driverid: TAutoIncField;
driverfio: TWideStringField;
driverphone: TWideStringField;
markaid: TAutoIncField;
markacaption: TWideStringField;
markamotor: TFloatField;
XPManifest1: TXPManifest;
N11: TMenuItem;
N12: TMenuItem;
ADOQuery1: TADOQuery;
gsmautoid: TAutoIncField;
gsmautonorma: TFloatField;
gsmautoautoid: TIntegerField;
gsmautogsmid: TIntegerField;
gsmautoautoL: TStringField;
gsmautogsmL: TStringField;
N13: TMenuItem;
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N12Click(Sender: TObject);
procedure CreateSpravForm(const childName, id: string;
table: TDataset);
procedure CreateListForm(mode: string);
procedure CreateOtchetForm(const childName: String; p: integer);
procedure Othet(const Data: TADOQUERY; Otchetname: string);
procedure N13Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
Uses Sprav, List, ListTrip, Otchet;
{$R *.dfm}
//создание формы для работы со справочником
procedure TForm1.CreateSpravForm(const childName, id : string; table: TDataset);
var
Child: TForm3;
i,k :integer;
f : boolean;
begin
f:=False; //влаг-ложь
k:=0;
for i:=0 to Form1.MDIChildCount-1 do
begin //проверяем создан ли экземнляр такого окна
if (Form1.MDIChildren[i] is TForm3) then
begin
f:=True;
k:=i;
end;
end;
if (f) then Form1.MDIChildren[k].close; //переносим его вперед
Child := TForm3.Create(Application);
Child.Caption := childName; //задаем название
Child.DBGrid1.DataSource.DataSet:=table; //задаем таблицу справочник, с которой будем работать
table.active:=true; //делаем таблицу активной
Child.Setgridcolumnwidths; //выравниваем ширину столбцов
Child.Label1.Caption:=id; //передаем ид
end;
//создание формы со списком поступлений/расходов
procedure TForm1.CreateListForm(mode :string);
var
Child: TForm2;
i,k :integer;
f : boolean;
begin
f:=False; //влаг-ложь
k:=0;
for i:=0 to Form1.MDIChildCount-1 do //проверяем создан ли экземнляр такого окна
if (Form1.MDIChildren[i] is TForm2) then
begin
f:=True;
k:=i;
end;
if (f) then //если создан, то
Form1.MDIChildren[k].close; //закрываем
Child := TForm2.Create(Application);
Child.DBLookupComboBox1.ListSource.DataSet.Open;
if mode='Поступления' then
begin
With Child.ADOQuery1 do
begin
close;
SQL.Clear;
SQL.Add('SELECT postupgsm.id AS Код, postupgsm.postupdate AS [Дата поступления], gsm.caption AS ГСМ, postupgsm.quantity As [Количество]' );
SQL.Add(' FROM gsm INNER JOIN postupgsm ON gsm.id = postupgsm.gsmid WHERE 1=1');
SQL.Add(' ');
SQL.Add(' ');
SQL.Add(' ORDER BY postupdate DESC');
open;
end;
end
else
begin
With Child.ADOQuery1 do
begin
close;
SQL.Clear;
SQL.Add('SELECT vidachagsm.id As Код, vidachagsm.vidachadate AS [Дата выдачи], gsm.caption AS ГСМ, vidachagsm.quantity AS Количество, marka.caption AS Авто, Auto.gosnomer AS Номер ');
SQL.Add('FROM gsm INNER JOIN (marka INNER JOIN (vidachagsm INNER JOIN Auto ON vidachagsm.autoid = Auto.id) ON marka.id = Auto.markaid) ON gsm.id = vidachagsm.gsmid WHERE 1=1 ');
SQL.Add(' ');
SQL.Add(' ');
SQL.Add('ORDER BY vidachagsm.vidachadate DESC');
open;
end;
end;
Child.Caption:=mode;
Child.Setgridcolumnwidths;
end;
//процедура для создания формы для ввода параметров отчета
procedure TForm1.CreateOtchetForm(const childName:String; p: integer); //параметры - название формы и индекс отчета
var
Child: TForm9;
i,k :integer;
f : boolean;
begin
f:=False; //влаг-ложь
k:=0;
for i:=0 to Form1.MDIChildCount-1 do //проверяем создан ли экземнляр такого окна
if (Form1.MDIChildren[i] is TForm9) then
begin
f:=True;
k:=i;
end;
if (f) then //если создан, то
Form1.MDIChildren[k].Close; //переносим его вперед
Child := TForm9.Create(Application);
Child.Caption := childName; //задаем название формы
Child.DateTimePicker1.DateTime:=StrToDateTime(DateToStr(now-30)+ ' 00:00:01'); //устанавливаем дату на 30 дней меньше текущей
Child.DateTimePicker2.datetime:=StrToDateTime(DateToStr(now)+ ' 23:59:59'); //устанавливаем текущую дату
Child.Label3.Caption:=IntTOStr(p); //индекс отчета
end;
procedure TForm1.N3Click(Sender: TObject);
begin
CreateSpravForm('Список контрагентов','',Form1.gsm); //Вызов процедуры для работы со Справочником контрагенты
end;
procedure TForm1.N4Click(Sender: TObject);
begin
CreateSpravForm('Список пользователей','',Form1.driver); //Вызов процедуры для работы со Справочником пользователей
end;
procedure TForm1.N5Click(Sender: TObject);
begin
CreateSpravForm('Список товаров','',Form1.auto); //Вызов процедуры для работы со Справочником товаров
end;
procedure TForm1.N7Click(Sender: TObject);
begin
CreateListForm('Поступления');
end;
procedure TForm1.N8Click(Sender: TObject);
begin
CreateListForm('Выдачи');
end;
procedure TForm1.N9Click(Sender: TObject);
var
Child: TForm4;
i,k :integer;
f : boolean;
begin
f:=False; //влаг-ложь
k:=0;
for i:=0 to Form1.MDIChildCount-1 do //проверяем создан ли экземнляр такого окна
if (Form1.MDIChildren[i] is TForm4) then
begin
f:=True;
k:=i;
end;
if (f) then //если создан, то
Form1.MDIChildren[k].close; //закрываем
Child := TForm4.Create(Application);
Child.DBLookupComboBox1.ListSource.DataSet.Open;
With Child.ADOQuery1 do
begin
close;
SQL.Clear;
SQL.Add('SELECT gsm.caption AS ГСМ, postupgsm.postupdate AS [Дата поступления], postupgsm.quantity As [Количество]' );
SQL.Add(' FROM gsm INNER JOIN postupgsm ON gsm.id = postupgsm.gsmid WHERE 1=1');
SQL.Add(' ');
SQL.Add(' ');
SQL.Add(' ORDER BY postupdate DESC');
open;
end;
Child.Caption:='Поездки';
Child.Setgridcolumnwidths;
end;
Function IndToCol(const ind:integer):String; //функция для перевода номер столбца Excel в его текстовой индекс
begin
case ind of
0: result:='A';
1: result:='B';
2: result:='C';
3: result:='D';
4: result:='E';
5: result:='F';
6: result:='G';
7: result:='H';
8: result:='J';
9: result:='K';
10: result:='L';
11: result:='M';
12: result:='N';
13: result:='O';
14: result:='P';
15: result:='Q';
16: result:='R';
17: result:='S';
18: result:='T';
19: result:='U';
end;
end;
Procedure TForm1.Othet(const Data: TADOQUERY; Otchetname: string); //процедура для выгрузки отчета в Excel на основании запроса к БД
var
Excel:Variant;
i,j,k:integer;
begin
//Обновляем данные
Data.close;
Data.open;
Excel := CreateOleObject('Excel.Application');
//Открываем его для работы
Excel.Workbooks.Add;
//задаем имя отчета
Excel.Range['A1']:=OtchetName;
//Задаем шапку таблицы
For j:=0 to Data.FieldCount-1 do
begin
Excel.Range[IndToCol(j+1)+'2']:=Data.Fields[j].FullName;
end;
//передаем результаты запроса в виде таблицы
if Data.RecordCount<>0 then
begin
k:=1;
For j:=0 to Data.FieldCount-1 do
begin
Data.First;
for i:=1 to Data.RecordCount do
begin
Excel.range['A'+IntTOStr(i+2)]:=IntTOStr(i);
Excel.Range[indToCol(j+1)+IntToStr(i+2) ]:=Data.Fields[j].Value;
Data.Next;
end;
end;
//задаем границы таблицы
Excel.Range['A2:'+indToCol(j)+IntTOStr(i+1)].Borders[5].LineStyle:= 0;
Excel.Range['A2:'+indToCol(j)+IntTOStr(i+1)].Borders[6].LineStyle:= 0;
Excel.Range['A2:'+indToCol(j)+IntTOStr(i+1)].Borders[7].LineStyle:= 1;
Excel.Range['A2:'+indToCol(j)+IntTOStr(i+1)].Borders[8].LineStyle:= 1;
Excel.Range['A2:'+indToCol(j)+IntTOStr(i+1)].Borders[9].LineStyle:= 1;
Excel.Range['A2:'+indToCol(j)+IntTOStr(i+1)].Borders[10].LineStyle:= 1;
Excel.Range['A2:'+indToCol(j)+IntTOStr(i+1)].Borders[11].LineStyle:= 1;
Excel.Range['A2:'+indToCol(j)+IntTOStr(i+1)].Borders[12].LineStyle:= 1;
//строка итого
Excel.Range[indToCol(j-1)+IntTOStr(i+2)]:='ИТОГО';
Excel.Range[indToCol(j)+IntTOStr(i+2)].Value:='=SUM('+indToCol(j)+'3:'+indToCol(j)+IntTOStr(i+1)+')';
if j<2 then j:=2;
//Задаем дату формирования отчета
Excel.Range[indToCol(j-1)+IntTOStr(i+4)].Value:='Отчет сформирован:';
Excel.Range[indToCol(j)+IntTOStr(i+4)].Value:=dateToStr(Now);
Excel.Range['A2:'+indToCol(j)+IntTOStr(i+4)].Columns.AutoFit;
end;
//отображаем отчет
Excel.visible:=true;
end;
procedure TForm1.N11Click(Sender: TObject);
begin
CreateOtchetForm('Задайте интервал',1);
end;
procedure TForm1.N12Click(Sender: TObject);
begin
CreateOtchetForm('Задайте интервал',2);
end;
procedure TForm1.N13Click(Sender: TObject);
begin
CreateSpravForm('Категории','',Form1.gsmauto); end;
end.
unit Sprav;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Grids, DBGrids, ExtCtrls, DB, Menus, ADODB;
type
TForm3 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
DBGrid1: TDBGrid;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
Label1: TLabel;
DataSource1: TDataSource;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
ADOQuery1: TADOQuery;
N2: TMenuItem;
procedure FormClose(Sender: TObject; var Action: TCloseAction);