Разработка системы управления работой коммерческой компании
Рефераты >> Предпринимательство >> Разработка системы управления работой коммерческой компании

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


Страница: