Разработка системы управления работой коммерческой компанииРефераты >> Предпринимательство >> Разработка системы управления работой коммерческой компании
Procedure TSklVks.InitMenuBar; { Создает строку меню }
var
R: Trect;
Begin
GetExtent(R);
R.B.Y :=succ(R.A.Y); { координаты строки меню }
MenuBar:=New(PMenuBar,Init(R,NewMenu(NewSubMenu('~Д~анные',hcNoContext,
NewMenu(
NewItem('~С~клад',' ',kbNokey,cmSklad,hcNoContext,
NewItem('С~д~елки',' ',kbNoKey,cmSdelka,hcNoContext,
NewItem('~П~риходы',' ',kbNoKey,cmPrih,hcNoContext,
NewItem('Дол~г~и',' ',kbNoKey,cmDolgi,hcNoContext,
NewItem('Выруч~к~а',' ',kbNoKey,cmMoney,hcNoContext,
NewLine(
NewItem('~В~ыход','ALT-X',kbAltX,cmQuit,hcNoContext,nil)))))))),
NewSubMenu('~К~лиент',hcNoContext,(NewMenu(
NewItem('~П~родажа','',kbNoKey,cmZak,hcNoConText,
NewItem('~В~озврат','',kbNoKey,cmVozvrat,hcNoConText,
nil)))),
NewSubMenu('~П~оставщик',hcNoContext,NewMenu(
NewItem('Новый при~х~од','',kbNoKey,cmPrihod,hcNoContext,
NewItem('~К~орректировка прихода','',KbNoKey,cmKorPrihod,hcNoContext,
nil))),
NewSubMenu('Пе~ч~ать',hcNoContext,NewMenu(
NewItem('~О~тчет о наличии товара',' ',kbNoKey,cmPrnSklad,hcNoContext,
NewItem('Прайс ~л~ист',' ',KbNoKey,cmPriceList,hcNoContext,
nil))),
NewSubMenu('~А~рхив',hcNoContext,NewMenu(NewItem('~Р~абота с архивом',
' ',kbNokey,cmArchive,hcNoContext,nil)),
NewSubMenu('~У~становки',hcNoContext,NewMenu(
NewItem('~П~ароль',' ',kbNoKey,cmDostup,hcNoContext,
NewItem('Рекви~з~иты',' ',kbNoKey,cmRekviz,hcNoContext,
NewItem('Кур~с~ доллара',' ',kbNoKey,cmKurs,hcNocontext,
nil)))),
NewSubMenu('~И~нформация',hcNoContext,NewMenu(
NewItem('О Скла~д~е . ','',kbNokey,cmHelp_About,hcNoContext,
nil)),
nil))))))))));
end;
Var
SKLVKS : TSKLVKS;
BEGIN { Основная программа }
SklVks.Init;
SklVks.Run;
SklVks.Done;
END. { Конец основной программы }
(рис 2)
2.6.4.3 ОБРАБОТКА КОМАНД
Теперь нужно сделать так, чтобы при выборе какого-либо пункта меню выполнялась соответсвующая процедура. При выборе пунктов меню генерирует событие, которое обрабатывается подпрограммой - обработчиком событий. Для этого ч перекрыл стандартный обработчик событий HandleEvent объекта TApplication. Для этого в описании объекта TSklVks добавил еще одну строку .
Type
TSklVks = Object(TApplication)
Procedure HandleEvent(var Event : Tevent); virtual;
End;
и поместил в раздел объявлений текс новой подпрограммы :
Procedure TSklVks.HandleEvent(var Event : TEvent);
Begin
TApplication.HandleEvent(Event);
if Event.What = evCommand then
case Event.Command of
cmPrnSklad : Begin
PrintSklad;
End;
cmSklad : begin
Sklad;
end;
cmZak : Begin
Zak;
End;
cmHelp_About : Begin
Help_About;
End;
cmPrihod : Begin
Prihod;
End;
cmPrih : Begin
Prih;
End;
cmDostup : begin
Dostup;
end;
cmRekviz : begin;
rekviz;
end;
cmKurs : Begin
Kurs;
end;
cmPriceList : Begin
GetDate(yyyy,mm,dd,ww);
PriceList(dd,mm,yyyy);
ClearEvent(Event);
end;
cmSdelka : Begin
Sdelki;
End;
cmVozvrat : Begin
Vozvrat;
End;
cmKorPrihod : Begin
KorPrihod;
End;
cmDolgi : Begin
Dolgi;
End;
cmMoney : Begin
Money;
End;
cmArchive : Begin
Arc_;
End;
else
ClearEvent(Event);
end;
ClearEvent(Event)
End;
2.6.4.4 ПРОГРАММИРОВАНИЕ ДИАЛОГОВЫХ ЗАПРОСОВ
В обработчике событий TSklVks.HandleEvent я предусмотрел вызов нескольких процедур, с помощью которых реализуются конкретные действия. Начну с процедуры Prih. Ее задача - ввести данные о новом приходе. Очевидно, что данные будут храниться в файле, поэтому опишу сразу структуру данных. Данные выглядят в виде записи, которые состоят из полей. Например структура данных для приходов выглядит следующим образом :
(* Структура приходов *)
Type PPP = record
Number : LongInt; { номер прихода}
FirmName : String[22]; { фирма поставщик }
Date : String[10]; { дата прихода }
Kurs : Real; { курс доллара ЦБ РФ на день прихода}
TotalItems : LongInt; { кол-во пришедших наименований}
SebSumma : Real; { общая сумма прихода }
End;
(* Структура приходов для наименования}
Type PPPItems = Record
Number : LongInt; {ноиер наименования }
PrihodNum : LongInt; {номер прихода}
SkladNum : LongInt; {номер наименования на складе}
Name : String[lpname]; {наименование}
Rasf : String[lprasf]; {расфасовка}
Box : Integer; {кол-во штук в упаковке}
Kolvo : LongInt; {кол-во поступившего наименования}
SebPrice : Real; {себестоимость наименования}
Price : Real; {стоимость наименования}
SellTimes : Boolean; {зарезервировано}
End;
Эти строки находятся в модуле SKLTYPES.PAS. В нем же находится описание всех структур данных, а так же их связь с файлами и основной программой :
Var {ТИП ДАННЫХ}
PrihodData : PPP;
PrihodItemsData : PPPItems;
{ТИП ДАННЫХ В ФАЙЛЕ}
PrihodFile : File of PPP;
PrihodItemsFile : File of PPPItems;
Теперь, надо ввести данные. Для этого сначала появляется панель диалога для ввода даты прихода, курса прихода и реквизитов фирмы поставщика. Ее я создавал при помощи небольшой программы Dialog Designer 4.0. При создании панелей диалога при помощи это программы генерируется модульный файл в котором реализован код для отображения окна, его закрытия, так же содержится обработчик событий.
Ниже приведу текст модуля, cодержащего код для создания диалогового окна.
unit PRIHOD1;
interface
uses Drivers, Objects, Views, Dialogs, Validate;
type
PrihodDataRec = record
Field1 : String[10];
Field3 : String[13];
Field2 : String[22];
end;
PPrihodDataRec = ^PrihodDataRec;
{ TPrihodDataDialog }
PPrihodDataDialog = ^TPrihodDataDialog;
TPrihodDataDialog = object(TDialog)
constructor Init;
constructor Load(var S: TStream);
procedure HandleEvent(var Event: TEvent); virtual;
procedure Store(var S: TStream);
function Valid(Command : word): boolean; virtual;
destructor Done; virtual;
end;
Var
PRD : PrihodDataRec;
Const
RPrihodDataDialog : TStreamRec = (
ObjType: 12345; {<--- Insert a unique number >= 100 here!!}
VmtLink: Ofs(Typeof(TPrihodDataDialog)^);
Load : @TPrihodDataDialog.Load;
Store : @TPrihodDataDialog.Store);
implementation
{ TPrihodDataDialog }
constructor TPrihodDataDialog.Init;
var
R: TRect;
Control : PView;
begin
R.Assign(13, 3, 66, 17);
inherited Init(R, 'Приход / Ввод данных');
Flags := Flags and not wfMove;
R.Assign(24, 3, 36, 4);
Control := New(PInputLine, Init(R, 10));
Insert(Control);
PInputLine(Control)^.Validator := New(PPXPictureValidator, Init('{##}/{##}/{####}', true));