Автоматизированная информационная система учета офисной техники

Предпроектный анализ вопросов создания автоматизированной информационной системы. Проблемы представления и хранения данных. Существующие системы автоматизации учета офисной техники. Характеристика нормативно-справочной и входной оперативной информации.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 06.06.2016
Размер файла 1,8 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

11. Кузнецов С.Д. Основы баз данных. 2-е изд. М.: Интернет-Университет Информационных Технологий; БИНОМ. Лаборатория знаний, 2007. 484 с.

12. Липаев В.В Управление разработкой программных средств. Методы, стандарты, технология. - М.: Финансы и статистика, 2006.

13. Кауфельд Д. Microsoft Office Access 2003 для «чайников»: Пер. с англ. - М.: «Диалектика», 2006. 320 стр. с ил.

14. Когаловский М.Р. Энциклопедия технологий баз данных. - М.: Финансы и статистика, 2002.

15. Принципы проектирования и разработки программного обеспечения. Учебный курс MCSD. М.: Русская редакция, 2000.

16. СанПиН 2.2.2/2.4.1340-03. Санитарно-эпидемиологические правила и нормативы. Гигиенические требования к персональным электронно-вычислительным машинам и организации работы. - М: Издательство стандартов, 2003.

Приложение 1

Текст программы

program Office;

uses

Forms,

uMain in 'uMain.pas' {fmMain},

uDevisions in 'uDevisions.pas' {fmDevisions},

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

uStaff in 'uStaff.pas' {fmStaff},

uReceipt in 'uReceipt.pas' {fmReceipt},

uParams in 'uParams.pas' {fmParams},

uDocs in 'uDocs.pas',

uProducers in 'uProducers.pas' {fmProducers},

uState in 'uState.pas' {fmState},

uOrders in 'uOrders.pas' {fmOrders},

uEquipment in 'uEquipment.pas' {fmEquipment},

uHistoryEquip in 'uHistoryEquip.pas' {fmHistoryEquip},

uHistoryDesk in 'uHistoryDesk.pas' {fmHistoryDesk};

{$R *.res}

begin

Application.Initialize;

Application.CreateForm(TfmMain, fmMain);

Application.CreateForm(TfmDevisions, fmDevisions);

Application.CreateForm(TDM, DM);

Application.CreateForm(TfmStaff, fmStaff);

Application.CreateForm(TfmReceipt, fmReceipt);

Application.CreateForm(TfmParams, fmParams);

Application.CreateForm(TfmProducers, fmProducers);

Application.CreateForm(TfmState, fmState);

Application.CreateForm(TfmOrders, fmOrders);

Application.CreateForm(TfmEquipment, fmEquipment);

Application.CreateForm(TfmHistoryEquip, fmHistoryEquip);

Application.CreateForm(TfmHistoryDesk, fmHistoryDesk);

Application.Run;

end.

unit uDevisions;

interface

uses

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

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

type

TfmDevisions = class(TForm)

Panel1: TPanel;

DBGrid1: TDBGrid;

DBGrid2: TDBGrid;

Splitter1: TSplitter;

bbtFirst: TBitBtn;

bbtPrior: TBitBtn;

bbtNext: TBitBtn;

bbtLast: TBitBtn;

bbtInsert: TBitBtn;

bbtDelete: TBitBtn;

bbtPost: TBitBtn;

bbtExit: TBitBtn;

procedure FormShow(Sender: TObject);

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

procedure DBGrid1Exit(Sender: TObject);

procedure DBGrid2Exit(Sender: TObject);

procedure bbtFirstClick(Sender: TObject);

procedure bbtPriorClick(Sender: TObject);

procedure bbtNextClick(Sender: TObject);

procedure bbtLastClick(Sender: TObject);

procedure bbtInsertClick(Sender: TObject);

procedure bbtDeleteClick(Sender: TObject);

procedure bbtPostClick(Sender: TObject);

procedure bbtExitClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

fmDevisions: TfmDevisions;

implementation

uses uDM, DB;

var

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

{$R *.dfm}

procedure TfmDevisions.FormShow(Sender: TObject);

begin

DM.dstDevisions.Open;

DM.dstDesks.Open;

DM.dstDevisions.Sort := 'Наименование';

end;

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

begin

DM.dstDesks.Close;

DM.dstDevisions.Close;

end;

procedure TfmDevisions.DBGrid1Exit(Sender: TObject);

begin

GridID := 1;

end;

procedure TfmDevisions.DBGrid2Exit(Sender: TObject);

begin

GridID := 2;

end;

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

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

//удаление или редактирование:

procedure TfmDevisions.bbtFirstClick(Sender: TObject);

begin

case GridID of

1: DM.dstDevisions.First;

2: DM.dstDesks.First;

end;

end;

procedure TfmDevisions.bbtPriorClick(Sender: TObject);

begin

case GridID of

1: DM.dstDevisions.Prior;

2: DM.dstDesks.Prior;

end;

end;

procedure TfmDevisions.bbtNextClick(Sender: TObject);

begin

case GridID of

1: DM.dstDevisions.Next;

2: DM.dstDesks.Next;

end;

end;

procedure TfmDevisions.bbtLastClick(Sender: TObject);

begin

case GridID of

1: DM.dstDevisions.Last;

2: DM.dstDesks.Last;

end;

end;

procedure TfmDevisions.bbtInsertClick(Sender: TObject);

begin

case GridID of

1: DM.dstDevisions.Insert;

2: DM.dstDesks.Insert;

end;

end;

procedure TfmDevisions.bbtDeleteClick(Sender: TObject);

begin

case GridID of

1: if DM.dstDevisions.RecordCount > 0 then

DM.dstDevisions.Delete;

2: if DM.dstDesks.RecordCount > 0 then

DM.dstDesks.Delete;

end;

end;

procedure TfmDevisions.bbtPostClick(Sender: TObject);

begin

case GridID of

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

DM.dstDevisions.Post;

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

DM.dstDesks.Post;

end;

end;

procedure TfmDevisions.bbtExitClick(Sender: TObject);

begin

Close;

end;

end.

unit uDM;

interface

uses

SysUtils, Classes, DB, ADODB;

type

TDM = class(TDataModule)

ADOConnection1: TADOConnection;

dstTypes: TADODataSet;

dsTypes: TDataSource;

dstParams: TADODataSet;

dsParams: TDataSource;

dstDevisions: TADODataSet;

dsDevisions: TDataSource;

dstStaff: TADODataSet;

dsStaff: TDataSource;

dstDesks: TADODataSet;

dsDesks: TDataSource;

dstDesksID: TAutoIncField;

dstDesksID2: TIntegerField;

dstDesksDSDesigner: TWideStringField;

dstModels: TADODataSet;

dsModels: TDataSource;

dstModelPar: TADODataSet;

dsModelPar: TDataSource;

dstModelParID: TIntegerField;

dstModelParID2: TIntegerField;

dstModelParDSDesigner: TWideStringField;

dstModelParField: TStringField;

dstEquipment2: TADODataSet;

dsEquipment2: TDataSource;

dstEquipment2ID: TIntegerField;

dstEquipment2N2: TWideStringField;

dstEquipment2DSDesigner: TDateTimeField;

dstEquipment: TADODataSet;

dsEquipment: TDataSource;

dstEquipmentDSDesigner: TWideStringField;

qrMoveEquipment: TADOQuery;

dstDevisionsID: TAutoIncField;

dstDevisionsDSDesigner: TWideStringField;

dstEquipSearch: TADODataSet;

dstHistoryMove: TADODataSet;

dsHistoryMove: TDataSource;

dstHistoryEquip: TADODataSet;

dsHistoryEquip: TDataSource;

dstHistoryEquipID: TAutoIncField;

dstHistoryEquipDSDesigner: TDateTimeField;

dstHistoryEquipDSDesigner2: TWideStringField;

dstHistoryEquipID2: TIntegerField;

dstHistoryEquipDSDesigner3: TWideStringField;

dstHistoryEquipField: TStringField;

dstHistoryDesk: TADODataSet;

dsHistoryDesk: TDataSource;

dstHistoryDeskID: TAutoIncField;

dstHistoryDeskID2: TIntegerField;

dstHistoryDeskDSDesigner: TDateTimeField;

dstHistoryDeskDSDesigner2: TWideStringField;

dstHistoryDeskID3: TIntegerField;

dstHistoryDeskDSDesigner3: TWideStringField;

dstHistoryDeskStringField: TStringField;

dstReceipt: TADODataSet;

dsReceipt: TDataSource;

dstReceiptDSDesigner: TAutoIncField;

dstReceiptID2: TIntegerField;

dstReceiptDSDesigner7: TWideStringField;

dstReceiptDSDesigner8: TDateTimeField;

dstReceiptField2: TStringField;

dstEquipment2ID2: TIntegerField;

dstEquipment2Field: TIntegerField;

dstEquipmentDSDesigner4: TDateTimeField;

dstProducers: TADODataSet;

dsProducers: TDataSource;

dstModelsID: TAutoIncField;

dstModelsID2: TIntegerField;

dstModelsDSDesigner: TWideStringField;

dstDesksDSDesigner5: TWideStringField;

dstDesksDSDesigner6: TWideStringField;

dstEquipment2N: TAutoIncField;

dstEquipment2DSDesigner3: TDateTimeField;

dstEquipmentN: TIntegerField;

dstEquipmentDSDesigner5: TDateTimeField;

dstHistoryEquipN: TIntegerField;

dstState: TADODataSet;

dstStateID: TAutoIncField;

dsState: TDataSource;

dstReasons: TADODataSet;

dstReasonsID: TAutoIncField;

dsReasons: TDataSource;

dstOrders: TADODataSet;

dstOrdersID: TAutoIncField;

dstOrdersID5: TIntegerField;

dstOrdersDSDesigner2: TWideStringField;

dstOrdersDSDesigner3: TWideStringField;

dstOrdersField: TStringField;

dstOrdersField4: TStringField;

dstOrdersField2: TStringField;

dsOrders: TDataSource;

dstOrdersDSDesigner: TDateTimeField;

dstOrdersID7: TIntegerField;

dstOrdersDSDesigner4: TDateTimeField;

dstOrdersDSDesigner5: TDateTimeField;

dstOrdersField3: TStringField;

dstOrdersFromDesk: TADODataSet;

AutoIncField2: TAutoIncField;

DateTimeField1: TDateTimeField;

IntegerField3: TIntegerField;

IntegerField4: TIntegerField;

WideStringField3: TWideStringField;

WideStringField4: TWideStringField;

StringField1: TStringField;

StringField2: TStringField;

StringField3: TStringField;

IntegerField5: TIntegerField;

DateTimeField2: TDateTimeField;

DateTimeField3: TDateTimeField;

dsOrdersFromDesk: TDataSource;

dstReasonsDSDesigner: TWideStringField;

dstOrdersFromDeskID: TIntegerField;

dstStateDSDesigner: TWideStringField;

dstOrdersID2: TIntegerField;

dstOrdersID4: TIntegerField;

dstModelsID3: TIntegerField;

dstModelsDSDesigner2: TWideStringField;

dstModelsField: TStringField;

dstEquipment2DSDesigner2: TBooleanField;

dstEquipmentDSDesigner2: TDateTimeField;

dstHistoryMoveDSDesigner: TDateTimeField;

dstHistoryMoveDSDesigner2: TWideStringField;

dstHistoryMoveDSDesigner3: TWideStringField;

dstHistoryMoveN: TIntegerField;

dstEquipment3: TADODataSet;

AutoIncField3: TAutoIncField;

IntegerField2: TIntegerField;

WideStringField2: TWideStringField;

DateTimeField4: TDateTimeField;

IntegerField6: TIntegerField;

IntegerField7: TIntegerField;

DateTimeField5: TDateTimeField;

BooleanField1: TBooleanField;

dstEquipment4: TADODataSet;

dstEquipment4DSDesigner: TWideStringField;

dstEquipment4N: TAutoIncField;

dstEquipment4N2: TWideStringField;

dstEquipment4DSDesigner2: TDateTimeField;

dstEquipment4DSDesigner3: TDateTimeField;

dstOldDevices: TADODataSet;

WideStringField5: TWideStringField;

AutoIncField4: TAutoIncField;

WideStringField6: TWideStringField;

DateTimeField6: TDateTimeField;

DateTimeField7: TDateTimeField;

procedure DataModuleDestroy(Sender: TObject);

procedure dstEquipment2BeforeDelete(DataSet: TDataSet);

procedure dstDevisionsBeforeDelete(DataSet: TDataSet);

procedure dstEquipment2AfterPost(DataSet: TDataSet);

procedure dstEquipment2BeforePost(DataSet: TDataSet);

procedure dstAllDevicesCalcFields(DataSet: TDataSet);

procedure dstOrdersFromDeskBeforePost(DataSet: TDataSet);

procedure dstDesksBeforeEdit(DataSet: TDataSet);

private

{ Private declarations }

public

{ Public declarations }

end;

var

DM: TDM;

implementation

uses

Forms, Windows, uMain, ComCtrls;

var

InsertedRec: Boolean;

{$R *.dfm}

procedure TDM.DataModuleDestroy(Sender: TObject);

begin

ADOConnection1.Close;

end;

procedure TDM.dstEquipment2BeforeDelete(DataSet: TDataSet);

begin

Application.MessageBox('Технику удалять нельзя (подлежит списанию)!',

'Информация', MB_OK+MB_ICONEXCLAMATION);

Abort;

end;

//В раб. место "Временное хранение" помещается вся поступившая техника, поэтому

//удалять его нельзя:

procedure TDM.dstDevisionsBeforeDelete(DataSet: TDataSet);

begin

if DataSet.FieldByName('Наименование').AsString = '=Временное хранение' then

begin

Application.MessageBox('Подразделение и рабочее место "Временное хранение" удалять нельзя!',

'Информация', MB_OK+MB_ICONEXCLAMATION);

Abort;

end;

end;

//Регистрация устройства на складе при его заведении:

procedure TDM.dstEquipment2AfterPost(DataSet: TDataSet);

begin

if InsertedRec then

begin

dstDevisions.Open;

dstDesks.Open;

if dstDevisions.Locate('Наименование', '=Временное хранение', []) then

if dstDesks.RecordCount <=0 then

Application.MessageBox(PChar('Невозможно зарегистрировать технику на складе!' +

Chr(13) + 'Отсутствует рабочее место "=Временное хранение".'), 'Ошибка', MB_OK+MB_ICONERROR)

else

begin

DM.qrMoveEquipment.Parameters.ParamByName('pRM').Value :=

dstDesks.FieldbyName('ID').AsInteger;

DM.qrMoveEquipment.Parameters.ParamByName('pInvN').Value :=

DataSet.FieldByName('ИнвN').AsInteger;

DM.qrMoveEquipment.Parameters.ParamByName('pDate').Value :=

DataSet.FieldByName('Дата').AsDateTime;

qrMoveEquipment.ExecSQL;

end;

dstDesks.Close;

dstDevisions.Close;

InsertedRec := False;

end;

end;

procedure TDM.dstEquipment2BeforePost(DataSet: TDataSet);

begin

InsertedRec := False;

if DataSet.State = dsInsert then

//Проверка введенных данных:

if DataSet.FieldByName('Дата').IsNull then

begin

Application.MessageBox('Необходимо заполнить поле даты!', 'Ошибка', MB_OK+MB_ICONERROR);

Abort;

end

else

if DataSet.FieldByName('ПриходID').IsNull then

begin

Application.MessageBox('Необходимо заполнить поле № прихода!', 'Ошибка', MB_OK+MB_ICONERROR);

Abort;

end

else

InsertedRec := True; //Установка флага, что добавлен новый экземпляр техники

end;

//Определение, подлежит ли устройство списанию:

procedure TDM.dstAllDevicesCalcFields(DataSet: TDataSet);

begin

DataSet.FieldByName('КСписанию').AsBoolean :=

DataSet.FieldByName('ДатаСписания').AsDateTime <= Date;

end;

//Перед сохранением новой записи о заявке либо об обслуживании раб. места

//записывается идентификатор раб. места:

procedure TDM.dstOrdersFromDeskBeforePost(DataSet: TDataSet);

begin

if DataSet.State = dsInsert then

DataSet.FieldByName('РабМестоID').AsInteger := Integer(fmMain.TreeView1.Selected.Data);

end;

procedure TDM.dstDesksBeforeEdit(DataSet: TDataSet);

begin

if DataSet.FieldByName('Наименование').AsString = '=Временное хранение' then

begin

Application.MessageBox('Подразделение и рабочее место "Временное хранение" редактировать нельзя!',

'Информация', MB_OK+MB_ICONEXCLAMATION);

Abort;

end;

end;

end.

unit uDocs;

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

interface

uses

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

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

procedure Rep_Card(DeviceID: Integer);

procedure Rep_Desks;

procedure Rep_Inventlist;

procedure Rep_Old;

procedure Rep_OldUsed;

implementation

uses

uDM, DateUtils, Dialogs;

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

procedure Rep_Desks;

var

WorkbookName: string;

Excel: Variant;

i, PosInc: Integer;

begin

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

WorkbookName := GetCurrentDir + '\Docs\' + 'Рабочие места.xlt';

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

Screen.Cursor := crHourGlass;

try

try

Excel.Workbooks.Open(WorkbookName);

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

with DM do

begin

dstDevisions.Open;

dstDesks.Open;

dstDevisions.First;

i := 0;

PosInc := 5;

//Цикл по подразделениям:

while not dstDevisions.Eof do

begin

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

Inc(i);

//Добавление шапки:

if i <> 1 then

begin

Excel.Rows.Item[6].Select;

Excel.Selection.Copy;

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

Excel.ActiveSheet.Paste;

Excel.Application.CutCopyMode := False;

end;

Inc(i);

dstDesks.First;

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

while not dstDesks.Eof do

begin

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

if i <> 2 then

begin

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

Excel.Selection.Insert;

Excel.Rows.Item[7].Select;

Excel.Selection.Copy;

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

Excel.ActiveSheet.Paste;

Excel.Application.CutCopyMode := False;

end;

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

Excel.Cells[i+PosInc,2] := dstDesks.FieldByName('Описание').AsString;

Excel.Cells[i+PosInc,3] := dstDesks.FieldByName('Телефон').AsString;

Inc(i);

dstDesks.Next;

end; //while not dstDesks.Eof

dstDevisions.Next;

Inc(i);

end; //while not dstDevisions.Eof

dstDesks.Close;

dstDevisions.Close;

end; //with

Excel.Visible := True;

except

Excel.Quit;

end;

finally

Screen.Cursor := crDefault;

end;

end;

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

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

procedure Rep_Any(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;

Excel.Cells[5,i+1].Borders[7].LineStyle := 1;

Excel.Cells[5,i+1].Borders[8].LineStyle := 1;

Excel.Cells[5,i+1].Borders[9].LineStyle := 1;

Excel.Cells[5,i+1].Borders[10].LineStyle := 1;

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] := FieldByName(ADBGrid.Columns[j].FieldName).AsString;

Excel.Cells[i,j+1].Borders[7].LineStyle := 1;

Excel.Cells[i,j+1].Borders[8].LineStyle := 1;

Excel.Cells[i,j+1].Borders[9].LineStyle := 1;

Excel.Cells[i,j+1].Borders[10].LineStyle := 1;

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_Inventlist;

var

WorkbookName: string;

Excel: Variant;

i, PosInc: Integer;

begin

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

WorkbookName := GetCurrentDir + '\Docs\' + 'Инвентарный лист.xlt';

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

Screen.Cursor := crHourGlass;

try

try

Excel.Workbooks.Open(WorkbookName);

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

with DM do

begin

i := 0;

PosInc := 6;

dstEquipment4.Parameters.ParamByName('pIsOld').DataType := ftBoolean;

dstEquipment4.Parameters.ParamByName('pIsOld').Value := False;

dstEquipment4.Open;

dstEquipment4.First;

//Цикл по технике:

while not dstEquipment4.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] := FormatFloat('СУ0000', dstEquipment4.FieldByName('ИнвN').AsInteger);

Excel.Cells[i+PosInc,2] := dstEquipment4.FieldByName('СерийныйN').AsString;

Excel.Cells[i+PosInc,3] := dstEquipment4.FieldByName('Устройство').AsString;

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

Excel.Cells[i+PosInc,5] := dstEquipment4.FieldByName('ДатаСписания').AsFloat;

Inc(i);

dstEquipment4.Next;

end; //while not dstEquipment4.Eof

dstEquipment4.Close;

end; //with

Excel.Visible := True;

except

Excel.Quit;

end;

finally

Screen.Cursor := crDefault;

end;

end;

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

procedure Rep_Old;

var

WorkbookName: string;

Excel: Variant;

i, PosInc: Integer;

begin

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

WorkbookName := GetCurrentDir + '\Docs\' + 'Инвентарный лист.xlt';

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

Screen.Cursor := crHourGlass;

try

try

Excel.Workbooks.Open(WorkbookName);

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

with DM do

begin

Excel.Cells[3,1] := 'Списанная техника';

i := 0;

PosInc := 6;

dstEquipment4.Parameters.ParamByName('pIsOld').DataType := ftBoolean;

dstEquipment4.Parameters.ParamByName('pIsOld').Value := True;

dstEquipment4.Open;

dstEquipment4.First;

//Цикл по технике:

while not dstEquipment4.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] := FormatFloat('СУ0000', dstEquipment4.FieldByName('ИнвN').AsInteger);

Excel.Cells[i+PosInc,2] := dstEquipment4.FieldByName('СерийныйN').AsString;

Excel.Cells[i+PosInc,3] := dstEquipment4.FieldByName('Устройство').AsString;

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

Excel.Cells[i+PosInc,5] := dstEquipment4.FieldByName('ДатаСписания').AsFloat;

Inc(i);

dstEquipment4.Next;

end; //while not dstEquipment4.Eof

dstEquipment4.Close;

end; //with

Excel.Visible := True;

except

Excel.Quit;

end;

finally

Screen.Cursor := crDefault;

end;

end;

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

procedure Rep_OldUsed;

var

WorkbookName: string;

Excel: Variant;

i, PosInc: Integer;

begin

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

WorkbookName := GetCurrentDir + '\Docs\' + 'Инвентарный лист.xlt';

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

Screen.Cursor := crHourGlass;

try

try

Excel.Workbooks.Open(WorkbookName);

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

with DM do

begin

Excel.Cells[3,1] := 'Техника, подлежащая списанию';

i := 0;

PosInc := 6;

dstOldDevices.Open;

dstOldDevices.First;

//Цикл по технике:

while not dstOldDevices.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] := FormatFloat('СУ0000', dstOldDevices.FieldByName('ИнвN').AsInteger);

Excel.Cells[i+PosInc,2] := dstOldDevices.FieldByName('СерийныйN').AsString;

Excel.Cells[i+PosInc,3] := dstOldDevices.FieldByName('Устройство').AsString;

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

Excel.Cells[i+PosInc,5] := dstOldDevices.FieldByName('ДатаСписания').AsFloat;

Inc(i);

dstOldDevices.Next;

end; //while not dstEquipment4.Eof

dstOldDevices.Close;

end; //with

Excel.Visible := True;

except

Excel.Quit;

end;

finally

Screen.Cursor := crDefault;

end;

end;

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

procedure Rep_Card(DeviceID: Integer);

var

Excel: Variant;

WorkbookName: string;

begin

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

WorkbookName := GetCurrentDir + '\Docs\' + 'Карточка.xlt';

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

try

try

Excel.Workbooks.Open(WorkbookName);

with DM do

begin

dstEquipment3.Open;

dstEquipment3.Locate('ИнвN', DeviceID, []);

Excel.Cells[5,2] := FormatFloat('СУ0000', dstEquipment3.FieldByName('ИнвN').AsInteger);

Excel.Cells[6,2] := dstEquipment3.FieldByName('СерийныйN').AsString;

Excel.Cells[7,2] := dstEquipment3.FieldByName('Дата').AsString;

Excel.Cells[8,2] := FormatFloat('П0000', dstEquipment3.FieldByName('Приход').AsInteger);

Excel.Cells[9,2] := dstEquipment3.FieldByName('ДатаСписания').AsString;

Excel.Cells[10,2] := dstEquipment3.FieldByName('Списано').AsString;

Excel.Cells[11,2] := dstEquipment3.FieldByName('Списано').AsString;

dstEquipment3.Close;

end; //with

Excel.Application.EnableEvents := True;

Excel.Visible := True;

except

Excel.Quit;

end;

finally

Screen.Cursor := crDefault;

end;

end;

end.

unit uEquipment;

interface

uses

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

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

type

TfmEquipment = class(TForm)

Panel2: TPanel;

Splitter1: TSplitter;

Panel3: TPanel;

DBGrid2: TDBGrid;

DBGrid3: TDBGrid;

Splitter2: TSplitter;

bbtParam: TBitBtn;

bbtProducers: TBitBtn;

Panel1: TPanel;

DBGrid1: TDBGrid;

DBGrid4: TDBGrid;

Splitter3: TSplitter;

bbtFirst: TBitBtn;

bbtPrior: TBitBtn;

bbtNext: TBitBtn;

bbtLast: TBitBtn;

bbtInsert: TBitBtn;

bbtDelete: TBitBtn;

bbtPost: TBitBtn;

BitBtn2: TBitBtn;

BitBtn3: TBitBtn;

procedure FormShow(Sender: TObject);

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

procedure DBGrid3DrawColumnCell(Sender: TObject; const Rect: TRect;

DataCol: Integer; Column: TColumn; State: TGridDrawState);

procedure DBGrid4Exit(Sender: TObject);

procedure DBGrid1Exit(Sender: TObject);

procedure DBGrid2Exit(Sender: TObject);

procedure DBGrid3Exit(Sender: TObject);

procedure bbtFirstClick(Sender: TObject);

procedure bbtPriorClick(Sender: TObject);

procedure bbtNextClick(Sender: TObject);

procedure bbtLastClick(Sender: TObject);

procedure bbtInsertClick(Sender: TObject);

procedure bbtDeleteClick(Sender: TObject);

procedure bbtPostClick(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

fmEquipment: TfmEquipment;

implementation

uses uDM, DB, DateUtils, uMain, uDocs, uParams;

var

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

{$R *.dfm}

procedure TfmEquipment.FormShow(Sender: TObject);

begin

DM.dstTypes.Open;

DM.dstTypes.Sort := 'Наименование';

DM.dstModels.Open;

DM.dstModels.Sort := 'ТипID, Наименование';

DM.dstModelPar.Open;

DM.dstEquipment2.Open;

end;

procedure TfmEquipment.FormClose(Sender: TObject;

var Action: TCloseAction);

begin

DM.dstEquipment2.Close;

DM.dstModelPar.Close;

DM.dstModels.Close;

DM.dstTypes.Close;

end;

//Красным выделяются модели, подлежащие списанию, серым - списанные:

procedure TfmEquipment.DBGrid3DrawColumnCell(Sender: TObject;

const Rect: TRect; DataCol: Integer; Column: TColumn;

State: TGridDrawState);

begin

if DM.dstEquipment2.RecordCount > 0 then

if DM.dstEquipment2.FieldByName('ДатаСписания').AsDateTime < Date then

if DM.dstEquipment2.FieldByName('Списано').AsBoolean then

DBGrid3.Canvas.Brush.Color := clSilver

else

DBGrid3.Canvas.Brush.Color := clRed;

DBGrid3.DefaultDrawColumnCell(Rect, DataCol, Column, State);

end;

procedure TfmEquipment.DBGrid4Exit(Sender: TObject);

begin

GridID := 4;

end;

procedure TfmEquipment.DBGrid1Exit(Sender: TObject);

begin

GridID := 1;

end;

procedure TfmEquipment.DBGrid2Exit(Sender: TObject);

begin

GridID := 2;

end;

procedure TfmEquipment.DBGrid3Exit(Sender: TObject);

begin

GridID := 3;

end;

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

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

//удаление или редактирование:

procedure TfmEquipment.bbtFirstClick(Sender: TObject);

begin

case GridID of

1: DM.dstModels.First;

2: DM.dstModelPar.First;

3: DM.dstEquipment2.First;

4: DM.dstTypes.First;

end;

end;

procedure TfmEquipment.bbtPriorClick(Sender: TObject);

begin

case GridID of

1: DM.dstModels.Prior;

2: DM.dstModelPar.Prior;

3: DM.dstEquipment2.Prior;

4: DM.dstTypes.Prior;

end;

end;

procedure TfmEquipment.bbtNextClick(Sender: TObject);

begin

case GridID of

1: DM.dstModels.Next;

2: DM.dstModelPar.Next;

3: DM.dstEquipment2.Next;

4: DM.dstTypes.Next;

end;

end;

procedure TfmEquipment.bbtLastClick(Sender: TObject);

begin

case GridID of

1: DM.dstModels.Last;

2: DM.dstModelPar.Last;

3: DM.dstEquipment2.Last;

4: DM.dstTypes.Last;

end;

end;

procedure TfmEquipment.bbtInsertClick(Sender: TObject);

begin

case GridID of

1: DM.dstModels.Insert;

2: DM.dstModelPar.Insert;

3: DM.dstEquipment2.Insert;

4: DM.dstTypes.Insert;

end;

end;

procedure TfmEquipment.bbtDeleteClick(Sender: TObject);

begin

case GridID of

1: if DM.dstModels.RecordCount > 0 then

DM.dstModels.Delete;

2: if DM.dstModelPar.RecordCount > 0 then

DM.dstModelPar.Delete;

3: if DM.dstEquipment2.RecordCount > 0 then

DM.dstEquipment2.Delete;

4: if DM.dstTypes.RecordCount > 0 then

DM.dstTypes.Delete;

end;

end;

procedure TfmEquipment.bbtPostClick(Sender: TObject);

begin

case GridID of

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

DM.dstModels.Post;

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

DM.dstModelPar.Post;

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

DM.dstEquipment2.Post;

4: if DM.dstTypes.State in [dsEdit, dsInsert] then

DM.dstTypes.Post;

end;

end;

procedure TfmEquipment.BitBtn2Click(Sender: TObject);

begin

Close;

end;

procedure TfmEquipment.BitBtn3Click(Sender: TObject);

begin

Rep_Card(DM.dstEquipment2.FieldByName('ИнвN').AsInteger);

end;

end.

unit uHistoryDesk;

interface

uses

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

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

type

TfmHistoryDesk = class(TForm)

Panel1: TPanel;

DBGrid1: TDBGrid;

Panel2: TPanel;

lbName: TLabel;

bbtPrint: TBitBtn;

bbtFirst: TBitBtn;

bbtPrior: TBitBtn;

bbtNext: TBitBtn;

bbtLast: TBitBtn;

bbtInsert: TBitBtn;

bbtDelete: TBitBtn;

bbtPost: TBitBtn;

bbtExit: TBitBtn;

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

procedure bbtPrintClick(Sender: TObject);

procedure bbtFirstClick(Sender: TObject);

procedure bbtPriorClick(Sender: TObject);

procedure bbtNextClick(Sender: TObject);

procedure bbtLastClick(Sender: TObject);

procedure bbtInsertClick(Sender: TObject);

procedure bbtDeleteClick(Sender: TObject);

procedure bbtPostClick(Sender: TObject);

procedure bbtExitClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

fmHistoryDesk: TfmHistoryDesk;

implementation

uses uDM, uDocs, DB;

{$R *.dfm}

procedure TfmHistoryDesk.FormClose(Sender: TObject;

var Action: TCloseAction);

begin

DM.dstHistoryDesk.Close;

end;

procedure TfmHistoryDesk.bbtPrintClick(Sender: TObject);

begin

Rep_Any(DBGrid1, 4, Self.Caption);

end;

procedure TfmHistoryDesk.bbtFirstClick(Sender: TObject);

begin

DM.dstHistoryDesk.First;

end;

procedure TfmHistoryDesk.bbtPriorClick(Sender: TObject);

begin

DM.dstHistoryDesk.Prior;

end;

procedure TfmHistoryDesk.bbtNextClick(Sender: TObject);

begin

DM.dstHistoryDesk.Next;

end;

procedure TfmHistoryDesk.bbtLastClick(Sender: TObject);

begin

DM.dstHistoryDesk.Last;

end;

procedure TfmHistoryDesk.bbtInsertClick(Sender: TObject);

begin

DM.dstHistoryDesk.Insert;

end;

procedure TfmHistoryDesk.bbtDeleteClick(Sender: TObject);

begin

if DM.dstHistoryDesk.RecordCount > 0 then

DM.dstHistoryDesk.Delete;

end;

procedure TfmHistoryDesk.bbtPostClick(Sender: TObject);

begin

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

DM.dstHistoryDesk.Post;

end;

procedure TfmHistoryDesk.bbtExitClick(Sender: TObject);

begin

Close;

end;

end.

unit uHistoryEquip;

interface

uses

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

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

type

TfmHistoryEquip = class(TForm)

Panel1: TPanel;

DBGrid1: TDBGrid;

Panel2: TPanel;

lbName: TLabel;

DBGrid2: TDBGrid;

Splitter1: TSplitter;

bbtFirst: TBitBtn;

bbtPrior: TBitBtn;

bbtNext: TBitBtn;

bbtLast: TBitBtn;

bbtInsert: TBitBtn;

bbtDelete: TBitBtn;

bbtPost: TBitBtn;

bbtExit: TBitBtn;

bbtPrint: TBitBtn;

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

procedure FormShow(Sender: TObject);

procedure DBGrid1Exit(Sender: TObject);

procedure DBGrid2Exit(Sender: TObject);

procedure bbtFirstClick(Sender: TObject);

procedure bbtPriorClick(Sender: TObject);

procedure bbtNextClick(Sender: TObject);

procedure bbtLastClick(Sender: TObject);

procedure bbtInsertClick(Sender: TObject);

procedure bbtDeleteClick(Sender: TObject);

procedure bbtPostClick(Sender: TObject);

procedure bbtExitClick(Sender: TObject);

procedure bbtPrintClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

fmHistoryEquip: TfmHistoryEquip;

implementation

uses uDM, uDocs, DB;

var

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

{$R *.dfm}

procedure TfmHistoryEquip.FormClose(Sender: TObject;

var Action: TCloseAction);

begin

DM.dstHistoryEquip.Close;

DM.dstHistoryMove.Close;

end;

procedure TfmHistoryEquip.FormShow(Sender: TObject);

begin

DM.dstHistoryEquip.Open;

end;

procedure TfmHistoryEquip.DBGrid1Exit(Sender: TObject);

begin

GridID := 1;

end;

procedure TfmHistoryEquip.DBGrid2Exit(Sender: TObject);

begin

GridID := 2;

end;

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

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

//удаление или редактирование:

procedure TfmHistoryEquip.bbtFirstClick(Sender: TObject);

begin

case GridID of

1: DM.dstHistoryEquip.First;

2: DM.dstHistoryMove.First;

end;

end;

procedure TfmHistoryEquip.bbtPriorClick(Sender: TObject);

begin

case GridID of

1: DM.dstHistoryEquip.Prior;

2: DM.dstHistoryMove.Prior;

end;

end;

procedure TfmHistoryEquip.bbtNextClick(Sender: TObject);

begin

case GridID of

1: DM.dstHistoryEquip.Next;

2: DM.dstHistoryMove.Next;

end;

end;

procedure TfmHistoryEquip.bbtLastClick(Sender: TObject);

begin

case GridID of

1: DM.dstHistoryEquip.Last;

2: DM.dstHistoryMove.Last;

end;

end;

procedure TfmHistoryEquip.bbtInsertClick(Sender: TObject);

begin

DM.dstHistoryEquip.Insert;

end;

procedure TfmHistoryEquip.bbtDeleteClick(Sender: TObject);

begin

if DM.dstHistoryEquip.RecordCount > 0 then

DM.dstHistoryEquip.Delete;

end;

procedure TfmHistoryEquip.bbtPostClick(Sender: TObject);

begin

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

DM.dstHistoryDesk.Post;

end;

procedure TfmHistoryEquip.bbtExitClick(Sender: TObject);

begin

Close;

end;

procedure TfmHistoryEquip.bbtPrintClick(Sender: TObject);

begin

case GridID of

1: Rep_Any(DBGrid1, 4, Self.Caption);

2: Rep_Any(DBGrid2, 3, Self.Caption);

end;

end;

end.

unit uMain;

interface

uses

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

Dialogs, ExtCtrls, Grids, DBGrids, ComCtrls, ActnCtrls, ToolWin, ActnMan,

ActnMenus, ImgList, ActnList, StdActns, XPStyleActnCtrls, StdCtrls, XPMan,

Buttons;

type

TfmMain = class(TForm)

TreeView1: TTreeView;

Splitter1: TSplitter;

Panel1: TPanel;

ActionManager1: TActionManager;

acSpravParams: TAction;

acSpravDevisions: TAction;

acSpravStaff: TAction;

acWorkEquipment: TAction;

acWorkReceipt: TAction;

acRepInventList: TAction;

acSpravProducers: TAction;

acRepDeskList: TAction;

acOrders: TAction;

acSpravStates: TAction;

ImageList1: TImageList;

ActionMainMenuBar1: TActionMainMenuBar;

ActionToolBar1: TActionToolBar;

Panel2: TPanel;

DBGrid1: TDBGrid;

DBGrid2: TDBGrid;

XPManifest1: TXPManifest;

FileExit1: TFileExit;

acWorkHistoryEquip: TAction;

acWorkHistoryDesk: TAction;

acRepOld: TAction;

acRepOldUsed: TAction;

bbtFirst: TBitBtn;

bbtPrior: TBitBtn;

bbtNext: TBitBtn;

bbtLast: TBitBtn;

bbtInsert: TBitBtn;

bbtDelete: TBitBtn;

bbtPost: TBitBtn;

Splitter2: TSplitter;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

acRepCard: TAction;

BitBtn3: TBitBtn;

procedure FormShow(Sender: TObject);

procedure TreeView1Change(Sender: TObject; Node: TTreeNode);

procedure acSpravStaffExecute(Sender: TObject);

procedure acSpravDevisionsExecute(Sender: TObject);

procedure acSpravParamsExecute(Sender: TObject);

procedure acSpravProducersExecute(Sender: TObject);

procedure acSpravStatesExecute(Sender: TObject);

procedure acOrdersExecute(Sender: TObject);

procedure acWorkEquipmentExecute(Sender: TObject);

procedure acWorkHistoryEquipExecute(Sender: TObject);

procedure DBGrid1DblClick(Sender: TObject);

procedure acWorkReceiptExecute(Sender: TObject);

procedure DBGrid1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure DBGrid1ColEnter(Sender: TObject);

procedure TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);

procedure TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;

State: TDragState; var Accept: Boolean);

procedure DBGrid1Exit(Sender: TObject);

procedure DBGrid2Exit(Sender: TObject);

procedure bbtFirstClick(Sender: TObject);

procedure bbtPriorClick(Sender: TObject);

procedure bbtNextClick(Sender: TObject);

procedure bbtLastClick(Sender: TObject);

procedure bbtInsertClick(Sender: TObject);

procedure bbtDeleteClick(Sender: TObject);

procedure bbtPostClick(Sender: TObject);

procedure acWorkHistoryDeskExecute(Sender: TObject);

procedure acRepCardExecute(Sender: TObject);

procedure acRepDeskListExecute(Sender: TObject);

procedure acRepInventListExecute(Sender: TObject);

procedure acRepOldExecute(Sender: TObject);

procedure acRepOldUsedExecute(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

fmMain: TfmMain;

implementation

uses uDM, uStaff, uDevisions, uOrders, uParams, uProducers, uState,

uEquipment, uHistoryEquip, uHistoryDesk, uReceipt, DB, uDocs;

var

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

{$R *.dfm}

procedure TfmMain.FormShow(Sender: TObject);

//Добавление вершин дерева (рабочих мест по подразделению):

procedure NewDesk(Node: TTreeNode);

var

Child: TTreeNode;

Caption: string;

begin

DM.dstDesks.Open;

DM.dstDesks.First;

while not DM.dstDesks.Eof do

begin

Caption := DM.dstDesks.FieldByName('Наименование').AsString;

Child := TreeView1.Items.AddChild(Node, Caption);

//Data указывает на ID раб. места:

Child.Data := Pointer(DM.dstDesks.FieldByName('ID').AsInteger);

Child.ImageIndex := 1;

DM.dstDesks.Next;

end;

end;

var

CategTreeNode: TTreeNode;

begin

TreeView1.Items.Clear;

DM.dstDevisions.Open;

DM.dstDesks.Open;

DM.dstDevisions.Sort := 'Наименование';

DM.dstDevisions.First;

while not DM.dstDevisions.Eof do

begin

//Добавление вершины (подразделения):

CategTreeNode := TreeView1.Items.Add(nil, DM.dstDevisions.FieldByName('Наименование').AsString);

//Data указывает на ID подразделения:

CategTreeNode.Data := Pointer(DM.dstDevisions.FieldByName('ID').AsInteger);

CategTreeNode.ImageIndex := 0;

NewDesk(CategTreeNode); //Добавление списка рабочих мест по текущему подразделению

DM.dstDevisions.Next;

end;

DM.dstDevisions.Close;

DM.dstDesks.Close;

DBGrid1.Hint := 'Для поиска техники дважды кликните мышью по выбранному экземпляру.' +

Chr(10) + 'Для переноса техники кликните ее мышью и, удерживая кнопку мыши, ' +

'перетащите на новое раб. место';

end;

//Обработка выбора на дереве подразделения/раб. места:

procedure TfmMain.TreeView1Change(Sender: TObject; Node: TTreeNode);

begin

//Вывод на экран списка техники и заявок на выбранном раб. месте:

DM.dstEquipment.Close;

DM.dstOrdersFromDesk.Close;

if Assigned(TreeView1.Selected) then

if Assigned(TreeView1.Selected.Parent) then

begin //Выбрано раб. место

DM.dstEquipment.Parameters.ParamByName('pRM').Value := Integer(Node.Data);

DM.dstOrdersFromDesk.Parameters.ParamByName('pRM').Value := Integer(Node.Data);

end

else //Выбрано подразделение

begin

DM.dstEquipment.Parameters.ParamByName('pRM').Value := -1;

DM.dstOrdersFromDesk.Parameters.ParamByName('pRM').Value := -1;

end

else

begin

DM.dstEquipment.Parameters.ParamByName('pRM').Value := -1;

DM.dstOrdersFromDesk.Parameters.ParamByName('pRM').Value := -1;

end;

DM.dstEquipment.Open;

DM.dstOrdersFromDesk.Open;

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

acWorkHistoryEquip.Enabled := DM.dstEquipment.Recordcount > 0;

acRepCard.Enabled := DM.dstEquipment.Recordcount > 0;

acWorkHistoryEquip.Enabled := DM.dstEquipment.Recordcount > 0;

//Действия доступны только если выбрано раб. место, а не подразделение:

acWorkHistoryDesk.Enabled := Assigned(Node.Parent);

end;

procedure TfmMain.acSpravStaffExecute(Sender: TObject);

begin

fmStaff.Show;

end;

procedure TfmMain.acSpravDevisionsExecute(Sender: TObject);

begin

fmDevisions.ShowModal;

end;

procedure TfmMain.acSpravParamsExecute(Sender: TObject);

begin

fmParams.Show;

end;

procedure TfmMain.acSpravProducersExecute(Sender: TObject);

begin

fmProducers.Show;

end;

procedure TfmMain.acSpravStatesExecute(Sender: TObject);

begin

fmState.Show;

end;

procedure TfmMain.acOrdersExecute(Sender: TObject);

begin

fmOrders.Show;

end;

procedure TfmMain.acWorkEquipmentExecute(Sender: TObject);

begin

fmEquipment.Show;

end;

//Вывод на экран хроники обслуживания и перемещения экземпляра техники:

procedure TfmMain.acWorkHistoryEquipExecute(Sender: TObject);

begin

DM.dstHistoryMove.Parameters.ParamByName('pInvN').Value :=

DM.dstEquipment.FieldByName('ИнвN').AsInteger;

DM.dstHistoryMove.Open;

fmHistoryEquip.lbName.Caption :=

DM.dstEquipment.FieldByName('Устройство').AsString +

'. Инв. № ' + FormatFloat('СУ0000', DM.dstEquipment.FieldByName('ИнвN').AsInteger);

fmHistoryEquip.Show;

end;

//Поиск выбранной техники по инвентарному номеру на форме учета офисной техники:

procedure TfmMain.DBGrid1DblClick(Sender: TObject);

begin

DM.dstEquipSearch.Parameters.ParamByName('pInvN').Value :=

DM.dstEquipment.FieldByName('ИнвN').AsInteger;

DM.dstEquipSearch.Open;

fmEquipment.Show;

if DM.dstTypes.Locate('ID', DM.dstEquipSearch.FieldByName('ТипID').AsInteger, []) then

if DM.dstModels.Locate('ID', DM.dstEquipSearch.FieldByName('МодельID').AsInteger, []) then

DM.dstEquipment2.Locate('ИнвN', DM.dstEquipSearch.FieldByName('ИнвN').AsInteger, []);

DM.dstEquipSearch.Close;

end;

procedure TfmMain.acWorkReceiptExecute(Sender: TObject);

begin

fmReceipt.Show;

end;

//Если на выбранном рабочем месте есть техника, начинается процесс перетаскивания:

procedure TfmMain.DBGrid1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

if (DM.dstEquipment.RecordCount > 0) then

DBGrid1.BeginDrag(False);

end;

//Вызов обработчика начала перетаскивания (MouseDown автоматически не срабатывает,

//когда происходит клик мышью по ячейкам грида):

procedure TfmMain.DBGrid1ColEnter(Sender: TObject);

begin

DBGrid1MouseDown(DBGrid1, mbLeft, [], 1, 1);

end;

//Перенос выбранной техники на выбранное место:

procedure TfmMain.TreeView1DragDrop(Sender, Source: TObject; X,

Y: Integer);

var

Dst: TTreeNode;

begin

Dst := TreeView1.GetNodeAt(X, Y); //Новое раб. место

if Dst <> nil then

//Проверка, не выбрано ли подразделение вместо раб. места:

if not Assigned(Dst.Parent) then

Application.MessageBox('Переносить технику можно только на рабочие места!',

'Недопустимое действие', MB_OK+MB_ICONEXCLAMATION)

else

//Проверка, не совпадают ли исходное и новое раб. места:

if Dst <> TreeView1.Selected then

if Application.MessageBox(PChar('Переместить' + Chr(10) +

DM.dstEquipment.FieldByName('Устройство').AsString + Chr(10) + 'на рабочее место ' +

Dst.Text + '?'), 'Вопрос', MB_YESNO+MB_ICONQUESTION) = IDYES then

begin

//Перенос техники:

DM.qrMoveEquipment.Parameters.ParamByName('pRM').Value := Integer(Dst.Data);

DM.qrMoveEquipment.Parameters.ParamByName('pInvN').Value :=

DM.dstEquipment.FieldByName('ИнвN').AsInteger;

DM.qrMoveEquipment.Parameters.ParamByName('pDate').Value := Now;

DM.qrMoveEquipment.ExecSQL;

TreeView1.Selected := Dst;

end;

end;

procedure TfmMain.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;

State: TDragState; var Accept: Boolean);

begin

Accept := True;

end;

procedure TfmMain.DBGrid1Exit(Sender: TObject);

begin

GridID := 1;

end;

procedure TfmMain.DBGrid2Exit(Sender: TObject);

begin

GridID := 2;

end;

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

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

procedure TfmMain.bbtFirstClick(Sender: TObject);

begin

case GridID of

1: DM.dstEquipment.First;

2: DM.dstOrdersFromDesk.First;

end;

end;

procedure TfmMain.bbtPriorClick(Sender: TObject);

begin

case GridID of

1: DM.dstEquipment.Prior;

2: DM.dstOrdersFromDesk.Prior;

end;

end;

procedure TfmMain.bbtNextClick(Sender: TObject);

begin

case GridID of

1: DM.dstEquipment.Next;

2: DM.dstOrdersFromDesk.Next;

end;

end;

procedure TfmMain.bbtLastClick(Sender: TObject);

begin

case GridID of

1: DM.dstEquipment.Last;

2: DM.dstOrdersFromDesk.Last;

end;

end;

procedure TfmMain.bbtInsertClick(Sender: TObject);

begin

DM.dstOrdersFromDesk.Insert;

end;

procedure TfmMain.bbtDeleteClick(Sender: TObject);

begin

if DM.dstOrdersFromDesk.RecordCount > 0 then

DM.dstOrdersFromDesk.Delete;

end;

procedure TfmMain.bbtPostClick(Sender: TObject);

begin

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

DM.dstOrdersFromDesk.Post;

end;

//Вывод на экран хроники обслуживания рабочего места:

procedure TfmMain.acWorkHistoryDeskExecute(Sender: TObject);

begin

DM.dstHistoryDesk.Parameters.ParamByName('pDeskID').Value :=

Integer(TreeView1.Selected.Data);

DM.dstHistoryDesk.Open;

fmHistoryDesk.lbName.Caption := TreeView1.Selected.Text;

fmHistoryDesk.Show;

end;

procedure TfmMain.acRepCardExecute(Sender: TObject);

begin

Rep_Card(DM.dstEquipment.FieldByName('ИнвN').AsInteger);

end;

procedure TfmMain.acRepDeskListExecute(Sender: TObject);

begin

Rep_Desks;

end;

procedure TfmMain.acRepInventListExecute(Sender: TObject);

begin

Rep_Inventlist;

end;

procedure TfmMain.acRepOldExecute(Sender: TObject);

begin

Rep_Old;

end;

procedure TfmMain.acRepOldUsedExecute(Sender: TObject);

begin

Rep_OldUsed;

end;

end.

unit uOrders;

interface

uses

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

Dialogs, ImgList, ActnList, StdActns, ActnMan, StdCtrls, Buttons, Grids,

DBGrids, ToolWin, ActnCtrls, ActnMenus, ExtCtrls, DBCtrls, Mask, ComCtrls;

type

TfmOrders = class(TForm)

Panel1: TPanel;

Panel2: TPanel;

Splitter2: TSplitter;

GroupBox1: TGroupBox;

chbDate1: TCheckBox;

dtpDate1: TDateTimePicker;

chbDate2: TCheckBox;

dtpDate2: TDateTimePicker;

chbState: TCheckBox;

dblcbState: TDBLookupComboBox;

chbDesk: TCheckBox;

dblcbPlace: TDBLookupComboBox;

chbEmp: TCheckBox;

dblcbEmp: TDBLookupComboBox;

DBGrid1: TDBGrid;

bbtFirst: TBitBtn;

bbtPrior: TBitBtn;

bbtNext: TBitBtn;

bbtLast: TBitBtn;

bbtInsert: TBitBtn;

bbtDelete: TBitBtn;

bbtPost: TBitBtn;

bbtExit: TBitBtn;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

bbtPrint: TBitBtn;

procedure FormShow(Sender: TObject);

procedure DBGrid1TitleClick(Column: TColumn);

procedure chbDate1Click(Sender: TObject);

procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;

DataCol: Integer; Column: TColumn; State: TGridDrawState);

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

procedure bbtFirstClick(Sender: TObject);

procedure bbtPriorClick(Sender: TObject);

procedure bbtNextClick(Sender: TObject);

procedure bbtLastClick(Sender: TObject);

procedure bbtInsertClick(Sender: TObject);

procedure bbtDeleteClick(Sender: TObject);

procedure bbtPostClick(Sender: TObject);

procedure bbtExitClick(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure bbtPrintClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

fmOrders: TfmOrders;

implementation

uses ADODB, DB, uDocs, uDM, uMain;

{$R *.dfm}

procedure TfmOrders.FormShow(Sender: TObject);

begin

DM.dstOrders.Open;

end;

//Сортировка списка заявок по полю, по заголовку которого сделан клик мышью:

procedure TfmOrders.DBGrid1TitleClick(Column: TColumn);

begin

if Column.Field.FieldName = 'Состояние' then

DM.dstOrders.Sort := 'СостояниеID'

else if Column.Field.FieldName = 'Инцидент' then

DM.dstOrders.Sort := 'ПричинаID'

else if Column.Field.FieldName = 'РабМесто' then

DM.dstOrders.Sort := 'РабМестоID'

else if Column.Field.FieldName = 'Исполнитель' then

DM.dstOrders.Sort := 'ИсполнительID'

else

DM.dstOrders.Sort := Column.Field.FieldName;

end;

//Отбор заявок по выбранным критериям:

procedure TfmOrders.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 chbState.Checked and (dblcbState.KeyValue <> Null) then

begin

if Filter <> '' then

Filter := Filter + ' and ';

Filter := Filter + 'СтатусID = ' + IntToStr(dblcbState.KeyValue);

end;

if chbDesk.Checked and (dblcbPlace.KeyValue <> Null) then

begin

if Filter <> '' then

Filter := Filter + ' and ';

Filter := Filter + 'РабМестоID = ' + IntToStr(dblcbPlace.KeyValue);

end;

if chbEmp.Checked and (dblcbEmp.KeyValue <> Null) then

begin

if Filter <> '' then

Filter := Filter + ' and ';

Filter := Filter + 'ИсполнительID = ' + IntToStr(dblcbEmp.KeyValue);

end;

if Filter <> '' then

begin

DM.dstOrders.Filter := Filter;

DM.dstOrders.Filtered := True;

end

else

DM.dstOrders.Filtered := False;

end;

//Выделение цветом заказов в зависимости от состояния:

procedure TfmOrders.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;

DataCol: Integer; Column: TColumn; State: TGridDrawState);

begin

if (DM.dstOrders.FieldByName('Статус').AsString = 'Исполнена') or

(DM.dstOrders.FieldByName('Статус').AsString = 'Ошибочная') or

(DM.dstOrders.FieldByName('Статус').AsString = 'Отменена') or

(DM.dstOrders.FieldByName('Статус').AsString = 'Отказано') then

DBGrid1.Canvas.Brush.Color := clSkyBlue

else if DM.dstOrders.FieldByName('Статус').AsString = 'Отложена' then

DBGrid1.Canvas.Brush.Color := clMoneyGreen;

DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);

end;

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

begin

DM.dstOrders.Close;

end;

procedure TfmOrders.bbtFirstClick(Sender: TObject);

begin

DM.dstOrders.First;

end;

procedure TfmOrders.bbtPriorClick(Sender: TObject);

begin

DM.dstOrders.Prior;

end;

procedure TfmOrders.bbtNextClick(Sender: TObject);

begin

DM.dstOrders.Next;

end;

procedure TfmOrders.bbtLastClick(Sender: TObject);

begin

DM.dstOrders.Last;

end;

procedure TfmOrders.bbtInsertClick(Sender: TObject);

begin

DM.dstOrders.Insert;

end;

procedure TfmOrders.bbtDeleteClick(Sender: TObject);

begin

if DM.dstOrders.RecordCount > 0 then

DM.dstOrders.Delete;

end;

procedure TfmOrders.bbtPostClick(Sender: TObject);

begin

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

DM.dstOrders.Post;

end;

procedure TfmOrders.bbtExitClick(Sender: TObject);

begin

Close;

end;

procedure TfmOrders.FormCreate(Sender: TObject);

begin

dtpDate1.Date := Date;

dtpDate2.Date := Date;

end;

procedure TfmOrders.bbtPrintClick(Sender: TObject);

begin

Rep_Any(DBGrid1, 10, Self.Caption);

end;

end.

unit uParams;

interface

uses

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

Dialogs, ExtCtrls, StdCtrls, Buttons, DBCtrl...


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.