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

R.Assign(5, 3, 24, 4);

Insert(New(PLabel, Init(R, 'Дата : ', Control)));

R.Assign(24, 5, 39, 6);

Control := New(PInputLine, Init(R, 13));

Insert(Control);

PInputLine(Control)^.Validator := New(PPXPictureValidator, Init('*#[.#][#]', False));

R.Assign(5, 5, 24, 6);

Insert(New(PLabel, Init(R, 'Курс прихода : ', Control)));

R.Assign(24, 7, 48, 8);

Control := New(PInputLine, Init(R, 22));

Insert(Control);

R.Assign(5, 7, 24, 8);

Insert(New(PLabel, Init(R, 'Фирма поставщик : ', Control)));

R.Assign(7, 10, 18, 12);

Control := New(PButton, Init(R, '~С~брос', cmCancel, bfNormal));

Insert(Control);

R.Assign(23, 10, 41, 12);

Control := New(PButton, Init(R, '~Н~аименования', cmOK, bfDefault));

Insert(Control);

R.Assign(37, 3, 51, 4);

Control := New(PStaticText, Init(R, '[ ДД/ММ/ГГГГ ]'));

Insert(Control);

SelectNext(False);

end;

constructor TPrihodDataDialog.Load(var S: TStream);

begin

inherited Load(S);

end;

procedure TPrihodDataDialog.HandleEvent(var Event: TEvent);

begin

(*---

if Event.What = evMessage then

case Event.Command of

end; --*)

inherited HandleEvent(Event);

(*---

if Event.What = evMessage then

case Event.Command of

end; --*)

end;

procedure TPrihodDataDialog.Store(var S: TStream);

begin

inherited Store(S);

end;

function TPrihodDataDialog.Valid(Command : word): boolean;

var

Result : boolean;

begin

Result := inherited Valid(Command);

Valid := Result;

end;

destructor TPrihodDataDialog.Done;

begin

inherited Done;

end;

end.

Для отображения этого диалогового окна в процедуре PRIH испльзовался следующий код :

PRD.Field1:=ShowDate; { Дата прихода - текущая дата}

Str(GetKurs:-1:2,PRD.Field3); { Курс прихода - текущий курс }

FillChar(PRD.Field2[1],22,' '); {Онулить фирму поставщика}

c1:=ExecuteDialog(New(PPrihodDataDialog,Init),@PRD);[1] { Ввести на экран панель диалога}

После ввода курса, даты и фирмы поставщика нужно ввести собственно наименования. Для этого я создал диалоговое окно (см. модуль PRIH2.PAS), где вводится информации о наименовании (название, расфасовка, стоимость, себестоимость и т.д.). (см. рис. 3)

(рис.3)

Введя данные, их надо сохранить. Чтобы это сделать надо сначала открыть файл, затем в его конец записать данные и в конце этот файл закрыть. Это делается приблизительно так ( подробно см. файл FIRMA.PAS) :

OpenPrihodFile; { Процедура открытия файла см.модуль SklFiles.Pas}

Seek(PrihodFile,FileSize(PrihodFile)-1);

Write(PrihodFile,PrihodData);

ClosePrihodFile; { см. модуль SklFiles.Pas}

Если нажимается кнопка СБРОС, то вызывается процедура сброса прихода в которой все задействованные файлы данных усекаются до предыдущей длина (в начале процедуры PRIH запоминаются текущие длины файлов) при помощи стандартной процедуры TRUNCATE.

После успешного ввода данных появляется запрос о печати приходной накладной. Печать осуществляется стандартными средствами (см. процедуры PrintPrihodNakl и PrintEndOfPrihodNakl в модуле SklUnit). С помощью константы LST, компьютер связывается с печатающим устройством на LPT1, затем процедурами Writeln(LST,‘строка для печати’) данные выводятся на принтер. Все введенные данные помещаются в файлы данных : SKLAD.001 (Товар на складе) , PRIHOD.001 (Заголовки приходов), PRIHOD.002 (Пришедшие наименования). Затем пользователь получает доступ к следующим командам меню : Данные-Склад, Данные-Приходы, Печать-Прайс-Лист, Печать-Отчет о наличии товара на складе, Клиент-Продажа. Основной из вышеперечисленных команд является Клиент-Продажа. При помощи этой команды пользователь должен выписать накладную по заказу клиента. Реализовал эту команду так : Появляется диалоговое окно со списком наименований, имеющихся на складе (В нем пользователь выбирает продаваемые наименования и их количества). Затем при нажатии на кнопку ОПЛАТА появляется окно со списком всех выбранных наименований (накладная) в котором предоставляется возможность отредактировать введенные данные (изменить количество каждого наименования, его стоимость и курс доллара). Далее после нажатия на ОПЛАТА на экране появляется диалоговое окно для ввода следующей информации : реквизиты клиента, форма сделки (реализация), округление суммы накладной, дата накладной. После нажатия на ВЫПИСАТЬ НАКЛАДНУЮ у пользователя программы спрашивает, нужно ли печатать накладную и если товар дается клиенту не на реализацию, то спрашивается, нужно ли печатать приходный кассовый ордер. Все введенные данные помещаются в файлы данных : SDELKA.001 (Заголовки сделок), SDELKA.002 (Наименования сделок), в файле SKLAD.001 делаются соответствующие изменения по количеству оставшегося товара.

Для реализации диалогового окна со списком я создал коллекцию строк наименований имеющихся на складе, причем если товара на складе не осталось то это наименование не помещаеся в коллекцию.

Data1:=New(PStrSor,Init(10,1)); {Указатель на коллекцию }

For N:=0 to FileSize(DataFile)-1 do {Каждую позицию проверить, если нулевая то не вносить в коллекцию)

begin {1}

Seek(DataFile,n);

Read(DataFile,Data); {Считываем данные}

val(Data.ProductOst,tempccc,code);

Str(Data1^.Count+1,Numm);

if tempccc=0 then goto ccc; { Если нулевая позиция, то не вносить в коллекцию }

o[0]:=chr(57);

FillChar(o[1],57,' ');

with data do

begin {Создание строки типа : Номер, Наименование, Расфасовка}

move(Numm[1],o[2],Length(Numm));

move(ProductName[1],o[succ(lpnum-1)+4],Length(Data.ProductName));

move(ProductRasf[1],o[succ(lpnum+lpname)+5],Length(Data.ProductRasf));

move(ProductNumber[1],o[50],Length(Data.ProductNumber));

end;

Data1^.Insert(NewStr(o)); {Помещаю ее в коллекцию строк}

ccc:

end; {1}

Для реализации списка строк в Turbo Vision предусмотрен объект TListBox. Это объект создает специальное окно скроллера с указателем на текущий элемент. Наименования я поместил в вышеописанную коллекцию строк, указатель на которую передал объекту с помощью метода TListBox.NewList.

Var

SCR : PScrollBar ;

LIST : PLitstBox;

.

Begin

.

RR.Assign(50,05,51,17); {Координаты скроллера}

Scr:=New(PscrollBar,Init(RR)); {Указатель на полосу скроллера}

Insert(Scr); {Создаем скроллер}

R.Assign(03,05,50,17); {Координаты окна со списком}

List:=New(PMyListBox,Init(R,1,scr)); {Указатель на окно со списком}

List^.NewList(Data1); {Связывание окна со коллекцией строк}

Insert(list); {Создаем окно со списком }

End;

Диалоговое окно выбора наименований выглядит следующим образом :

Перейду теперь к описанию процедуры Данные-Сделки. При выборе соответствующего пункта меню на экране почвляется диалоговое окно выбора периода для просмотра сделок. В нем нужно ввести нижнюю и верхнюю границы периода.


Страница: