Файл: Проектирование реализации операций бизнес-процесса «Запасы-склад (приходование товара) »..pdf
Добавлен: 26.05.2023
Просмотров: 100
Скачиваний: 3
СОДЕРЖАНИЕ
2.1. Информационная модель и её описание.
2.2. Характеристика нормативно-справочной, входной и оперативной информации
2.3. Характеристика результатной информации.
2.4. Общие положения (дерево функций и сценарий диалога).
2.5. Характеристика базы данных.
2.6. Структурная схема пакета (дерево вызова программных модулей).
form_prihod_prod.docum_number.Text:= dm.table_prihod.FieldByName('number_docum').value;
form_prihod_prod.DateTimePicker1.Date:= dm.table_prihod.FieldByName('date_prihoda').Value;
end;
//показываем форму prihod_prod
form_prihod_prod.Caption:='Приход: '+dm.table_prihod.FieldByName('number_docum').AsString;
form_prihod_prod.Showmodal;
end;
procedure TForm_prihod.FormActivate(Sender: TObject);
begin
//так как таблица приход использует данные из таблиц единицы измерения, категории продуктов, поставщики //и продукты
//то мы должны проверить заполнены они или нет
if form_general.table_ed_izmer.RecordCount=0 then begin ShowMessage('У Вас не заполнен справочник "Единиц измерения". Для продолжения работы Вам необходимо заполнить справочник.');close;end
else begin
if form_general.table_product_group.RecordCount=0 then begin ShowMessage('У Вас не заполнен справочник "Категории продуктов". Для продолжения работы Вам необходимо заполнить справочник.');close;end
else begin
if form_general.table_postav_ik.RecordCount=0 then begin ShowMessage('У Вас не заполнен справочник "Поставщики". Для продолжения работы Вам необходимо заполнить справочник.');close;end
else begin
if form_general.table_products.RecordCount=0 then begin ShowMessage('У Вас не заполнен справочник "Продукты". Для продолжения работы Вам необходимо заполнить справочник.');close;end
else begin
//обновляем данные
form_general.table_ed_izmer.Refresh;
form_general.table_product_group.Refresh;
form_general.table_postav_ik.Refresh;
form_general.table_products.Refresh;
//установка фокуса при активации формы
dbgrid1.SetFocus;
end;
end;
end;
end;
end;
procedure TForm_prihod.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//процедура закрытия формы
Action:=cafree;
end;
procedure TForm_prihod_prod.Button1Click(Sender: TObject);
begin
//новая запись
if docum_number.Text='' then begin ShowMessage('Не заполнено поле "Номер документа"'); docum_number.SetFocus; end
else begin
if (table_copy_prihod.Lookup('number_docum', docum_number.text, 'number_docum')<>null) and (dm.table_prihod.FieldByName('number_docum').AsString<>docum_number.Text) then begin ShowMessage('Такой номер уже существует');docum_number.Text:=''; docum_number.SetFocus; end
else begin
if dblookup_postav_ik.Text='' then begin ShowMessage('Не заполнено поле "Поставщик"'); dblookup_postav_ik.SetFocus;end
else begin
if DateTimePicker1.ToString='' then begin ShowMessage('Не заполнено поле "Дата прихода"'); DateTimePicker1.SetFocus;end
else begin
dm.table_prihod.FieldByName('date_prihoda').Value:=DateTimePicker1.Date;
dm.table_prihod.FieldByName('number_docum').Value:=docum_number.text;
dm.table_prihod.Post;
dm.table_prihod.edit;
table_storage.Edit;
table_storage.append;
table_storage.FieldByName('id_prihod').Value:= dm.table_prihod.FieldByName('id').AsInteger;
form_select_prod.Showmodal;
end;
end;
end;
end;
end;
procedure TForm_prihod_prod.Button2Click(Sender: TObject);
begin
//удалить запись
if dbgrid1.DataSource.DataSet.RecordCount<>0 then
begin
if (MessageBox(Handle, 'Удалить запись?', 'Внимание !!!', MB_YESNO) = IDYES) then
begin
table_storage.Edit;
table_storage.Delete;
adoquery_summa.Active:=false;
adoquery_summa.Active:=true;
end;
end
else ShowMessage('Нет записей для удаления');
end;
procedure TForm_prihod_prod.Button3Click(Sender: TObject);
begin
//закрытие формы
Close;
end;
procedure TForm_prihod_prod.DBGrid1DblClick(Sender: TObject);
begin
//двойной клик для редактирования записи
if docum_number.Text='' then begin ShowMessage('Не заполнено поле "Номер документа"'); docum_number.SetFocus; end
else begin
if (table_copy_prihod.Lookup('number_docum', docum_number.text, 'number_docum')<>null) and (dm.table_prihod.FieldByName('number_docum').AsString<>docum_number.Text) then begin ShowMessage('Такой номер уже существует'); docum_number.Text:=''; docum_number.SetFocus; end
else begin
if dblookup_postav_ik.Text='' then begin ShowMessage('Не заполнено поле "Поставщик"'); dblookup_postav_ik.SetFocus;end
else begin
if DateTimePicker1.ToString='' then begin ShowMessage('Не заполнено поле "Дата прихода"'); DateTimePicker1.SetFocus;end
else begin
dm.table_prihod.FieldByName('date_prihoda').Value:= DateTimePicker1.Date;
dm.table_prihod.FieldByName('number_docum').Value:= docum_number.text;
dm.table_prihod.Post;
dm.table_prihod.edit;
table_storage.Edit;
table_storage.FieldByName('id_prihod').Value:= dm.table_prihod.FieldByName('id').AsInteger;
if table_storage.FieldByName('id_product_group').AsInteger<>0 then
form_select_prod.DBLookup_product_group.KeyValue:= table_storage.FieldByName('id_product_group').Value;
//открываем форму редактирования
form_select_prod.Showmodal;
end;
end;
end;
end;
end;
procedure TForm_prihod_prod.FormActivate(Sender: TObject);
begin
//пересчет итоговой суммы при активации формы
adoquery_summa.Active:=false;
adoquery_summa.Active:=true;
end;
procedure TForm_prihod_prod.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
//проверка перед закрытием формы и закрытие формы
//сохранение формы
if ( MessageBox(Handle, 'Cохранить документ?', 'Внимание !!!', MB_OkCANCEL)= IDOk) then begin
if docum_number.Text='' then begin ShowMessage('Не заполнено поле "Номер документа"'); CanClose:=false;docum_number.SetFocus; end
else begin
if (table_copy_prihod.Lookup('number_docum',docum_number.Text,'number_docum')<>null) and (dm.table_prihod.FieldByName('number_docum').AsString<>docum_number.Text)then begin ShowMessage('Такой номер уже существует');CanClose:=false;docum_number.Text:=''; docum_number.SetFocus; end
else begin
if dblookup_postav_ik.Text='' then begin ShowMessage('Не заполнено поле "Поставщик"');CanClose:=false;dblookup_postav_ik.SetFocus;end
else begin
if DateTimePicker1.ToString='' then begin ShowMessage('Не заполнено поле "Дата прихода"');CanClose:=false;DateTimePicker1.SetFocus;end
else begin
dm.table_prihod.Edit;
dm.table_prihod.FieldByName('date_prihoda').Value:=DateTimePicker1.Date;
dm.table_prihod.FieldByName('number_docum').Value:=docum_number.text;
dm.table_prihod.FieldByName('sum').Value:=dbedit_summa.Field.Value;
dm.table_prihod.post;
end;
end;
end;
end;
end
//при отказе от сохранения, проверяем, если уже заполненные записи продуктов и если такие есть, то не даем закрыть форму, пока все не будет заполнено правильно
else if dbgrid1.DataSource.DataSet.RecordCount<>0 then
begin
if docum_number.Text='' then begin ShowMessage('Не заполнено поле "Номер документа"'); CanClose:=false;docum_number.SetFocus; end
else begin
if (table_copy_prihod.Lookup('number_docum',docum_number.Text, 'number_docum')<>null) and (dm.table_prihod.FieldByName('number_docum').AsString <> docum_number.Text) then begin ShowMessage('Такой номер уже существует');CanClose:=false;docum_number.Text:=''; docum_number.SetFocus; end
else begin
if dblookup_postav_ik.Text='' then begin ShowMessage('Не заполнено поле "Поставщик"');CanClose:=false;dblookup_postav_ik.SetFocus;end
else begin
if DateTimePicker1.ToString='' then begin ShowMessage('Не заполнено поле "Дата прихода"');CanClose:=false;DateTimePicker1.SetFocus;end
else begin
dm.table_prihod.Edit;
dm.table_prihod.FieldByName('date_prihoda').Value:= DateTimePicker1.Date;
dm.table_prihod.FieldByName('number_docum').Value:= docum_number.text;
dm.table_prihod.FieldByName('sum').Value:= dbedit_summa.Field.Value;
dm.table_prihod.post;
end;
end;
end;
end;
end
//если записей нет, отменяем изменения
else dm.table_prihod.cancel;
end;
для события OnCalcFields компонента table_storage:
procedure TForm_prihod_prod.table_storageCalcFields(DataSet: TDataSet);
begin
//вычисляемое поле сумма
table_storage.FieldByName('summa').Value:= table_storage.FieldByName('price').Value* table_storage.FieldByName('quantity').Value;
end;
procedure TForm_select_prod.Button1Click(Sender: TObject);
begin
//Нажатие на кнопку ОК. Проверяем и сохраняем.
if dblookup_products.Text='' then begin ShowMessage('Не заполнено поле "Продукт"');dblookup_products.SetFocus;end
else begin
if dblookup_ed_izmer.Text='' then begin ShowMessage('Не заполнено поле "Ед.изм."');dblookup_ed_izmer.SetFocus;end
else begin
if quantity.Text='' then begin ShowMessage('Не заполнено поле "Количество"');quantity.SetFocus;end
else begin
if price.Text='' then begin ShowMessage('Не заполнено поле "Цена"'); price.SetFocus;end
else begin
if DateTimePicker1.ToString='' then begin ShowMessage('Не заполнено поле "Срок реализации"'); DateTimePicker1.SetFocus;end
else begin
if ( MessageBox(Handle, 'Cохранить документ?', 'Внимание !!!', MB_OkCANCEL)= IDOk) then begin
form_prihod_prod.table_storage.Edit; form_prihod_prod.table_storage.FieldByName('id_product_group').Value:= form_general.table_products.FieldByName('id_product_group').Value;
form_prihod_prod.table_storage.FieldByName('date_realization').Value:= DateTimePicker1.Date;
form_prihod_prod.table_storage.Post;
end
else form_prihod_prod.table_storage.Cancel;
close;
end;
end;
end;
end;
end;
end;
для события OnClick кнопки Button2 (Отмена):
procedure TForm_select_prod.Button2Click(Sender: TObject);
begin
//кнопка отмена
form_prihod_prod.table_storage.Cancel;
form_select_prod.Close;
end;
для события OnClick компонента DBLookup_products:
procedure TForm_select_prod.DBLookup_productsClick(Sender: TObject);
begin
//заполняем поля по умолчанию при выборе продукта
DBLookup_ed_izmer.KeyValue:=products.DataSet.FieldByName('id_ed_izmer').Value;
form_prihod_prod.table_storage.FieldByName('id_ed_izmer').Value:= dblookup_ed_izmer.KeyValue;
DateTimePicker1.Date:=sysutils.Date+ products.DataSet.FieldByName('time_hraneniya').Value;
end;
для события OnClick компонента DBLookup_product_group:
procedure TForm_select_prod.DBLookup_product_groupClick(Sender: TObject);
begin
//включем фильтр при выборе группы продукта
form_general.table_products.Filtered:=true;
form_general.table_products.Filter:='id_product_group='+ inttostr(DBLookup_product_group.KeyValue);
//отключаем фильтр, если в выбранной категории нет продуктов
if products.DataSet.RecordCount=0 then
begin ShowMessage('Список продуктов пустой, выберите другую категорию или заполните справочник "Продукты".');
form_general.table_products.Filtered:=false;
end;
end;
для события OnClose формы form_select_prod: