- •Проектирование информационной системы по учету расхода материалов на производство
- •1 Технико-экономическая характеристика предметной области и предприятия ооо «Российское производство»
- •1.1 Характеристика предприятия и его деятельности
- •1.2 Организационная структура управления предприятием
- •2 Выбор комплекса задач автоматизации и характеристика существующих бизнес процессов
- •3. Информационное обеспечение задачи
- •3.1 Информационная модель и её описание
- •3.2 Используемые классификаторы и системы кодирования
- •3.3 Характеристика нормативно-справочной, входной и оперативной информации
- •3.4 Характеристика результатной информации
- •4. Программное обеспечение задачи
- •4.1.Общие положения (дерево функций и сценарий диалога)
- •4.2. Характеристика базы данных
- •4.3 Структурная схема пакета
- •5. Контрольный пример реализации проекта и его описание
- •Заключение
- •Список использованных источников
- •Приложение
Приложение
unit udmMain;
interface
uses
SysUtils, Classes, DB, ADODB;
type
TdmMain = class(TDataModule)
adocDB: TADOConnection;
adotDocPrihod: TADOTable;
dsDocPrihod: TDataSource;
adotDocSpisanie: TADOTable;
dsDocSpisanie: TDataSource;
adotMat: TADOTable;
dsMat: TDataSource;
adotSklad: TADOTable;
dsSklad: TDataSource;
adotDocPrihodAutoIncField: TAutoIncField;
adotDocPrihodDateTimeField: TDateTimeField;
adotDocPrihodIntegerField: TIntegerField;
adotDocPrihodIntegerField2: TWideStringField;
adotTabPrihod: TADOTable;
dsTabPrihod: TDataSource;
adotTabPrihodIntegerField2: TIntegerField;
adotTabPrihodFloatField: TFloatField;
adotTabPrihodFloatField2: TFloatField;
adotTabPrihodIntegerField3: TWideStringField;
adotNSI: TADOTable;
dsNSI: TDataSource;
adotTabSpisanie: TADOTable;
dsTabSpisanie: TDataSource;
adotDocSpisanieAutoIncField: TAutoIncField;
adotDocSpisanieDateTimeField: TDateTimeField;
adotDocSpisanieIntegerField: TIntegerField;
adotDocSpisanieIntegerField2: TIntegerField;
adotDocSpisanieIntegerField3: TIntegerField;
adotDocSpisanieIntegerField4: TIntegerField;
adotDocSpisanieIntegerField5: TWideStringField;
adotPodrazd: TADOTable;
adotNomGrup: TADOTable;
adotStatiya: TADOTable;
dsPodrazd: TDataSource;
dsNomGrup: TDataSource;
dsStatiya: TDataSource;
adotDocSpisanieIntegerField6: TWideStringField;
adotDocSpisanieWideStringField: TWideStringField;
adotDocSpisanieIntegerField7: TWideStringField;
adotTabSpisanieIntegerField: TIntegerField;
adotTabSpisanieIntegerField2: TIntegerField;
adotTabSpisanieFloatField: TFloatField;
adotTabSpisanieIntegerField3: TWideStringField;
adotNSIAutoIncField: TAutoIncField;
adotNSIWideStringField: TWideStringField;
adospMatVed: TADOStoredProc;
dsMatVed: TDataSource;
adotTabPrihodIntegerField: TIntegerField;
adospMatVedWideStringField: TWideStringField;
adospMatVedWideStringField2: TWideStringField;
adospMatVedFloatField: TFloatField;
adospMatVedFloatField2: TFloatField;
adospMatVedField: TWideStringField;
adospMatVedFloatField3: TWideStringField;
procedure adospMatVedCalcFields(DataSet: TDataSet);
procedure DataModuleCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
dmMain: TdmMain;
implementation
{$R *.dfm}
procedure TdmMain.adospMatVedCalcFields(DataSet: TDataSet);
begin
DataSet.FieldByName('ПриходС').AsString := FloatToStr(DataSet.FieldByName('Приход').AsFloat);
DataSet.FieldByName('РасходС').AsString := FloatToStr(DataSet.FieldByName('Расход').AsFloat);
end;
procedure TdmMain.DataModuleCreate(Sender: TObject);
begin
adocDB.Open;
adotDocPrihod.Open;
adotDocSpisanie.Open;
adotMat.Open;
adotSklad.Open;
adotTabPrihod.Open;
adotTabSpisanie.Open;
adotPodrazd.Open;
adotNomGrup.Open;
adotStatiya.Open;
end;
end.
unit ufmMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ComCtrls, ToolWin, ActnList, ImgList, ExtCtrls, DBCtrls,
Grids, DBGrids, StdCtrls, StdActns, XPMan;
type
TfmMain = class(TForm)
ActionList1: TActionList;
MainMenu1: TMainMenu;
ImageList1: TImageList;
Splitter1: TSplitter;
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
dbnPrihod: TDBNavigator;
dbnSpisanie: TDBNavigator;
dbgPrihod: TDBGrid;
dbgSpisanie: TDBGrid;
Panel5: TPanel;
Bevel1: TBevel;
Label1: TLabel;
Panel6: TPanel;
Bevel2: TBevel;
Label2: TLabel;
ActionExit: TFileExit;
N1: TMenuItem;
Exit1: TMenuItem;
ActionSclad: TAction;
ActionPodrazd: TAction;
ActionNomGrup: TAction;
ActionMat: TAction;
ActionStatiya: TAction;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
ActionMatVed: TAction;
N9: TMenuItem;
XPManifest1: TXPManifest;
procedure dbgPrihodDblClick(Sender: TObject);
procedure dbnPrihodClick(Sender: TObject; Button: TNavigateBtn);
procedure dbgSpisanieDblClick(Sender: TObject);
procedure dbnSpisanieClick(Sender: TObject; Button: TNavigateBtn);
procedure ActionMatExecute(Sender: TObject);
procedure ActionScladExecute(Sender: TObject);
procedure ActionPodrazdExecute(Sender: TObject);
procedure ActionNomGrupExecute(Sender: TObject);
procedure ActionStatiyaExecute(Sender: TObject);
procedure ActionMatVedExecute(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmMain: TfmMain;
implementation
uses
udmMain, ufmPrihod, ufmSpisanie, ufmNSI, ufmMatVed;
{$R *.dfm}
procedure TfmMain.ActionMatExecute(Sender: TObject);
begin
ShowNSIForm('Материалы', 'Материалы');
end;
procedure TfmMain.ActionMatVedExecute(Sender: TObject);
begin
fmMatVed := TfmMatVed.Create(Application);
fmMatVed.ShowModal;
fmMatVed.Free;
end;
procedure TfmMain.ActionNomGrupExecute(Sender: TObject);
begin
ShowNSIForm('НоменклатурныеГруппы', 'Номенклатурные группы');
end;
procedure TfmMain.ActionPodrazdExecute(Sender: TObject);
begin
ShowNSIForm('Подразделения', 'Подразделения');
end;
procedure TfmMain.ActionScladExecute(Sender: TObject);
begin
ShowNSIForm('Склады', 'Склады');
end;
procedure TfmMain.ActionStatiyaExecute(Sender: TObject);
begin
ShowNSIForm('СтатьиЗатрат', 'Статьи затрат');
end;
procedure TfmMain.dbgPrihodDblClick(Sender: TObject);
begin
fmPrihod := TfmPrihod.Create(Application);
fmPrihod.ShowModal;
fmPrihod.Free;
end;
procedure TfmMain.dbgSpisanieDblClick(Sender: TObject);
begin
fmSpisanie := TfmSpisanie.Create(Application);
fmSpisanie.ShowModal;
fmSpisanie.Free;
end;
procedure TfmMain.dbnSpisanieClick(Sender: TObject; Button: TNavigateBtn);
begin
if Button in [nbEdit, nbInsert] then
dbgSpisanieDblClick(Sender);
end;
procedure TfmMain.dbnPrihodClick(Sender: TObject; Button: TNavigateBtn);
begin
if Button in [nbEdit, nbInsert] then
dbgPrihodDblClick(Sender);
end;
end.
unit ufmNSI;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids, StdCtrls, Buttons, ActnList;
type
TfmNSI = class(TForm)
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
ActionList1: TActionList;
ActionOK: TAction;
ActionSave: TAction;
ActionClose: TAction;
procedure ActionOKExecute(Sender: TObject);
procedure ActionSaveExecute(Sender: TObject);
procedure ActionCloseExecute(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure ShowNSIForm(TableName, FormName: string);
var
fmNSI: TfmNSI;
implementation
uses
DB, udmMain;
{$R *.dfm}
procedure ShowNSIForm(TableName, FormName: string);
begin
with dmMain do
begin
adotNSI.TableName := TableName;
adotNSI.Open;
fmNSI := TfmNSI.Create(Application);
fmNSI.Caption := FormName;
fmNSI.ShowModal;
fmNSI.Free;
adotNSI.Close;
end;
end;
procedure TfmNSI.ActionCloseExecute(Sender: TObject);
begin
with dmMain do
if adotNSI.State in [dsInsert, dsEdit] then
if MessageDlg('Справочник изменен. Записать?',
mtConfirmation, mbYesNoCancel, -1) = mrYes then
adotNSI.Post
else
adotNSI.Cancel;
Close;
end;
procedure TfmNSI.ActionOKExecute(Sender: TObject);
begin
ActionSaveExecute(Sender);
Close;
end;
procedure TfmNSI.ActionSaveExecute(Sender: TObject);
begin
with dmMain do
begin
if adotNSI.State in [dsInsert, dsEdit] then
adotNSI.Post;
end;
end;
end.
unit ufmPrihod;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, DBCtrls, Buttons, Grids, DBGrids, ExtCtrls, ActnList,
ComCtrls;
type
TfmPrihod = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
DBEdit1: TDBEdit;
DBLookupComboBox1: TDBLookupComboBox;
BitBtn1: TBitBtn;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
BitBtn3: TBitBtn;
ActionList1: TActionList;
ActionOK: TAction;
ActionSave: TAction;
ActionClose: TAction;
dtpDate: TDateTimePicker;
BitBtn2: TBitBtn;
procedure ActionSaveExecute(Sender: TObject);
procedure ActionCloseExecute(Sender: TObject);
procedure ActionOKExecute(Sender: TObject);
procedure dtpDateChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmPrihod: TfmPrihod;
implementation
uses
DB, udmMain;
{$R *.dfm}
procedure TfmPrihod.ActionCloseExecute(Sender: TObject);
begin
Close;
end;
procedure TfmPrihod.ActionOKExecute(Sender: TObject);
begin
ActionSaveExecute(Sender);
Close;
end;
procedure TfmPrihod.ActionSaveExecute(Sender: TObject);
begin
with dmMain do
begin
if adotDocPrihod.State in [dsInsert, dsEdit] then
adotDocPrihod.Post;
if adotTabPrihod.State in [dsInsert, dsEdit] then
adotTabPrihod.Post;
end;
end;
procedure TfmPrihod.dtpDateChange(Sender: TObject);
begin
with dmMain do
begin
if not (adotDocPrihod.State in [dsInsert, dsEdit]) then
adotDocPrihod.Edit;
adotDocPrihod.FieldByName('Äàòà').AsDateTime := dtpDate.DateTime;
end;
end;
procedure TfmPrihod.FormClose(Sender: TObject; var Action: TCloseAction);
var
SaveDoc, SaveTab: Boolean;
begin
with dmMain do
begin
SaveDoc := adotDocPrihod.State in [dsInsert, dsEdit];
SaveTab := adotTabPrihod.State in [dsInsert, dsEdit];
if SaveDoc or SaveTab then
if MessageDlg('Документ изменен. Записать?',mtConfirmation, mbYesNoCancel, -1) = mrYes then
begin
if SaveDoc then
adotDocPrihod.Post;
if SaveTab then
adotTabPrihod.Post;
end else begin
if SaveDoc then
adotDocPrihod.Cancel;
if SaveTab then
adotTabPrihod.Cancel;
end;
end;
end;
procedure TfmPrihod.FormCreate(Sender: TObject);
begin
with dmMain do
case adotDocPrihod.State of
dsInsert:
begin
dtpDate.DateTime := Now;
adotDocPrihod.FieldByName('Äàòà').AsDateTime := dtpDate.DateTime;
adotDocPrihod.Post;
end;
dsEdit:
dtpDate.DateTime := adotDocPrihod.FieldByName('Äàòà').AsDateTime;
else
if adotDocPrihod.FieldByName('Номер').AsInteger = 0 then
begin
dtpDate.DateTime := Now;
adotDocPrihod.Insert;
adotDocPrihod.FieldByName('Äàòà').AsDateTime := dtpDate.DateTime;
adotDocPrihod.Post;
end else
dtpDate.DateTime := adotDocPrihod.FieldByName('Äàòà').AsDateTime;
end;
end;
end.
unit ufmSpisanie;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, DBCtrls, ComCtrls, Grids, DBGrids, ActnList, Buttons,
ExtCtrls;
type
TfmSpisanie = class(TForm)
Label1: TLabel;
DBEdit1: TDBEdit;
Label2: TLabel;
dtpDate: TDateTimePicker;
DBLookupComboBox1: TDBLookupComboBox;
Label3: TLabel;
DBLookupComboBox2: TDBLookupComboBox;
Label4: TLabel;
DBLookupComboBox3: TDBLookupComboBox;
DBLookupComboBox4: TDBLookupComboBox;
Label5: TLabel;
Label6: TLabel;
DBGrid1: TDBGrid;
ActionList1: TActionList;
ActionOK: TAction;
ActionSave: TAction;
ActionClose: TAction;
DBNavigator1: TDBNavigator;
BitBtn1: TBitBtn;
BitBtn3: TBitBtn;
BitBtn2: TBitBtn;
procedure ActionOKExecute(Sender: TObject);
procedure ActionSaveExecute(Sender: TObject);
procedure ActionCloseExecute(Sender: TObject);
procedure dtpDateChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmSpisanie: TfmSpisanie;
implementation
uses
DB, udmMain;
{$R *.dfm}
procedure TfmSpisanie.ActionCloseExecute(Sender: TObject);
begin
Close;
end;
procedure TfmSpisanie.ActionOKExecute(Sender: TObject);
begin
ActionSaveExecute(Sender);
Close;
end;
procedure TfmSpisanie.ActionSaveExecute(Sender: TObject);
begin
with dmMain do
begin
if adotDocSpisanie.State in [dsInsert, dsEdit] then
adotDocSpisanie.Post;
if adotTabSpisanie.State in [dsInsert, dsEdit] then
adotTabSpisanie.Post;
end;
end;
procedure TfmSpisanie.dtpDateChange(Sender: TObject);
begin
with dmMain do
begin
if not (adotDocSpisanie.State in [dsInsert, dsEdit]) then
adotDocSpisanie.Edit;
adotDocSpisanie.FieldByName('Äàòà').AsDateTime := dtpDate.DateTime;
end;
end;
procedure TfmSpisanie.FormClose(Sender: TObject; var Action: TCloseAction);
var
SaveDoc, SaveTab: Boolean;
begin
with dmMain do
begin
SaveDoc := adotDocSpisanie.State in [dsInsert, dsEdit];
SaveTab := adotTabSpisanie.State in [dsInsert, dsEdit];
if SaveDoc or SaveTab then
if MessageDlg('Документ изменен. Записать?',
mtConfirmation, mbYesNoCancel, -1) = mrYes then
begin
if SaveDoc then
adotDocSpisanie.Post;
if SaveTab then
adotTabSpisanie.Post;
end else begin
if SaveDoc then
adotDocSpisanie.Cancel;
if SaveTab then
adotTabSpisanie.Cancel;
end;
end;
end;
procedure TfmSpisanie.FormCreate(Sender: TObject);
begin
with dmMain do
case adotDocSpisanie.State of
dsInsert:
begin
dtpDate.DateTime := Now;
adotDocSpisanie.FieldByName('Äàòà').AsDateTime := dtpDate.DateTime;
adotDocSpisanie.Post;
end;
dsEdit:
dtpDate.DateTime := adotDocSpisanie.FieldByName('Äàòà').AsDateTime;
else
if adotDocSpisanie.FieldByName('Номер').AsInteger = 0 then
begin
dtpDate.DateTime := Now;
adotDocSpisanie.Insert;
adotDocSpisanie.FieldByName('Äàòà').AsDateTime := dtpDate.DateTime;
adotDocSpisanie.Post;
end else
dtpDate.DateTime := adotDocSpisanie.FieldByName('Äàòà').AsDateTime;
end;
end;
end.
unit ufmMatVed;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, RpBase, RpSystem, RpDefine, RpRave, StdCtrls, Buttons, ComCtrls,
RpCon, RpConDS;
type
TfmMatVed = class(TForm)
RvProject: TRvProject;
RvSystem: TRvSystem;
bbtnStart: TBitBtn;
dtpBegin: TDateTimePicker;
dtpEnd: TDateTimePicker;
Label1: TLabel;
Label2: TLabel;
RvDataSetConnection: TRvDataSetConnection;
procedure bbtnStartClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmMatVed: TfmMatVed;
implementation
uses
udmMain;
{$R *.dfm}
procedure TfmMatVed.bbtnStartClick(Sender: TObject);
var
DBegin, DEnd : TDateTime;
Year, Month, Day: Word;
begin
with dmMain do
begin
DecodeDate(dtpBegin.DateTime, Year, Month, Day);
DBegin := EncodeDate(Year, Month, Day);
DecodeDate(dtpEnd.DateTime, Year, Month, Day);
DEnd := EncodeDate(Year, Month, Day) + EncodeTime(23, 59, 59, 999);
adospMatVed.Parameters.FindParam('ПериодС').Value := DBegin;
adospMatVed.Parameters.FindParam('ПериодПо').Value := DEnd;
adospMatVed.Open;
RvProject.Open;
RvProject.SelectReport('RaveProject', False);
RvProject.Execute;
RvProject.Close;
adospMatVed.Close;
end;
end;
procedure TfmMatVed.FormCreate(Sender: TObject);
begin
RvProject.ProjectFile := ChangeFileExt(ParamStr(0), '.rav');
dtpBegin.DateTime := Now;
dtpEnd.DateTime := dtpBegin.DateTime;
end;
end.