Разработка системы управления работой коммерческой компанииРефераты >> Предпринимательство >> Разработка системы управления работой коммерческой компании
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;
Диалоговое окно выбора наименований выглядит следующим образом :
Перейду теперь к описанию процедуры Данные-Сделки. При выборе соответствующего пункта меню на экране почвляется диалоговое окно выбора периода для просмотра сделок. В нем нужно ввести нижнюю и верхнюю границы периода.