Автоматизированная информационная система учета офисной техники
Предпроектный анализ вопросов создания автоматизированной информационной системы. Проблемы представления и хранения данных. Существующие системы автоматизации учета офисной техники. Характеристика нормативно-справочной и входной оперативной информации.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 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...
Подобные документы
Обоснование необходимости и цели использования вычислительной техники для решения задачи учета запасов. Анализ существующих разработок и обоснование выбора технологии проектирования. Характеристика нормативно-справочной и входной оперативной информации.
дипломная работа [869,9 K], добавлен 18.03.2012Цель создания информационной системы. Автоматизированная информационная система "Строительное предприятие". Использование вычислительной техники и программного обеспечения для создания автоматизированной информационной системы управления на предприятии.
курсовая работа [2,5 M], добавлен 04.01.2011Создание базы данных информационной системы для учета продаж бытовой техники и автоматизации документооборота в phpMyAdmin. Функциональная диаграмма IDEF0. Создание нового пользователя, таблиц, записей в таблице. Организация сайта на локальном сервере.
курсовая работа [2,8 M], добавлен 11.05.2014Разработка информационной системы для анализа, хранения и обработки информации необходимой для автоматизации учета в автомобильном салоне "Aurore Auto" с помощью технологий Rational Rose, PHP и MySQL. Реализация и экономическая эффективность проекта.
дипломная работа [2,2 M], добавлен 20.05.2011Обоснование необходимости совершенствования информационной системы (ИС) ООО "Мехсервис". Анализ системы учета деятельности авторемонтного предприятия. Разработка концепции построения автоматизированной ИС. Описание продукта информационной технологии.
дипломная работа [2,7 M], добавлен 22.05.2012Требования к функциональным характеристикам информационной системы "Подписка". Функциональное проектирование автоматизированной системы ведения учета основных средств на предприятии. Проектирование базы данных автоматизированной системы ведения учета.
курсовая работа [753,0 K], добавлен 16.01.2015Система автоматизации бухгалтерского учета. Состав и характеристика нормативно-справочной информации. Этапы и средства бухучета в 1С. Виды Классификаторов информации. Перечень основных справочников, используемых в автоматизированной системе учета.
контрольная работа [26,4 K], добавлен 27.07.2009Разработка автоматизированной информационной системы учета заявок сотрудников на обслуживание компьютерной, офисной и торговой техники в ООО "Платина". Проектирование информационных процессов с помощью средства BPWin в офисном приложении Access.
дипломная работа [2,5 M], добавлен 02.02.2016Архитектура автоматизированной информационной системы управления складом. Заказ материалов, подсистема учета материалов бытовой техники на цеховом складе. Внемашинное информационное обеспечение. Выбор инструментальной платформы для реализации системы.
курсовая работа [1,6 M], добавлен 04.12.2014Функциональные характеристики автоматизированной информационной системы "Общежитие". Функции, которые должна выполнять система. Обоснование выбора формы хранения данных. Характеристика входной информации. Описание основных информационных объектов.
курсовая работа [30,0 K], добавлен 28.11.2012Создание информационной системы для фирмы "Удача", которая является посредником при перепродаже недвижимости. Обоснование состава вычислительной техники и программного обеспечения для функционирования данной автоматизированной информационной системы.
курсовая работа [1,8 M], добавлен 17.02.2014Создание автоматизированной информационной системы учета оборудования (компьютерной и оргтехники) на АКБ НМБ ОАО с использованием современных компьютерных средств. Проектирование базы данных. Алгоритмы решения задач. Расчёт затрат на проектирование.
дипломная работа [2,1 M], добавлен 16.12.2013Цель, критерии и ограничения создания автоматизированной системы. Разработка элементов информационного обеспечения информационной системы общежития. Рекомендации по выбору комплекса технических средств для автоматизации задачи учета реализации товара.
курсовая работа [920,8 K], добавлен 11.11.2022Классификация архитектуры базы данных. Компьютерные сети и их виды. Обзор программных продуктов для учета компьютерной техники и оргтехники. Проектирование информационной структуры предметной области и программная реализация задачи учета оргтехники.
дипломная работа [1,9 M], добавлен 16.05.2017Назначение программы учета вычислительной техники и оргтехники организации. Характеристика входной и выходной информации. Требования к базам данных и приложению. Проектирование отношений сущность-связь. Описание операторов создания базы данных.
курсовая работа [1,7 M], добавлен 16.06.2022Назначение программ офисной автоматизации. Преимущества ERP-систем, критерии их выбора. Характеристики ряда программ: "БЭСТ-5" - информационной системы управления предприятием, описание 1С:Предприятие 8.1, Microsoft Dynamics AX, Галактика Business Suite.
курсовая работа [907,2 K], добавлен 19.12.2011Функциональная модель предметной области на примере базы данных автоматизированной информационной системы "Общежития". Ведение информационной базы об общежитиях, комнатах и сотрудниках, хранение информации о студентах, специальностях и факультетах.
курсовая работа [2,7 M], добавлен 10.04.2014Основные цели создания корпоративной системы нормативно-справочной информации (КС НСИ), ее системные составляющие. Место КС НСИ в технической структуре отраслевой информационной корпоративной системы. Типичные проблемы и методическая база КС НСИ.
презентация [696,8 K], добавлен 14.10.2013Проектирование информационной системы для автоматизации документооборота в области кадрового учета МОУ Гимназия № 16 г. Керчь. Объекты справочной и учетной информации. Реализация физической модели базы данных в среде СУБД. Построение логической модели БД.
курсовая работа [1,3 M], добавлен 15.08.2012Системы дистанционного учета и контроля потребления воды, разработанные различными компаниями. Техническое задание на создание автоматизированной информационной системы учета расхода воды в ООО "Водоснабжение". Экономическая эффективность проекта.
дипломная работа [3,7 M], добавлен 21.01.2015