Диплом: Автоматизация обработки заявок отделом техподдержки «Центральная клиническая больница гражданской авиации»

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
114
DM.dstOrders.Sort := 'КлиентID'
else
DM.dstOrders.Sort := Column.FieldName;
end;
procedure TfmOrderList.chbDate1Click(Sender: TObject);
var
Filter: string;
begin
Filter := '';
if chbDate1.Checked then
begin
if Filter <> '' then
Filter := Filter + ' and ';
Filter := Filter + 'ДатаПриема >= ' + QuotedStr(DateToStr(dtpDate1.Date));
end;
if chbDate2.Checked then
begin
if Filter <> '' then
Filter := Filter + ' and ';
Filter := Filter + 'ДатаПриема <= ' + QuotedStr(DateToStr(dtpDate2.Date));
end;
if chbClient.Checked and (dblcbClient.KeyValue <> Null) then
begin
if Filter <> '' then
Filter := Filter + ' and ';
Filter := Filter + 'КлиентID = ' + IntToStr(dblcbClient.KeyValue);
end;
if chbManager.Checked and (dblcbManager.KeyValue <> Null) then
begin
if Filter <> '' then
Filter := Filter + ' and ';
Filter := Filter + 'МенеджерID = ' + IntToStr(dblcbManager.KeyValue);
end;
if chbStatus.Checked and (dblcbStatus.KeyValue <> Null) then
begin
if Filter <> '' then
Filter := Filter + ' and ';
Filter := Filter + 'СтатусID = ' + IntToStr(dblcbStatus.KeyValue);
end;
if Filter <> '' then
begin
DM.dstOrders.Filter := Filter;
DM.dstOrders.Filtered := True;
end
else
DM.dstOrders.Filtered := False;
end;
procedure TfmOrderList.DBGrid1DblClick(Sender: TObject);
begin
115
fmOrder.Show;
end;
procedure TfmOrderList.FormCreate(Sender: TObject);
begin
dtpDate1.Date := Date;
dtpDate2.Date := Date;
end;
procedure TfmOrderList.BitBtn1Click(Sender: TObject);
begin
Close;
end;
procedure TfmOrderList.bbtNewOrderClick(Sender: TObject);
begin
DM.dstOrders.Insert;
fmOrder.Show;
end;
end.
unit OrderUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, DBCtrls, ExtCtrls, Grids, DBGrids, Mask;
type
TfmOrder = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Splitter2: TSplitter;
DBGrid2: TDBGrid;
Label1: TLabel;
DBEdit1: TDBEdit;
Label2: TLabel;
DBEdit2: TDBEdit;
Label3: TLabel;
DBEdit3: TDBEdit;
Label7: TLabel;
dbedSum: TDBEdit;
Label8: TLabel;
DBLookupComboBox1: TDBLookupComboBox;
Label9: TLabel;
DBLookupComboBox2: TDBLookupComboBox;
Label10: TLabel;
DBLookupComboBox3: TDBLookupComboBox;
DBNavigator1: TDBNavigator;
Panel4: TPanel;
116
DBGrid1: TDBGrid;
GroupBox1: TGroupBox;
RadioButton1: TRadioButton;
RadioButton3: TRadioButton;
RadioButton2: TRadioButton;
RadioButton4: TRadioButton;
RadioButton5: TRadioButton;
bbtGo: TBitBtn;
bbtCalc: TBitBtn;
DBNavigator2: TDBNavigator;
BitBtn1: TBitBtn;
Label4: TLabel;
DBLookupComboBox4: TDBLookupComboBox;
bbtSelectClient: TBitBtn;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure bbtCalcClick(Sender: TObject);
procedure DBGrid2Enter(Sender: TObject);
procedure bbtGoClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure bbtSelectClientClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmOrder: TfmOrder;
implementation
uses DMUnit, ReportsUnit, DB, ClientUnit;
{$R *.dfm}
procedure TfmOrder.FormShow(Sender: TObject);
begin
DM.dstJobs.Open;
DM.dstMat.Open;
DM.tbPrice.Sort := 'Работа';
DM.tbStore.Sort := 'Наименование';
end;
procedure TfmOrder.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DM.dstJobs.Close;
DM.dstMat.Close;
end;
//Пересчет итоговой суммы по заказу с учетом скидки:
procedure TfmOrder.bbtCalcClick(Sender: TObject);
117
var
Sum1, Sum2: Currency;
begin
DM.dstOrderJobSum.Parameters.ParamByName('pOrderNum').Value :=
DM.dstOrders.FieldByName('NЗаказа').Value;
DM.dstOrderMatSum.Parameters.ParamByName('pOrderNum').Value :=
DM.dstOrders.FieldByName('NЗаказа').Value;
DM.dstOrderJobSum.Open; //Запрос суммы работ
DM.dstOrderMatSum.Open; //Запрос суммы материалов
try
if not DM.dstOrderJobSum.FieldByName('Sum1').IsNull then
Sum1 := DM.dstOrderJobSum.FieldByName('Sum1').Value
else
Sum1 := 0;
if not DM.dstOrderMatSum.FieldByName('Sum1').IsNull then
Sum2 := DM.dstOrderMatSum.FieldByName('Sum1').Value
else
Sum2 := 0;
DM.dstOrders.Edit;
DM.dstOrders.FieldByName('Сумма').Value := Sum1 + Sum2;
DM.dstOrders.Post;
finally
DM.dstOrderJobSum.Close;
DM.dstOrderMatSum.Close;
end;
end;
//Подключение Навигатора к источнику данных, с которым в текущий момент
работает
//пользователь:
procedure TfmOrder.DBGrid2Enter(Sender: TObject);
begin
DBNavigator2.DataSource := (Sender As TDBGrid).DataSource;
//Сохранение нового заказа перед добавлением работ или запчастей по нему:
if DM.dstOrders.State = dsInsert then
DM.dstOrders.Post;
end;
//Печать выбранного документа:
procedure TfmOrder.bbtGoClick(Sender: TObject);
begin
if RadioButton1.Checked then
begin
Rep_Order;
end
else if RadioButton2.Checked then
Rep_Bill
else if RadioButton3.Checked then
Rep_Act
else if RadioButton4.Checked then
Rep_Fact
118
else
begin
Rep_Order;
Rep_Act;
Rep_Bill;
Rep_Fact;
end;
end;
procedure TfmOrder.BitBtn1Click(Sender: TObject);
begin
Close;
end;
//При нажатии кнопки "..." на экран выводится справочник клиентов для выбора
и добавления из списка:
procedure TfmOrder.bbtSelectClientClick(Sender: TObject);
begin
fmClients.bbtGo.Visible := True;
if fmClients.ShowModal = mrOK then
begin
if not (DM.dstOrders.State in [dsEdit, dsInsert]) then
DM.dstOrders.Edit;
DM.dstOrders.FieldByName('КлиентID').AsInteger :=
DM.tbClients.FieldByName('ID').AsInteger;
end;
fmClients.bbtGo.Visible := False;
end;
end.
unit PostUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Grids, DBGrids, DBCtrls, StdCtrls, Buttons;
type
TfmPost = class(TForm)
DBGrid1: TDBGrid;
Panel1: TPanel;
DBNavigator1: TDBNavigator;
BitBtn1: TBitBtn;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
119
var
fmPost: TfmPost;
implementation
uses DMUnit;
{$R *.dfm}
procedure TfmPost.FormShow(Sender: TObject);
begin
DM.tbSpec.Open;
end;
procedure TfmPost.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DM.tbSpec.Close;
end;
procedure TfmPost.BitBtn1Click(Sender: TObject);
begin
Close;
end;
end.
unit PriceUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Grids, DBGrids, DBCtrls, StdCtrls, Buttons;
type
TfmPrice = class(TForm)
DBGrid1: TDBGrid;
Panel1: TPanel;
bbtPrint: TBitBtn;
DBNavigator1: TDBNavigator;
BitBtn1: TBitBtn;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure bbtPrintClick(Sender: TObject);
procedure DBGrid1TitleClick(Column: TColumn);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
120
var
fmPrice: TfmPrice;
implementation
uses DMUnit, ReportsUnit, ADODB;
{$R *.dfm}
procedure TfmPrice.FormShow(Sender: TObject);
begin
DM.tbPrice.Open;
DM.tbPrice.Sort := 'Работа';
end;
procedure TfmPrice.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DM.tbPrice.Close;
end;
procedure TfmPrice.bbtPrintClick(Sender: TObject);
begin
Rep_Any(DBGrid1, 5, Self.Caption);
end;
//Сортировка данных в таблице по выбранному столбцу:
procedure TfmPrice.DBGrid1TitleClick(Column: TColumn);
begin
try
(DBGrid1.DataSource.DataSet as TADOTable).Sort := Column.FieldName;
except
Application.MessageBox('Сортировка по данному полю невозможна',
'Информация', MB_OK+MB_ICONINFORMATION)
end;
end;
procedure TfmPrice.BitBtn1Click(Sender: TObject);
begin
Close;
end;
end.
unit ReportsUnit;
//Модуль для формирования отчетов и документов
interface
uses
Windows, SysUtils, Classes, ComObj, DB, Controls, Forms, ADODB, Math,
DBGrids;
procedure Rep_Any(ADBGrid: TDBGrid; NumCol: Integer; ACaption: string);
procedure Rep_JobList(Date1, Date2: TDate);
121
procedure Rep_Order;
procedure Rep_Act;
procedure Rep_Bill;
procedure Rep_Fact;
function GetRightDate(ADate: TDateTime): string;
implementation
uses
DMUnit, DateUtils, Dialogs, SumStringUnit;
//Формирование списка работ по каждому работнику за указанный диапазон дат:
procedure Rep_JobList(Date1, Date2: TDate);
var
WorkbookName: string;
Excel: Variant;
i, j, PosInc: Integer;
Sum, SumItogo: Currency;
begin
//Шаблон хранится в папке Templates:
WorkbookName := GetCurrentDir + '\Templates\' + 'Работы за период.xlt';
Excel := CreateOleObject('Excel.Application');
Screen.Cursor := crHourGlass;
try
try
Excel.Workbooks.Open(WorkbookName);
//Экспорт данных из таблицы БД:
with DM do
begin
i := 0;
SumItogo := 0; //Общая сумма работ
PosInc := 5;
Excel.Cells[1,1] := 'Выполненные объемы работ / услуг в разрезе работников
с ' + DateToStr(Date1) +
' по ' + DateToStr(Date2);
tbStaff.Open;
tbStaff.First;
//Цикл по работникам:
while not tbStaff.Eof do
begin
//Запрос перечня работ, выполненных работником за заданный период:
dstEmpJobList.Parameters.ParamByName('pDate1').Value := Date1;
dstEmpJobList.Parameters.ParamByName('pDate2').Value := Date2;
dstEmpJobList.Parameters.ParamByName('pEmpID').Value :=
tbStaff.FieldByName('ТабN').AsInteger;
dstEmpJobList.Open;
//Если по работнику есть работы, они выводятся в отчет:
if dstEmpJobList.RecordCount > 0 then
begin
//Добавление новой шапки таблицы для работника:
if i <> 0 then
122
begin
Excel.Rows.Item[PosInc+i].Select;
Excel.Selection.Insert;
Excel.Selection.Insert;
Excel.Selection.Insert;
Excel.Selection.Insert;
Excel.Rows.Item[PosInc-2].Select;
Excel.Selection.Copy;
Excel.Rows.Item[PosInc+i].Select;
Excel.ActiveSheet.Paste;
Excel.Rows.Item[PosInc-1].Select;
Excel.Selection.Copy;
Excel.Rows.Item[PosInc+i+1].Select;
Excel.ActiveSheet.Paste;
Excel.Rows.Item[PosInc].Select;
Excel.Selection.Copy;
Excel.Rows.Item[PosInc+i+2].Select;
Excel.ActiveSheet.Paste;
Excel.Rows.Item[PosInc+i-1].Select;
Excel.Selection.Copy;
Excel.Rows.Item[PosInc+i+3].Select;
Excel.ActiveSheet.Paste;
Excel.Application.CutCopyMode := False;
i := i + 2;
end;
Excel.Cells[i+PosInc-2,3] := tbStaff.FieldByName('ФИО').AsString;
j := 0;
Sum := 0; //Сумма работ по работнику
dstEmpJobList.First;
//Цикл по работам работника:
while not dstEmpJobList.Eof do
begin
//Добавление новой строки для работы:
if j <> 0 then
begin
Excel.Rows.Item[PosInc+i+j].Select;
Excel.Selection.Insert;
Excel.Rows.Item[PosInc+i].Select;
Excel.Selection.Copy;
Excel.Rows.Item[PosInc+i+j].Select;
Excel.ActiveSheet.Paste;
Excel.Application.CutCopyMode := False;
end;
Excel.Cells[i+PosInc+j,1] := j+1;
Excel.Cells[i+PosInc+j,2] :=
dstEmpJobList.FieldByName('Работа').AsString;
Excel.Cells[i+PosInc+j,4] := FormatFloat('000',
dstEmpJobList.FieldByName('Шифр').AsInteger);
Excel.Cells[i+PosInc+j,5] := FormatFloat('#,00',
dstEmpJobList.FieldByName('Количество').AsFloat);
Excel.Cells[i+PosInc+j,6] :=
dstEmpJobList.FieldByName('Сумма').AsCurrency;
123
Inc(j);
Sum := Sum + dstEmpJobList.FieldByName('Сумма').AsCurrency;
dstEmpJobList.Next;
end; //while not dstEmpJobList.Eof
Excel.Cells[i+PosInc+j,6] := Sum;
i := i + j + 1;
SumItogo := SumItogo + Sum;
end; //if dstEmpJobList.RecordCount > 0
dstEmpJobList.Close;
tbStaff.Next
end; //while
Excel.Cells[i+6,6] := SumItogo;
tbStaff.Close;
end; //with
Excel.Visible := True;
except
Excel.Quit;
end;
finally
Screen.Cursor := crDefault;
end;
end;
//Формирование заявки:
procedure Rep_Order;
var
WorkbookName: string;
Excel: Variant;
i, j, PosInc: Integer;
Sum, SumItogo: Currency;
begin
//Шаблон хранится в папке Templates:
WorkbookName := GetCurrentDir + '\Templates\' + 'Работы и комплектующие по
заказу.xlt';
Excel := CreateOleObject('Excel.Application');
Screen.Cursor := crHourGlass;
try
try
Excel.Workbooks.Open(WorkbookName);
//Экспорт данных из таблицы БД:
with DM do
begin
i := 0;
SumItogo := 0; //Общая сумма заказа
PosInc := 7;
Excel.Cells[1,4] := 'Д' + FormatFloat('0000',
dstOrders.FieldByName('NЗаказа').AsInteger) +
' от ' + GetRightDate(dstOrders.FieldByName('ДатаПриема').AsDateTime);
Excel.Cells[3,3] := dstOrders.FieldByName('Клиент').AsString;
//Цикл по работам:
dstJobs.First;

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
IPO - инструмент финансирования деятельности организации. На примере ПАО «Нефтяная компания «Лукойл»
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)