Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Diplomnaya_rabota_Zolotova.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.22 Mб
Скачать

Приложение а. Текст программы

program Repair;

uses

Forms,

uMain in 'uMain.pas' {fmMain},

uDM in 'uDM.pas' {DM: TDataModule},

uOrgs in 'uOrgs.pas' {fmOrgs},

uDiapason in 'uDiapason.pas' {fmDiapason},

uCateg in 'uCateg.pas' {fmCateg},

uParts in 'uParts.pas' {fmParts},

uPersonal in 'uPersonal.pas' {fmPersonal},

uProf in 'uProf.pas' {fmProf},

uRep in 'uRep.pas',

uStatistics in 'uStatistics.pas' {fmStatistics},

uStr in 'uStr.pas',

uInfo in 'uInfo.pas' {fmInfo};

{$R *.res}

begin

Application.Initialize;

Application.CreateForm(TfmMain, fmMain);

Application.CreateForm(TDM, DM);

Application.CreateForm(TfmOrgs, fmOrgs);

Application.CreateForm(TfmDiapason, fmDiapason);

Application.CreateForm(TfmCateg, fmCateg);

Application.CreateForm(TfmParts, fmParts);

Application.CreateForm(TfmPersonal, fmPersonal);

Application.CreateForm(TfmProf, fmProf);

Application.CreateForm(TfmStatistics, fmStatistics);

Application.CreateForm(TfmInfo, fmInfo);

Application.Run;

end.

unit uCateg;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, Grids, DBGrids, DBCtrls, StdCtrls, Buttons;

type

TfmCateg = class(TForm)

DBGrid1: TDBGrid;

Panel1: TPanel;

bbtIns: TBitBtn;

bbtDel: TBitBtn;

bbtSave: TBitBtn;

bbtExit: TBitBtn;

procedure FormShow(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure bbtInsClick(Sender: TObject);

procedure bbtDelClick(Sender: TObject);

procedure bbtSaveClick(Sender: TObject);

procedure bbtExitClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

fmCateg: TfmCateg;

implementation

uses uDM, uParts, DB;

{$R *.dfm}

procedure TfmCateg.FormShow(Sender: TObject);

begin

DM.tbCateg.Open;

DM.tbCateg.Sort := 'Группа';

end;

procedure TfmCateg.FormClose(Sender: TObject; var Action: TCloseAction);

begin

//Набор данных закрывается, если он не используется в других формах:

if not fmParts.Showing then

DM.tbCateg.Close;

end;

procedure TfmCateg.bbtInsClick(Sender: TObject);

begin

DM.tbCateg.Insert;

end;

procedure TfmCateg.bbtDelClick(Sender: TObject);

begin

DM.tbCateg.Delete;

end;

procedure TfmCateg.bbtSaveClick(Sender: TObject);

begin

if DM.tbCateg.State in [dsEdit, dsInsert] then

DM.tbCateg.Post;

end;

procedure TfmCateg.bbtExitClick(Sender: TObject);

begin

Close;

end;

end.

unit uDiapason;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ComCtrls, Buttons, ExtCtrls;

type

TfmDiapason = class(TForm)

Label1: TLabel;

Label2: TLabel;

dtpDateFrom: TDateTimePicker;

dtpDateTo: TDateTimePicker;

bbtCancel: TBitBtn;

bbtOK: TBitBtn;

Bevel1: TBevel;

private

{ Private declarations }

public

{ Public declarations }

end;

function GetDiapason(var DateFrom, DateTo: TDate): Boolean;

var

fmDiapason: TfmDiapason;

implementation

{$R *.dfm}

//Функция возвращает диапазон дат, заданный пользователем:

function GetDiapason(var DateFrom, DateTo: TDate): Boolean;

begin

fmDiapason.dtpDateFrom.Date := DateFrom;

fmDiapason.dtpDateTo.Date := DateTo;

if fmDiapason.ShowModal = mrOK then begin

DateFrom := fmDiapason.dtpDateFrom.Date;

DateTo := fmDiapason.dtpDateTo.Date;

Result := True;

end

else

Result := False;

end;

end.

unit uDM;

interface

uses

SysUtils, Classes, DB, ADODB;

type

TDM = class(TDataModule)

ADOConnection1: TADOConnection;

tbProf: TADOTable;

dsProf: TDataSource;

tbProfID: TAutoIncField;

tbProfDSDesigner: TWideStringField;

tbOrgs: TADOTable;

dsOrgs: TDataSource;

tbOrgsID: TAutoIncField;

tbOrgsDSDesigner2: TWideStringField;

tbOrgsDSDesigner4: TWideStringField;

tbOrgsDSDesigner5: TWideStringField;

tbOrgsDSDesigner6: TWideStringField;

tbOrgsDSDesigner7: TWideStringField;

tbOrgsDSDesigner8: TWideStringField;

tbInfo: TADOTable;

dsInfo: TDataSource;

tbInfoDSDesigner: TWideStringField;

tbInfoDSDesigner2: TWideStringField;

tbInfoDSDesigner3: TWideStringField;

tbInfoDSDesigner4: TWideStringField;

tbInfoDSDesigner5: TWideStringField;

tbInfoDSDesigner6: TWideStringField;

tbInfoDSDesigner7: TWideStringField;

tbInfoDSDesigner8: TWideStringField;

tbParts: TADOTable;

dsParts: TDataSource;

tbPartsDSDesigner: TAutoIncField;

tbPartsDSDesigner2: TWideStringField;

tbPartsDSDesigner3: TWideStringField;

tbPartsDSDesigner4: TWideStringField;

tbPartsDSDesigner6: TBCDField;

tbPersonal: TADOTable;

dsPersonal: TDataSource;

tbPersonalN: TAutoIncField;

tbPersonalDSDesigner: TWideStringField;

tbPersonalID: TIntegerField;

tbPersonalIntegerField: TStringField;

tbPartsField: TCurrencyField;

dsOrders: TDataSource;

dstOrders: TADODataSet;

dstOrdersN: TAutoIncField;

dstOrdersDSDesigner: TDateTimeField;

dstOrdersDSDesigner2: TDateTimeField;

dstOrdersID: TIntegerField;

dstOrdersID3: TIntegerField;

dstOrdersDSDesigner3: TBCDField;

dstOrdersField: TStringField;

dstOrdersIntegerField: TStringField;

dsJobs: TDataSource;

dstJobs: TADODataSet;

dstJobsN: TIntegerField;

dstJobsStringField: TStringField;

dstJobsField2: TCurrencyField;

dstJobsDSDesigner2: TFloatField;

dsOrderParts: TDataSource;

dstOrderParts: TADODataSet;

dstOrderPartsN: TIntegerField;

dstOrderParts_ID: TIntegerField;

dstOrderPartsDSDesigner2: TBCDField;

dstOrderPartsCurrencyField: TCurrencyField;

dstOrderPartsStringField: TStringField;

dstStatPartsCateg: TADODataSet;

dstStatOrderSum: TADODataSet;

BCDField2: TBCDField;

StringField2: TStringField;

dstStatPartsSum: TADODataSet;

BCDField3: TBCDField;

dstStatClientSum: TADODataSet;

dstEmpJobList: TADODataSet;

dstEmpJobListDSDesigner: TWideStringField;

dstEmpJobListDSDesigner3: TFloatField;

tbCateg: TADOTable;

dsCateg: TDataSource;

tbCategID: TAutoIncField;

tbCategDSDesigner: TWideStringField;

tbOrgsDSDesigner: TWideStringField;

dstJobsID: TAutoIncField;

dstJobsDSDesigner: TDateTimeField;

dstJobsDSDesigner4: TDateTimeField;

dstJobsDSDesigner5: TWideStringField;

dstJobsDSDesigner6: TBCDField;

dstJobsID2: TIntegerField;

tbPartsID: TIntegerField;

tbPartsDSDesigner5: TFloatField;

tbCateg2: TADOTable;

AutoIncField1: TAutoIncField;

WideStringField1: TWideStringField;

dsCateg2: TDataSource;

tbPartsField2: TStringField;

dstOrderPartsDSDesigner: TFloatField;

dstMTRList: TADODataSet;

dstMTRListDSDesigner: TWideStringField;

dstMTRListDSDesigner2: TWideStringField;

dstMTRListDSDesigner3: TWideStringField;

dstMTRListDSDesigner4: TFloatField;

dstMTRListDSDesigner5: TBCDField;

dstMTRListDSDesigner6: TFloatField;

dstMTRList_ID: TIntegerField;

dstEmpJobListDSDesigner2: TBCDField;

dstEmpJobListDSDesigner4: TFloatField;

dstEmpJobListDSDesigner5: TDateTimeField;

dstEmpJobListDSDesigner6: TDateTimeField;

dstStatPartsCategDSDesigner2: TFloatField;

dstStatPartsCategField: TStringField;

dstStatClientSumDSDesigner2: TFloatField;

dstStatClientSumField: TStringField;

dstStatPartsSumField: TStringField;

procedure tbPartsCalcFields(DataSet: TDataSet);

procedure dstJobsCalcFields(DataSet: TDataSet);

procedure dstOrderPartsCalcFields(DataSet: TDataSet);

procedure DataModuleDestroy(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

DM: TDM;

implementation

{$R *.dfm}

//Расчет суммы каждой позиции аксессуаров на складе:

procedure TDM.tbPartsCalcFields(DataSet: TDataSet);

begin

DataSet.FieldByName('Сумма').Value :=

DataSet.FieldByName('Количество').Value * DataSet.FieldByName('Цена').Value;

end;

//Расчет суммы по каждой позиции продукции по заказу:

procedure TDM.dstJobsCalcFields(DataSet: TDataSet);

begin

DataSet.FieldByName('Сумма').Value :=

DataSet.FieldByName('Количество').Value * DataSet.FieldByName('Стоимость').Value;

end;

//Расчет суммы по каждой позиции затраченной аксессуара по заказу:

procedure TDM.dstOrderPartsCalcFields(DataSet: TDataSet);

begin

DataSet.FieldByName('Сумма').Value :=

DataSet.FieldByName('Количество').Value * DataSet.FieldByName('Цена').Value;

end;

procedure TDM.DataModuleDestroy(Sender: TObject);

begin

ADOConnection1.Close;

end;

end.

unit uInfo;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Mask, DBCtrls, Buttons, ExtCtrls;

type

TfmInfo = class(TForm)

Label1: TLabel;

Label2: TLabel;

DBEdit2: TDBEdit;

Label3: TLabel;

DBEdit3: TDBEdit;

Label4: TLabel;

DBEdit4: TDBEdit;

Label6: TLabel;

DBEdit6: TDBEdit;

Label7: TLabel;

DBEdit7: TDBEdit;

Label8: TLabel;

DBEdit8: TDBEdit;

Label9: TLabel;

DBEdit9: TDBEdit;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

DBMemo1: TDBMemo;

Bevel1: TBevel;

procedure FormShow(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

fmInfo: TfmInfo;

implementation

uses uDM, DB;

{$R *.dfm}

procedure TfmInfo.FormShow(Sender: TObject);

begin

DM.tbInfo.Open;

end;

procedure TfmInfo.FormClose(Sender: TObject;

var Action: TCloseAction);

begin

DM.tbInfo.Close;

end;

procedure TfmInfo.BitBtn1Click(Sender: TObject);

begin

if DM.tbInfo.State = dsEdit then

DM.tbInfo.Post;

Close;

end;

procedure TfmInfo.BitBtn2Click(Sender: TObject);

begin

DM.tbInfo.Cancel;

Close;

end;

end.

unit uMain;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, XPMan, ImgList, ActnList, StdActns,

XPStyleActnCtrls, ActnMan, ToolWin, ActnCtrls, ActnMenus, jpeg, ExtCtrls,

DBCtrls, ComCtrls, Grids, DBGrids;

type

TfmMain = class(TForm)

XPManifest1: TXPManifest;

ActionManager1: TActionManager;

ImageList1: TImageList;

FileExit1: TFileExit;

acSpravReq: TAction;

acSpravSpec: TAction;

acSpravClients: TAction;

acSpravStaff: TAction;

acSpravStore: TAction;

acRepStat: TAction;

acSpravGroup: TAction;

Panel2: TPanel;

Panel3: TPanel;

DBGrid2: TDBGrid;

DBGrid1: TDBGrid;

Splitter2: TSplitter;

Panel4: TPanel;

bbtIns: TBitBtn;

bbtDel: TBitBtn;

bbtSave: TBitBtn;

GroupBox1: TGroupBox;

chbDate1: TCheckBox;

chbDate2: TCheckBox;

dtpDate1: TDateTimePicker;

dtpDate2: TDateTimePicker;

chbClient: TCheckBox;

dblcbClient: TDBLookupComboBox;

DBGrid3: TDBGrid;

Splitter1: TSplitter;

acRepMTRList: TAction;

bbtContract: TBitBtn;

bbtAppendix: TBitBtn;

bbtAct: TBitBtn;

bbtBill: TBitBtn;

bbtFact: TBitBtn;

acRepJobs: TAction;

acRepDefect: TAction;

ActionMainMenuBar1: TActionMainMenuBar;

procedure acSpravReqExecute(Sender: TObject);

procedure acSpravSpecExecute(Sender: TObject);

procedure acSpravClientsExecute(Sender: TObject);

procedure acSpravStaffExecute(Sender: TObject);

procedure acSpravStoreExecute(Sender: TObject);

procedure acRepStatExecute(Sender: TObject);

procedure acSpravGroupExecute(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure bbtPrintClick(Sender: TObject);

procedure DBGrid1TitleClick(Column: TColumn);

procedure chbDate1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure bbtInsClick(Sender: TObject);

procedure bbtSaveClick(Sender: TObject);

procedure bbtDelClick(Sender: TObject);

procedure DBGrid3EditButtonClick(Sender: TObject);

procedure DBGrid1Exit(Sender: TObject);

procedure DBGrid2Exit(Sender: TObject);

procedure DBGrid3Exit(Sender: TObject);

procedure acRepMTRListExecute(Sender: TObject);

procedure bbtContractClick(Sender: TObject);

procedure bbtAppendixClick(Sender: TObject);

procedure bbtActClick(Sender: TObject);

procedure bbtBillClick(Sender: TObject);

procedure bbtFactClick(Sender: TObject);

procedure acRepJobsExecute(Sender: TObject);

procedure acRepDefectExecute(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

fmMain: TfmMain;

implementation

uses FileCtrl, uInfo, uProf, uOrgs, uDM, uPersonal, uParts, uStatistics,

uDiapason, uRep, uCateg, ADODB, DB;

var

GridID: 1..3; //Хранит номер таблицы-Грида на форме

{$R *.dfm}

procedure TfmMain.acSpravReqExecute(Sender: TObject);

begin

fmInfo.Show;

end;

procedure TfmMain.acSpravSpecExecute(Sender: TObject);

begin

fmProf.Show;

end;

procedure TfmMain.acSpravClientsExecute(Sender: TObject);

begin

fmOrgs.Show;

end;

procedure TfmMain.acSpravStaffExecute(Sender: TObject);

begin

fmPersonal.Show;

end;

procedure TfmMain.acSpravStoreExecute(Sender: TObject);

begin

fmParts.Show;

end;

procedure TfmMain.acRepStatExecute(Sender: TObject);

begin

fmStatistics.Show;

end;

procedure TfmMain.acSpravGroupExecute(Sender: TObject);

begin

fmCateg.Show;

end;

procedure TfmMain.FormShow(Sender: TObject);

begin

DM.dstOrders.Open;

DM.dstJobs.Open;

DM.dstOrderParts.Open;

dtpDate1.Date := Date;

dtpDate2.Date := Date;

chbDate1Click(Self);

DBGrid1.SetFocus;

end;

procedure TfmMain.bbtPrintClick(Sender: TObject);

begin

Rep_Universal(DBGrid1, 7, 'Журнал заказов');

end;

//Сортировка данных по выбранному полю:

procedure TfmMain.DBGrid1TitleClick(Column: TColumn);

begin

try

(DBGrid1.DataSource.DataSet as TADODataset).Sort := Column.FieldName;

except

Application.MessageBox('Сортировка по данному полю невозможна', 'Информация', MB_OK+MB_ICONINFORMATION)

end;

end;

procedure TfmMain.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 Filter <> '' then

begin

DM.dstOrders.Filter := Filter;

DM.dstOrders.Filtered := True;

end

else

DM.dstOrders.Filtered := False;

end;

procedure TfmMain.FormCreate(Sender: TObject);

begin

dtpDate1.Date := Date;

dtpDate2.Date := Date;

bbtContract.Caption := 'Печать' + Chr(10) + 'договора';

bbtAppendix.Caption := 'Печать' + Chr(10) + 'Приложения';

bbtAct.Caption := 'Печать акта' + Chr(10) + 'сдачи-приемки';

bbtFact.Caption := 'Печать' + Chr(10) + 'счета-фактуры';

end;

//В зависимости от номера Грида, в котором находился курсор до нажатия кнопки,

//выполняется добавление записи в соответствующий набор данных:

procedure TfmMain.bbtInsClick(Sender: TObject);

begin

case GridID of

1: DM.dstOrders.Insert;

2: DM.dstJobs.Insert;

3: DM.dstOrderParts.Insert;

end;

end;

//В зависимости от номера Грида, в котором находился курсор до нажатия кнопки,

//выполняется сохранение записи в соответствующий набор данных:

procedure TfmMain.bbtSaveClick(Sender: TObject);

begin

case GridID of

1: if DM.dstOrders.State in [dsEdit, dsInsert] then

DM.dstOrders.Post;

2: if DM.dstJobs.State in [dsEdit, dsInsert] then

DM.dstJobs.Post;

3: if DM.dstOrderParts.State in [dsEdit, dsInsert] then

DM.dstOrderParts.Post;

end;

end;

//В зависимости от номера Грида, в котором находился курсор до нажатия кнопки,

//выполняется удаление записи в соответствующий набор данных:

procedure TfmMain.bbtDelClick(Sender: TObject);

begin

case GridID of

1: DM.dstOrders.Delete;

2: DM.dstJobs.Delete;

3: DM.dstOrderParts.Delete;

end;

end;

//При щелчке по кнопке "..." в ячейке "Запчасть" в DBGrid1 на экран выводится

//завпчастей для выбора нужного из списка:

procedure TfmMain.DBGrid3EditButtonClick(Sender: TObject);

begin

fmParts.bbtGo.Visible := True;

if fmParts.ShowModal = mrOK then

begin

if not (DM.dstOrderParts.State in [dsEdit, dsInsert]) then

DM.dstOrderParts.Edit;

DM.dstOrderParts.FieldByName('МЦ_ID').Value := DM.tbParts.FieldByName('Шифр').Value;

DM.dstOrderParts.FieldByName('Цена').Value := DM.tbParts.FieldByName('Цена').Value

end;

fmParts.bbtGo.Visible := False;

end;

procedure TfmMain.DBGrid1Exit(Sender: TObject);

begin

GridID := 1;

end;

procedure TfmMain.DBGrid2Exit(Sender: TObject);

begin

GridID := 2;

end;

procedure TfmMain.DBGrid3Exit(Sender: TObject);

begin

GridID := 3;

end;

procedure TfmMain.bbtContractClick(Sender: TObject);

begin

Rep_Contract;

end;

procedure TfmMain.bbtAppendixClick(Sender: TObject);

begin

Rep_Appendix;

end;

procedure TfmMain.bbtActClick(Sender: TObject);

begin

Rep_Act;

end;

procedure TfmMain.bbtBillClick(Sender: TObject);

begin

Rep_Bill;

end;

procedure TfmMain.bbtFactClick(Sender: TObject);

begin

Rep_Fact;

end;

procedure TfmMain.acRepMTRListExecute(Sender: TObject);

var

Date1, Date2: TDate;

begin

Date1 := Date;

Date2 := Date;

if GetDiapason(Date1, Date2) then

Rep_MTR(Date1, Date2);

end;

procedure TfmMain.acRepJobsExecute(Sender: TObject);

var

Date1, Date2: TDate;

begin

Date1 := Date;

Date2 := Date;

if GetDiapason(Date1, Date2) then

Rep_JobList(Date1, Date2);

end;

procedure TfmMain.acRepDefectExecute(Sender: TObject);

begin

Rep_Defect;

end;

end.

unit uOrgs;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, Grids, DBGrids, DBCtrls, StdCtrls, Buttons, Mask;

type

TfmOrgs = class(TForm)

Panel1: TPanel;

bbtExit: TBitBtn;

Panel2: TPanel;

DBGrid1: TDBGrid;

bbtPrint: TBitBtn;

GroupBox1: TGroupBox;

DBEdit1: TDBEdit;

Label1: TLabel;

Label5: TLabel;

DBEdit5: TDBEdit;

Label3: TLabel;

DBEdit3: TDBEdit;

DBEdit6: TDBEdit;

Label6: TLabel;

DBMemo1: TDBMemo;

Label7: TLabel;

Label8: TLabel;

DBEdit8: TDBEdit;

Label9: TLabel;

DBEdit9: TDBEdit;

bbtIns: TBitBtn;

bbtDel: TBitBtn;

bbtSave: TBitBtn;

procedure FormShow(Sender: TObject);

procedure bbtPrintClick(Sender: TObject);

procedure DBGrid1TitleClick(Column: TColumn);

procedure bbtInsClick(Sender: TObject);

procedure bbtDelClick(Sender: TObject);

procedure bbtSaveClick(Sender: TObject);

procedure bbtExitClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

fmOrgs: TfmOrgs;

implementation

uses uDM, uRep, ADODB, DB;

{$R *.dfm}

procedure TfmOrgs.FormShow(Sender: TObject);

begin

DM.tbOrgs.Open;

end;

procedure TfmOrgs.bbtPrintClick(Sender: TObject);

begin

Rep_Universal(DBGrid1, 7, 'Организации-заказчики');

end;

//Сортировка данных в таблице по выбранному столбцу:

procedure TfmOrgs.DBGrid1TitleClick(Column: TColumn);

begin

try

(DBGrid1.DataSource.DataSet as TADOTable).Sort := Column.FieldName;

except

Application.MessageBox('Сортировка по данному полю невозможна', 'Информация', MB_OK+MB_ICONINFORMATION)

end;

end;

procedure TfmOrgs.bbtInsClick(Sender: TObject);

begin

DM.tbOrgs.Insert;

end;

procedure TfmOrgs.bbtDelClick(Sender: TObject);

begin

DM.tbOrgs.Delete;

end;

procedure TfmOrgs.bbtSaveClick(Sender: TObject);

begin

if DM.tbOrgs.State in [dsEdit, dsInsert] then

DM.tbOrgs.Post;

end;

procedure TfmOrgs.bbtExitClick(Sender: TObject);

begin

Close;

end;

end.

unit uParts;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, Grids, DBGrids, DBCtrls, StdCtrls, Buttons;

type

TfmParts = class(TForm)

DBGrid1: TDBGrid;

Panel1: TPanel;

bbtGo: TBitBtn;

bbtIns: TBitBtn;

bbtDel: TBitBtn;

bbtSave: TBitBtn;

bbtPrint: TBitBtn;

bbtExit: TBitBtn;

Panel2: TPanel;

dblcbGroup: TDBLookupComboBox;

CheckBox1: TCheckBox;

GroupBox1: TGroupBox;

edName: TEdit;

procedure bbtPrintClick(Sender: TObject);

procedure bbtExitClick(Sender: TObject);

procedure bbtInsClick(Sender: TObject);

procedure bbtDelClick(Sender: TObject);

procedure bbtSaveClick(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure CheckBox1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure edNameChange(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

fmParts: TfmParts;

implementation

uses uDM, uRep, ADODB, DB, uCateg;

{$R *.dfm}

procedure TfmParts.bbtPrintClick(Sender: TObject);

begin

if CheckBox1.Checked then

Rep_Universal(DBGrid1, 7, dblcbGroup.Text + ' на складе')

else

Rep_Universal(DBGrid1, 7, 'МТР на складе');

end;

procedure TfmParts.bbtExitClick(Sender: TObject);

begin

Close;

end;

procedure TfmParts.bbtInsClick(Sender: TObject);

begin

DM.tbParts.Insert;

end;

procedure TfmParts.bbtDelClick(Sender: TObject);

begin

DM.tbParts.Delete;

end;

procedure TfmParts.bbtSaveClick(Sender: TObject);

begin

if DM.tbParts.State in [dsEdit, dsInsert] then

DM.tbParts.Post;

end;

procedure TfmParts.FormClose(Sender: TObject; var Action: TCloseAction);

begin

//Набор данных закрывается, если он не используется в других формах:

if not fmCateg.Showing then

DM.tbCateg.Close;

end;

//В зависимости от состояния флажка выполняется отбор запчастей по выбранному виду МТР:

procedure TfmParts.CheckBox1Click(Sender: TObject);

begin

if CheckBox1.Checked then

begin

DM.tbCateg.Open;

DBGrid1.Columns[6].Visible := False; //Скрывается поле вида МТР

end

else

begin

DM.tbCateg.Close;

DBGrid1.Columns[6].Visible := True; //Отображается поле вида МТР

end;

DM.tbParts.Requery([]);

end;

procedure TfmParts.FormCreate(Sender: TObject);

begin

DM.tbCateg.Open;

DM.tbCateg.Sort := 'Группа';

DM.tbCateg.First;

DM.tbParts.Open;

DM.tbParts.Sort := 'ГруппаID, Наименование';

dblcbGroup.KeyValue := DM.tbCateg.FieldByName('ID').Value;

end;

procedure TfmParts.FormShow(Sender: TObject);

begin

CheckBox1Click(Self);

end;

//Поиск МТР по наименованию:

procedure TfmParts.edNameChange(Sender: TObject);

begin

DM.tbParts.Locate('Наименование', edName.Text, [loPartialKey, loCaseInsensitive]);

end;

end.

unit uPersonal;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, Grids, DBGrids, DBCtrls, StdCtrls, Buttons;

type

TfmPersonal = class(TForm)

DBGrid1: TDBGrid;

Panel1: TPanel;

bbtIns: TBitBtn;

bbtDel: TBitBtn;

bbtSave: TBitBtn;

bbtPrint: TBitBtn;

bbtExit: TBitBtn;

procedure FormShow(Sender: TObject);

procedure DBGrid1TitleClick(Column: TColumn);

procedure bbtPrintClick(Sender: TObject);

procedure bbtExitClick(Sender: TObject);

procedure bbtInsClick(Sender: TObject);

procedure bbtDelClick(Sender: TObject);

procedure bbtSaveClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

fmPersonal: TfmPersonal;

implementation

uses uDM, uRep, ADODB, DB;

{$R *.dfm}

procedure TfmPersonal.FormShow(Sender: TObject);

begin

DM.tbPersonal.Open;

end;

//Сортировка данных в таблице по выбранному столбцу:

procedure TfmPersonal.DBGrid1TitleClick(Column: TColumn);

begin

try

(DBGrid1.DataSource.DataSet as TADOTable).Sort := Column.FieldName;

except

Application.MessageBox('Сортировка по данному полю невозможна', 'Информация', MB_OK+MB_ICONINFORMATION)

end;

end;

procedure TfmPersonal.bbtPrintClick(Sender: TObject);

begin

Rep_Universal(DBGrid1, 3, 'Ответственные лица');

end;

procedure TfmPersonal.bbtExitClick(Sender: TObject);

begin

Close;

end;

procedure TfmPersonal.bbtInsClick(Sender: TObject);

begin

DM.tbPersonal.Insert;

end;

procedure TfmPersonal.bbtDelClick(Sender: TObject);

begin

DM.tbPersonal.Delete;

end;

procedure TfmPersonal.bbtSaveClick(Sender: TObject);

begin

if DM.tbPersonal.State in [dsEdit, dsInsert] then

DM.tbPersonal.Post;

end;

end.

unit uProf;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, Grids, DBGrids, DBCtrls, StdCtrls, Buttons;

type

TfmProf = class(TForm)

DBGrid1: TDBGrid;

Panel1: TPanel;

bbtIns: TBitBtn;

bbtDel: TBitBtn;

bbtSave: TBitBtn;

bbtExit: TBitBtn;

procedure FormShow(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure bbtInsClick(Sender: TObject);

procedure bbtDelClick(Sender: TObject);

procedure bbtSaveClick(Sender: TObject);

procedure bbtExitClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

fmProf: TfmProf;

implementation

uses uDM, uPersonal, DB;

{$R *.dfm}

procedure TfmProf.FormShow(Sender: TObject);

begin

DM.tbProf.Open;

end;

procedure TfmProf.FormClose(Sender: TObject; var Action: TCloseAction);

begin

//Набор данных закрывается, если он не используется в других формах:

if not fmPersonal.Showing then

DM.tbProf.Close;

end;

procedure TfmProf.bbtInsClick(Sender: TObject);

begin

DM.tbProf.Insert;

end;

procedure TfmProf.bbtDelClick(Sender: TObject);

begin

DM.tbProf.Delete;

end;

procedure TfmProf.bbtSaveClick(Sender: TObject);

begin

if DM.tbProf.State in [dsEdit, dsInsert] then

DM.tbProf.Post;

end;

procedure TfmProf.bbtExitClick(Sender: TObject);

begin

Close;

end;

end.

unit uRep;

//Модуль для формирования отчетов и документов

interface

uses

Windows, SysUtils, Classes, ComObj, DB, Controls, Forms, ADODB, Math, DBGrids;

procedure Rep_Universal(ADBGrid: TDBGrid; NumCol: Integer; ACaption: string);

procedure Rep_MTR(Date1, Date2: TDate);

procedure Rep_JobList(Date1, Date2: TDate);

procedure Rep_Contract;

procedure Rep_Appendix;

procedure Rep_Act;

procedure Rep_Bill;

procedure Rep_Fact;

procedure Rep_Defect;

function GetRightDate(ADate: TDateTime): string;

implementation

uses

uDM, DateUtils, Dialogs, uStr;

//Формирование отчета по выбранному набору данных (вывод заголовков видимых

//полей и их значений):

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;

//Форматирование заголовка:

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

begin

Excel.Cells[i,j+1].NumberFormat := '@';

Excel.Cells[i,j+1] := FieldByName(ADBGrid.Columns[j].FieldName).DisplayText;

end;

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_MTR(Date1, Date2: TDate);

var

WorkbookName, Categ: string;

Excel: Variant;

i, j, PosInc: Integer;

Sum, SumItogo: Currency;

//Добавление новой шапки таблицы для новой категории МТР:

procedure AddHeader;

begin

if DM.dstMTRList.FieldByName('Группа').AsString <> Categ then

begin

Excel.Cells[i+PosInc,7] := Sum;

Sum := 0;

j := 0;

Inc(i,2);

Excel.Rows.Item[PosInc+i].Select;

Excel.Selection.Insert;

Excel.Selection.Insert;

Excel.Selection.Insert;

Excel.Selection.Insert;

Excel.Selection.Insert;

Excel.Rows.Item[3].Select;

Excel.Selection.Copy;

Excel.Rows.Item[PosInc+i].Select;

Excel.ActiveSheet.Paste;

Excel.Rows.Item[4].Select;

Excel.Selection.Copy;

Excel.Rows.Item[PosInc+i+1].Select;

Excel.ActiveSheet.Paste;

Excel.Rows.Item[5].Select;

Excel.Selection.Copy;

Excel.Rows.Item[PosInc+i+2].Select;

Excel.ActiveSheet.Paste;

//Копирование строки "Итого":

Excel.Rows.Item[PosInc+i-2].Select;

Excel.Selection.Copy;

Excel.Rows.Item[PosInc+i+3].Select;

Excel.ActiveSheet.Paste;

Excel.Application.CutCopyMode := False;

Categ := DM.dstMTRList.FieldByName('Группа').AsString;

Excel.Cells[PosInc+i,3] := Categ;

Inc(i,2);

end;

end;

begin

//Шаблон хранится в папке Шаблоны:

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; //Общая сумма МТР

Sum := 0; //Cумма по виду МТР

PosInc := 5;

Excel.Cells[1,1] := 'Потребность в МТР за период' + Chr(10) +

'с ' + DateToStr(Date1) + ' по ' + DateToStr(Date2);

//Запрос перечня потребности в МТР за заданный период:

dstMTRList.Parameters.ParamByName('pDate1').Value := Date1;

dstMTRList.Parameters.ParamByName('pDate2').Value := Date2;

dstMTRList.Parameters.ParamByName('pDate11').Value := Date1;

dstMTRList.Parameters.ParamByName('pDate22').Value := Date2;

dstMTRList.Open;

dstMTRList.First;

Categ := dstMTRList.FieldByName('Группа').AsString;

Excel.Cells[3,3] := Categ;

//Цикл по МТР:

while not dstMTRList.Eof do

begin

AddHeader;

//Добавление новой строки для МТР:

if j <> 0 then

begin

Excel.Rows.Item[PosInc+i].Select;

Excel.Selection.Insert;

Excel.Rows.Item[5].Select;

Excel.Selection.Copy;

Excel.Rows.Item[PosInc+i].Select;

Excel.ActiveSheet.Paste;

Excel.Application.CutCopyMode := False;

end;

Excel.Cells[i+PosInc,1] := j+1;

Excel.Cells[i+PosInc,2] := FormatFloat('0000', dstMTRList.FieldByName('МЦ_ID').AsInteger);

Excel.Cells[i+PosInc,3] := dstMTRList.FieldByName('Наименование').AsString;

Excel.Cells[i+PosInc,4] := dstMTRList.FieldByName('ЕдИзм').AsString;

Excel.Cells[i+PosInc,5] := dstMTRList.FieldByName('Количество').AsFloat;

Excel.Cells[i+PosInc,6] := dstMTRList.FieldByName('Цена').AsCurrency;

Excel.Cells[i+PosInc,7] := dstMTRList.FieldByName('Сумма').AsCurrency;

Sum := Sum + dstMTRList.FieldByName('Сумма').AsCurrency;

SumItogo := SumItogo + dstMTRList.FieldByName('Сумма').AsCurrency;

Inc(i);

Inc(j);

dstMTRList.Next;

end; //while not dstMTRList.Eof

dstMTRList.Close;

Excel.Cells[i+PosInc,7] := Sum;

Excel.Cells[i+7,7] := SumItogo;

end; //with

Excel.Visible := True;

except

Excel.Quit;

end;

finally

Screen.Cursor := crDefault;

end;

end;

//Формирование списка выполненных работ за указанный диапазон дат:

procedure Rep_JobList(Date1, Date2: TDate);

var

WorkbookName: string;

Excel: Variant;

i, PosInc: Integer;

Sum: Currency;

begin

//Шаблон хранится в папке Шаблоны:

WorkbookName := GetCurrentDir + '\Templates\' + 'Работы.xlt';

Excel := CreateOleObject('Excel.Application');

Screen.Cursor := crHourGlass;

try

try

Excel.Workbooks.Open(WorkbookName);

//Экспорт данных из таблицы БД:

with DM do

begin

i := 0;

PosInc := 4;

Excel.Cells[1,1] := 'Выполненные работы за период' + Chr(10) +

'за период с ' + DateToStr(Date1) + ' по ' + DateToStr(Date2);

//Запрос перечня работ за заданный период:

dstEmpJobList.Parameters.ParamByName('pDate1').Value := Date1;

dstEmpJobList.Parameters.ParamByName('pDate2').Value := Date2;

dstEmpJobList.Parameters.ParamByName('pDate11').Value := Date1;

dstEmpJobList.Parameters.ParamByName('pDate22').Value := Date2;

dstEmpJobList.Open;

Sum := 0; //Сумма работ

dstEmpJobList.First;

//Цикл по работам:

while not dstEmpJobList.Eof do

begin

//Добавление новой строки для работы:

if i <> 0 then

begin

Excel.Rows.Item[PosInc+i].Select;

Excel.Selection.Insert;

Excel.Rows.Item[PosInc+i-1].Select;

Excel.Selection.Copy;

Excel.Rows.Item[PosInc+i].Select;

Excel.ActiveSheet.Paste;

Excel.Application.CutCopyMode := False;

end;

Excel.Cells[i+PosInc,1] := i+1;

Excel.Cells[i+PosInc,2] := dstEmpJobList.FieldByName('ДатаС').AsString;

Excel.Cells[i+PosInc,3] := dstEmpJobList.FieldByName('ДатаПо').AsString;

Excel.Cells[i+PosInc,4] := dstEmpJobList.FieldByName('Работа').AsString;

Excel.Cells[i+PosInc,5] := dstEmpJobList.FieldByName('Количество').AsFloat;

Excel.Cells[i+PosInc,6] := dstEmpJobList.FieldByName('Стоимость').AsCurrency;

Excel.Cells[i+PosInc,7] := dstEmpJobList.FieldByName('Сумма').AsCurrency;

Inc(i);

Sum := Sum + dstEmpJobList.FieldByName('Сумма').AsCurrency;

dstEmpJobList.Next;

end; //while not dstEmpJobList.Eof

Excel.Cells[i+PosInc,7] := Sum;

dstEmpJobList.Close;

end; //with

Excel.Visible := True;

except

Excel.Quit;

end;

finally

Screen.Cursor := crDefault;

end;

end;

//Формирование договора:

procedure Rep_Contract;

var

ObjWord: Variant;

begin

ObjWord := CreateOleObject('Word.Application');

Screen.Cursor := crHourGlass;

try

try

ObjWord.Documents.Open(GetCurrentDir + '\Templates\Договор.dot');

//Данные договора и заказа:

ObjWord.Selection.Goto(Name := 'НомерДог');

ObjWord.Selection.TypeText(Text := FormatFloat('0000', DM.dstOrders.FieldByName('NЗаказа').AsFloat));

ObjWord.Selection.Goto(Name := 'ДатаДог');

ObjWord.Selection.TypeText(Text := GetRightDate(DM.dstOrders.FieldByName('ДатаПриема').AsDateTime));

ObjWord.Selection.Goto(Name := 'ДатаЗаказа');

ObjWord.Selection.TypeText(Text := GetRightDate(DM.dstOrders.FieldByName('ДатаПриема').AsDateTime));

ObjWord.Selection.Goto(Name := 'ДатаОконч');

ObjWord.Selection.TypeText(Text := GetRightDate(DM.dstOrders.FieldByName('ДатаСдачи').AsDateTime));

//Данные клиента:

ObjWord.Selection.Goto(Name := 'Заказчик');

ObjWord.Selection.TypeText(Text := DM.tbOrgs.FieldByName('Наименование').AsString);

ObjWord.Selection.Goto(Name := 'Заказчик2');

ObjWord.Selection.TypeText(Text := DM.tbOrgs.FieldByName('Наименование').AsString);

ObjWord.Selection.Goto(Name := 'Адрес');

ObjWord.Selection.TypeText(Text := DM.tbOrgs.FieldByName('Адрес').AsString);

ObjWord.Selection.Goto(Name := 'ИННЗак');

ObjWord.Selection.TypeText(Text := DM.tbOrgs.FieldByName('ИНН').AsString);

ObjWord.Selection.Goto(Name := 'РеквизитыЗак');

ObjWord.Selection.TypeText(Text := DM.tbOrgs.FieldByName('Реквизиты').AsString);

//Реквизиты компании:

DM.tbInfo.Open;

ObjWord.Selection.Goto(Name := 'Орг');

ObjWord.Selection.TypeText(Text := DM.tbInfo.FieldByName('Наименование').AsString);

ObjWord.Selection.Goto(Name := 'Орг2');

ObjWord.Selection.TypeText(Text := DM.tbInfo.FieldByName('Наименование').AsString);

ObjWord.Selection.Goto(Name := 'ЮрАдрес');

ObjWord.Selection.TypeText(Text := DM.tbInfo.FieldByName('Адрес').AsString);

ObjWord.Selection.Goto(Name := 'ПочтАдрес');

ObjWord.Selection.TypeText(Text := DM.tbInfo.FieldByName('Адрес').AsString);

ObjWord.Selection.Goto(Name := 'ИНН');

ObjWord.Selection.TypeText(Text := DM.tbInfo.FieldByName('ИНН').AsString);

ObjWord.Selection.Goto(Name := 'Реквизиты');

ObjWord.Selection.TypeText(Text := DM.tbInfo.FieldByName('Реквизиты').AsString);

ObjWord.Selection.Goto(Name := 'ГенДир');

ObjWord.Selection.TypeText(Text := DM.tbInfo.FieldByName('ГенДиректор').AsString);

ObjWord.Selection.Goto(Name := 'ГенДир2');

ObjWord.Selection.TypeText(Text := DM.tbInfo.FieldByName('ГенДиректор').AsString);

DM.tbInfo.Close;

ObjWord.Visible := True;

except

ObjWord.Quit;

end;

finally

Screen.Cursor := crDefault;

end;

end;

//Формирование списка работ по Договору (приложения к Договору):

procedure Rep_Appendix;

var

WorkbookName: string;

Excel: Variant;

i, j, PosInc: Integer;

Sum, SumItogo: Currency;

begin

//Шаблон хранится в папке Шаблоны:

WorkbookName := GetCurrentDir + '\Templates\' + 'Прил к Договору.xlt';

Excel := CreateOleObject('Excel.Application');

Screen.Cursor := crHourGlass;

try

try

Excel.Workbooks.Open(WorkbookName);

//Экспорт данных из таблицы БД:

with DM do

begin

i := 0;

j := 0;

SumItogo := 0; //Общая сумма работ

PosInc := 7;

Excel.Cells[1,4] := FormatFloat('0000', dstOrders.FieldByName('NЗаказа').AsInteger) +

' от ' + GetRightDate(dstOrders.FieldByName('ДатаПриема').AsDateTime);

Excel.Cells[3,2] := dstOrders.FieldByName('Клиент').AsString;

//Цикл по работам:

dstJobs.First;

Sum := 0; //Сумма работ

while not dstJobs.Eof do

begin

//Добавление новой строки для работы:

if i <> 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,1] := i+1;

Excel.Cells[i+PosInc,2] := dstJobs.FieldByName('Работа').AsString;

Excel.Cells[i+PosInc,3] := dstJobs.FieldByName('Работник').AsString;

Excel.Cells[i+PosInc,4] := dstJobs.FieldByName('Стоимость').AsCurrency;

Excel.Cells[i+PosInc,5] := FormatFloat('0,00', dstJobs.FieldByName('Количество').AsFloat);

Excel.Cells[i+PosInc,6] := dstJobs.FieldByName('Сумма').AsCurrency;

Inc(i);

Sum := Sum + dstJobs.FieldByName('Сумма').AsCurrency;

dstJobs.Next;

end; //while not dstJobs.Eof

Excel.Cells[i+PosInc,6] := Sum;

Inc(i, 4);

SumItogo := SumItogo + Sum;

//Цикл по МТР:

dstOrderParts.First;

Sum := 0; //Сумма МТР

while not dstOrderParts.Eof do

begin

//Добавление новой строки для МТР:

if j <> 0 then

begin

Excel.Rows.Item[PosInc+i].Select;

Excel.Selection.Insert;

Excel.Rows.Item[PosInc+i-1].Select;

Excel.Selection.Copy;

Excel.Rows.Item[PosInc+i].Select;

Excel.ActiveSheet.Paste;

Excel.Application.CutCopyMode := False;

end;

Excel.Cells[i+PosInc,1] := j+1;

Excel.Cells[i+PosInc,2] := dstOrderParts.FieldByName('Материал').AsString;

Excel.Cells[i+PosInc,3] := tbParts.FieldByName('ЕдИзм').AsString;

Excel.Cells[i+PosInc,4] := dstOrderParts.FieldByName('Цена').AsCurrency;

Excel.Cells[i+PosInc,5] := FormatFloat('0,00', dstOrderParts.FieldByName('Количество').AsFloat);

Excel.Cells[i+PosInc,6] := dstOrderParts.FieldByName('Сумма').AsCurrency;

Inc(j);

Inc(i);

Sum := Sum + dstOrderParts.FieldByName('Сумма').AsCurrency;

dstOrderParts.Next;

end; //while not dstJobs.Eof

Excel.Cells[i+PosInc,6] := Sum;

SumItogo := SumItogo + Sum;

Excel.Cells[i+PosInc+2,6] := SumItogo;

Excel.Cells[i+PosInc+4,2] := SumToTxt(Format('%.2f', [SumItogo]));

Excel.Cells[i+PosInc+5,4] := dstOrders.FieldByName('Работник').AsString;

end; //with

Excel.Visible := True;

except

Excel.Quit;

end;

finally

Screen.Cursor := crDefault;

end;

end;

//Формирование акта сдачи-приемки:

procedure Rep_Act;

var

WorkbookName: string;

Excel: Variant;

i, PosInc: Integer;

Sum: Currency;

begin

//Шаблон хранится в папке Шаблоны:

WorkbookName := GetCurrentDir + '\Templates\' + 'Акт.xlt';

Excel := CreateOleObject('Excel.Application');

Screen.Cursor := crHourGlass;

try

try

Excel.Workbooks.Open(WorkbookName);

//Экспорт данных из таблицы БД:

with DM do

begin

i := 0;

PosInc := 14;

//Вывод реквизитов в шапку:

DM.tbInfo.Open;

Excel.Cells[1,1] := DM.tbInfo.FieldByName('Наименование').AsString;

Excel.Cells[2,1] := DM.tbInfo.FieldByName('Адрес').AsString;

Excel.Cells[3,1] := 'ИНН ' + DM.tbInfo.FieldByName('ИНН').AsString +

', КПП ' + DM.tbInfo.FieldByName('КПП').AsString;

Excel.Cells[7,2] := DM.tbInfo.FieldByName('Наименование').AsString;

DM.tbInfo.Close;

Excel.Cells[8,2] := dstOrders.FieldByName('Клиент').AsString;

Excel.Cells[9,2] := dstOrders.FieldByName('Клиент').AsString;

Excel.Cells[5,3] := FormatFloat('0000', dstOrders.FieldByName('NЗаказа').AsInteger) +

' от ' + GetRightDate(DM.dstOrders.FieldByName('ДатаСдачи').AsDateTime);

//Цикл по работам:

dstJobs.First;

Sum := 0; //Сумма работ

while not dstJobs.Eof do

begin

//Добавление новой строки для продукции:

if i <> 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,1] := i+1;

Excel.Cells[i+PosInc,2] := dstJobs.FieldByName('Работа').AsString;

Excel.Cells[i+PosInc,3] := dstJobs.FieldByName('Стоимость').AsCurrency;

Excel.Cells[i+PosInc,4] := FormatFloat('0,00', dstJobs.FieldByName('Количество').AsFloat);

Excel.Cells[i+PosInc,5] := dstJobs.FieldByName('Сумма').AsCurrency;

Inc(i);

Sum := Sum + dstJobs.FieldByName('Сумма').AsCurrency;

dstJobs.Next;

end; //while not dstJobs.Eof

Excel.Cells[i+PosInc,5] := Sum;

Excel.Cells[i+PosInc+1,5] := Sum/118*18;

end; //with

Excel.Visible := True;

except

Excel.Quit;

end;

finally

Screen.Cursor := crDefault;

end;

end;

//Формирование счета:

procedure Rep_Bill;

var

WorkbookName: string;

Excel: Variant;

i, PosInc: Integer;

Sum: Currency;

begin

//Шаблон хранится в папке Шаблоны:

WorkbookName := GetCurrentDir + '\Templates\' + 'Счет.xlt';

Excel := CreateOleObject('Excel.Application');

Screen.Cursor := crHourGlass;

try

try

Excel.Workbooks.Open(WorkbookName);

//Экспорт данных из таблицы БД:

with DM do

begin

i := 0;

PosInc := 9;

Excel.Cells[4,2] := FormatFloat('0000', dstOrders.FieldByName('NЗаказа').AsInteger) +

' от ' + dstOrders.FieldByName('ДатаПриема').AsString;

Excel.Cells[6,2] := dstOrders.FieldByName('Клиент').AsString + ', ИНН ' +

DM.tbOrgs.FieldByName('ИНН').AsString + ', КПП ' +

DM.tbOrgs.FieldByName('КПП').AsString;

//Цикл по работам:

dstJobs.First;

Sum := 0;

while not dstJobs.Eof do

begin

//Добавление новой строки для работы:

if i <> 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,1] := i+1;

Excel.Cells[i+PosInc,2] := dstJobs.FieldByName('Работа').AsString;

Excel.Cells[i+PosInc,3] := 'шт';

Excel.Cells[i+PosInc,4] := dstJobs.FieldByName('Количество').AsFloat;

Excel.Cells[i+PosInc,5] := dstJobs.FieldByName('Стоимость').AsCurrency;

Excel.Cells[i+PosInc,6] := dstJobs.FieldByName('Сумма').AsCurrency;

Inc(i);

Sum := Sum + dstJobs.FieldByName('Сумма').AsCurrency;

dstJobs.Next;

end; //while not dstJobs.Eof

//Цикл по МТР:

dstOrderParts.First;

while not dstOrderParts.Eof do

begin

//Добавление новой строки для МТР:

if i <> 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,1] := i+1;

Excel.Cells[i+PosInc,2] := dstOrderParts.FieldByName('Материал').AsString;

Excel.Cells[i+PosInc,3] := tbParts.FieldByName('ЕдИзм').AsString;

Excel.Cells[i+PosInc,4] := dstOrderParts.FieldByName('Количество').AsFloat;

Excel.Cells[i+PosInc,5] := dstOrderParts.FieldByName('Цена').AsCurrency;

Excel.Cells[i+PosInc,6] := dstOrderParts.FieldByName('Сумма').AsCurrency;

Inc(i);

Sum := Sum + dstOrderParts.FieldByName('Сумма').AsCurrency;

dstOrderParts.Next;

end; //while not dstJobs.Eof

Excel.Cells[i+PosInc,6] := Sum;

Excel.Cells[i+PosInc+1,6] := Sum/118*18;

Excel.Cells[i+PosInc+3,2] := SumToTxt(Format('%.2f', [Sum]));

//Вывод реквизитов в шапку:

DM.tbInfo.Open;

Excel.Cells[1,1] := DM.tbInfo.FieldByName('Наименование').AsString + ', ' +

DM.tbInfo.FieldByName('Адрес').AsString + ', ИНН ' +

DM.tbInfo.FieldByName('ИНН').AsString + ', КПП ' +

DM.tbInfo.FieldByName('КПП').AsString;

Excel.Cells[2,1] := DM.tbInfo.FieldByName('Реквизиты').AsString;

Excel.Cells[i+PosInc+5,3] := DM.tbInfo.FieldByName('ГенДиректор').AsString;

DM.tbInfo.Close;

end; //with

Excel.Visible := True;

except

Excel.Quit;

end;

finally

Screen.Cursor := crDefault;

end;

end;

//Формирование счета-фактуры:

procedure Rep_Fact;

var

WorkbookName: string;

Excel: Variant;

i, PosInc: Integer;

Sum: Currency;

begin

//Шаблон хранится в папке Шаблоны:

WorkbookName := GetCurrentDir + '\Templates\' + 'Счет-фактура.xlt';

Excel := CreateOleObject('Excel.Application');

Screen.Cursor := crHourGlass;

try

try

Excel.Workbooks.Open(WorkbookName);

//Экспорт данных из таблицы БД:

with DM do

begin

i := 0;

PosInc := 19;

Excel.Cells[4,2] := FormatFloat('0000', dstOrders.FieldByName('NЗаказа').AsInteger);

Excel.Cells[4,4] := GetRightDate(DM.dstOrders.FieldByName('ДатаПриема').AsDateTime);

Excel.Cells[10,2] := dstOrders.FieldByName('Клиент').AsString + ', ' +

DM.tbOrgs.FieldByName('Адрес').AsString;

Excel.Cells[11,2] := 'С' + FormatFloat('0000', dstOrders.FieldByName('NЗаказа').AsInteger) +

' от ' + dstOrders.FieldByName('ДатаПриема').AsString;

Excel.Cells[12,2] := dstOrders.FieldByName('Клиент').AsString;

Excel.Cells[13,2] := DM.tbOrgs.FieldByName('Адрес').AsString;

Excel.Cells[14,2] := DM.tbOrgs.FieldByName('ИНН').AsString + ' / ' +

DM.tbOrgs.FieldByName('КПП').AsString;

//Цикл по работам:

dstJobs.First;

Sum := 0;

while not dstJobs.Eof do

begin

//Добавление новой строки для работы:

if i <> 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,1] := dstJobs.FieldByName('Работа').AsString;

Excel.Cells[i+PosInc,2] := 'шт';

Excel.Cells[i+PosInc,3] := dstJobs.FieldByName('Количество').AsFloat;

Excel.Cells[i+PosInc,4] := dstJobs.FieldByName('Стоимость').AsCurrency;

Excel.Cells[i+PosInc,5] := dstJobs.FieldByName('Сумма').AsCurrency / 118 * 100;

Excel.Cells[i+PosInc,8] := dstJobs.FieldByName('Сумма').AsCurrency / 118 * 18;

Excel.Cells[i+PosInc,9] := dstJobs.FieldByName('Сумма').AsCurrency;

Inc(i);

Sum := Sum + dstJobs.FieldByName('Сумма').AsCurrency;

dstJobs.Next;

end; //while not dstJobs.Eof

//Цикл по МТР:

dstOrderParts.First;

while not dstOrderParts.Eof do

begin

//Добавление новой строки для продукции:

if i <> 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,1] := dstOrderParts.FieldByName('Материал').AsString;

Excel.Cells[i+PosInc,4] := tbParts.FieldByName('ЕдИзм').AsString;

Excel.Cells[i+PosInc,3] := dstOrderParts.FieldByName('Количество').AsFloat;

Excel.Cells[i+PosInc,4] := dstOrderParts.FieldByName('Цена').AsCurrency / 118 * 100;

Excel.Cells[i+PosInc,5] := dstOrderParts.FieldByName('Сумма').AsCurrency / 118 * 100;

Excel.Cells[i+PosInc,8] := dstOrderParts.FieldByName('Сумма').AsCurrency / 118 * 18;

Excel.Cells[i+PosInc,9] := dstOrderParts.FieldByName('Сумма').AsCurrency;

Inc(i);

Sum := Sum + dstOrderParts.FieldByName('Сумма').AsCurrency;

dstOrderParts.Next;

end; //while not dstJobs.Eof

Excel.Cells[i+PosInc,9] := Sum / 118 * 18;

Excel.Cells[i+PosInc,9] := Sum;

//Вывод реквизитов:

DM.tbInfo.Open;

Excel.Cells[6,2] := DM.tbInfo.FieldByName('Наименование').AsString;

Excel.Cells[7,2] := DM.tbInfo.FieldByName('Адрес').AsString;

Excel.Cells[8,2] := DM.tbInfo.FieldByName('ИНН').AsString + ' / ' +

DM.tbInfo.FieldByName('КПП').AsString;

Excel.Cells[9,3] := DM.tbInfo.FieldByName('Наименование').AsString +

', ' + DM.tbInfo.FieldByName('Адрес').AsString;

Excel.Cells[i+PosInc+3,4] := DM.tbInfo.FieldByName('ГенДиректор').AsString;

Excel.Cells[i+PosInc+3,10] := DM.tbInfo.FieldByName('ГлавБух').AsString;

DM.tbInfo.Close;

end; //with

Excel.Visible := True;

except

Excel.Quit;

end;

finally

Screen.Cursor := crDefault;

end;

end;

//Функция возвращает дату формата "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_Defect;

var

ObjWord: Variant;

begin

ObjWord := CreateOleObject('Word.Application');

Screen.Cursor := crHourGlass;

try

try

ObjWord.Documents.Open(GetCurrentDir + '\Templates\Дефектная ведомость.dot');

ObjWord.Visible := True;

except

ObjWord.Quit;

end;

finally

Screen.Cursor := crDefault;

end;

end;

end.

unit uStatistics;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ComCtrls, StdCtrls, Buttons, DBCtrls, ExtCtrls, TeEngine,

Series, TeeProcs, Chart, DbChart, TeePrevi;

type

TfmStatistics = class(TForm)

PageControl1: TPageControl;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

DBChart2: TDBChart;

TabSheet3: TTabSheet;

DBChart3: TDBChart;

HorizBarSeries1: TBarSeries;

LineSeries1: TBarSeries;

TabSheet4: TTabSheet;

DBChart4: TDBChart;

PieSeries2: TPieSeries;

Panel3: TPanel;

SpeedButton1: TSpeedButton;

SpeedButton2: TSpeedButton;

SpeedButton3: TSpeedButton;

SpeedButton4: TSpeedButton;

Label1: TLabel;

dtpDate1: TDateTimePicker;

Label2: TLabel;

dtpDate2: TDateTimePicker;

BitBtn2: TBitBtn;

bbtExit: TBitBtn;

DBChart1: TDBChart;

PieSeries1: TPieSeries;

procedure dtpDate1Change(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure bbtExitClick(Sender: TObject);

procedure SpeedButton1Click(Sender: TObject);

procedure SpeedButton4Click(Sender: TObject);

procedure SpeedButton3Click(Sender: TObject);

procedure SpeedButton2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

fmStatistics: TfmStatistics;

implementation

uses uDM, uRep;

{$R *.dfm}

procedure TfmStatistics.dtpDate1Change(Sender: TObject);

begin

//В зависимости от активной закладки запускается обработчик соответствующей кнопки:

case PageControl1.ActivePageIndex of

0: SpeedButton1Click(Self);

1: SpeedButton2Click(Self);

2: SpeedButton3Click(Self);

3: SpeedButton4Click(Self);

end;

end;

procedure TfmStatistics.FormCreate(Sender: TObject);

begin

dtpDate1.Date := Date;

dtpDate2.Date := Date;

SpeedButton1.Caption := 'Потребность в МТР' + Chr(13) + 'за период';

SpeedButton2.Caption := 'Статистика расхода МТР за период';

SpeedButton4.Caption := 'Суммы работ по' + Chr(13) + 'клиентам за период';

SpeedButton1.Down := True;

SpeedButton1Click(Self);

end;

procedure TfmStatistics.BitBtn2Click(Sender: TObject);

begin

//В зависимости от активной закладки выводится в режим просмотра перед печатью

//выбранная диаграмма:

if PageControl1.ActivePageIndex = 0 then

ChartPreview(Self, DBChart1)

else if PageControl1.ActivePageIndex = 1 then

ChartPreview(Self, DBChart2)

else if PageControl1.ActivePageIndex = 2 then

ChartPreview(Self, DBChart3)

else if PageControl1.ActivePageIndex = 3 then

ChartPreview(Self, DBChart4);

end;

procedure TfmStatistics.bbtExitClick(Sender: TObject);

begin

Close;

end;

//Формирование диаграммы "Потребность МТР за период":

procedure TfmStatistics.SpeedButton1Click(Sender: TObject);

begin

PageControl1.ActivePageIndex := 0;

DM.dstStatPartsCateg.Close;

DM.dstStatPartsCateg.Parameters.ParamByName('pDate1').Value := dtpDate1.Date;

DM.dstStatPartsCateg.Parameters.ParamByName('pDate2').Value := dtpDate2.Date;

DM.dstStatPartsCateg.Parameters.ParamByName('pDate11').Value := dtpDate1.Date;

DM.dstStatPartsCateg.Parameters.ParamByName('pDate22').Value := dtpDate2.Date;

DM.dstStatPartsCateg.Open;

DBChart1.Title.Text.Strings[0] := 'Потребность в МТР c ' +

DateToStr(dtpDate1.Date) + ' по ' + DateToStr(dtpDate2.Date);

end;

//Формирование диаграммы "Статистика расхода МТР за период":

procedure TfmStatistics.SpeedButton2Click(Sender: TObject);

begin

PageControl1.ActivePageIndex := 1;

DM.dstStatPartsSum.Close;

DM.dstStatPartsSum.Parameters.ParamByName('pDate1').Value := dtpDate1.Date;

DM.dstStatPartsSum.Parameters.ParamByName('pDate2').Value := dtpDate2.Date;

DM.dstStatPartsSum.Open;

DBChart2.Title.Text.Strings[0] := 'Статистика расхода МТР c ' +

DateToStr(dtpDate1.Date) + ' по ' + DateToStr(dtpDate2.Date);

end;

//Формирование диаграммы "Суммы работ за период":

procedure TfmStatistics.SpeedButton3Click(Sender: TObject);

begin

PageControl1.ActivePageIndex := 2;

DM.dstStatOrderSum.Close;

DM.dstStatOrderSum.Parameters.ParamByName('pDate1').Value := dtpDate1.Date;

DM.dstStatOrderSum.Parameters.ParamByName('pDate2').Value := dtpDate2.Date;

DM.dstStatOrderSum.Parameters.ParamByName('pDate11').Value := dtpDate1.Date;

DM.dstStatOrderSum.Parameters.ParamByName('pDate22').Value := dtpDate2.Date;

DM.dstStatOrderSum.Open;

DBChart3.Title.Text.Strings[0] := 'Суммы работ c ' +

DateToStr(dtpDate1.Date) + ' по ' + DateToStr(dtpDate2.Date);

end;

//Формирование диаграммы "Суммы работ по клиентам за период":

procedure TfmStatistics.SpeedButton4Click(Sender: TObject);

begin

PageControl1.ActivePageIndex := 3;

DM.dstStatClientSum.Close;

DM.dstStatClientSum.Parameters.ParamByName('pDate1').Value := dtpDate1.Date;

DM.dstStatClientSum.Parameters.ParamByName('pDate2').Value := dtpDate2.Date;

DM.dstStatClientSum.Parameters.ParamByName('pDate11').Value := dtpDate1.Date;

DM.dstStatClientSum.Parameters.ParamByName('pDate22').Value := dtpDate2.Date;

DM.dstStatClientSum.Open;

DBChart4.Title.Text.Strings[0] := 'Суммы работ по клиентам c ' +

DateToStr(dtpDate1.Date) + ' по ' + DateToStr(dtpDate2.Date);

end;

end.

unit uStr;

//Модуль для перевода числового представления суммы в строковое

interface

uses

SysUtils, StrUtils;

function SumToTxt(Value: String) : string; //Функция для перевода (аргумент - строка, содержащая сумму)

implementation

const a:array[0..8,0..9] of string=(

('','один ','два ','три ','четыре ','пять ','шесть ','семь ','восемь ','девять '),

('','','двадцать ','тридцать ','сорок ','пятьдесят ','шестьдесят ','семьдесят ','восемьдесят ','девяносто '),

('','сто ','двести ','триста ','четыреста ','пятьсот ','шестьсот ','семьсот ','восемьсот ','девятьсот '),

('тысяч ','тысяча ','две тысячи ','три тысячи ','четыре тысячи ','пять тысяч ','шесть тысяч ','семь тысяч ',

'восемь тысяч ','девять тысяч '),

('','','двадцать ','тридцать ','сорок ','пятьдесят ','шестьдесят ','семьдесят ','восемьдесят ','девяносто '),

('','сто ','двести ','триста ','четыреста ','пятьсот ','шестьсот ','семьсот ','восемьсот ','девятьсот '),

('миллионов ','один миллион ','два миллиона ','три миллиона ','четыре миллиона ','пять миллионов ',

'шесть миллионов ','семь миллионов ','восемь миллионов ','девять миллионов '),

('','','двадцать ','тридцать ','сорок ','пятьдесят ','шестьдесят ','семьдесят ','восемьдесят ','девяносто '),

('','сто ','двести ','триста ','четыреста ','пятьсот ','шестьсот ','семьсот ','восемьсот ','девятьсот '));

b:array[0..9] of string=

('десять ','одинадцать ','двенадцать ','тринадцать ','четырнадцать ','пятьнадцать ','шестьнадцать ',

'семьнадцать ','восемьнадцать ','девятьнадцать ');

function SumToStrin(Value : String) : string;

var s,t:string;

p,pp,i,k:integer;

begin

s:=value;

if s='0' then

t:='Ноль '

else begin

p:=length(s);

pp:=p;

if p>1 then

if (s[p-1]='1') and (s[p]>'0') then begin

t:=b[strtoint(s[p])];

pp:=pp-2;

end;

i:=pp;

while i>0 do begin

if (i=p-3) and (p>4) then

if s[p-4]='1' then begin

t:=b[strtoint(s[p-3])]+'тысяч '+t;

i:=i-2;

end;

if (i=p-6) and (p>7) then

if s[p-7]='1' then begin

t:=b[strtoint(s[p-6])]+'миллионов '+t;

i:=i-2;

end;

if i>0 then begin

k:=strtoint(s[i]);

t:=a[p-i,k]+t;

i:=i-1;

end;

end;

end;

Result := t;

end;

//Разделяет сумму на рубли и копейки:

procedure get2str(value:string;var hi,lo:string);

var p:integer;

begin

p:=pos(',',value);

lo:='';hi:='';

if p=0 then

p:=pos('.',value);

if p<>0 then

delete(value,p,1);

if p=0 then begin

hi:=value;

lo:='00';

end;

if p>length(value) then begin

hi:=value;

lo:='00';

end;

if p=1 then begin

hi:='0';

lo:=value;

end;

if (p>1) and (p<length(value)) then begin

hi:=copy(value,1,p-1);

lo:=copy(value,p,length(value));

end;

end;

function SumToTxt(value: string):string;

var hi,lo:string;

pr,er:integer;

begin

get2str(value,hi,lo);

if (hi='') or (lo='') then begin

result:='';exit;

end;

val(hi,pr,er);if er<>0 then begin

result:='';

exit;

end;

hi:=sumtostrin(inttostr(pr))+'руб. ';

if lo<>'00' then begin

val(lo,pr,er);

if er<>0 then begin

result:='';

exit;

end;

lo:=inttostr(pr);

end;

lo:=lo+' коп. ';

hi[1]:=AnsiUpperCase(hi[1])[1];

result:=hi+lo;

end;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]