Инструкция по настройке ф-ции "товар под заказ" — различия между версиями
Материал из wiki.standart-n.ru
Agk (обсуждение | вклад) (Новая страница: «==Общее== ==Менеджер== ===Создать новый тип документа "'Подготовка заказа покупателя "=== <pre> С…») |
Agk (обсуждение | вклад) |
||
| Строка 2: | Строка 2: | ||
==Менеджер== | ==Менеджер== | ||
| − | ===Создать новый тип документа " | + | ===Создать новый тип документа "Подготовка заказа покупателя "=== |
<pre> | <pre> | ||
Создать новый тип документа "'Подготовка заказа покупателя " | Создать новый тип документа "'Подготовка заказа покупателя " | ||
| Строка 8: | Строка 8: | ||
+ скопировать сетку с любого расходного документа; | + скопировать сетку с любого расходного документа; | ||
| + | </pre> | ||
| + | |||
| + | ===выполнить скрипт=== | ||
| + | <pre> | ||
| + | INSERT INTO WDICTS (ID, PARENT_ID, CAPTION, DESCRIPTION, SOURCE, STATUS, INSERTDT, ORDERBYDEFAULT, ORDERFIELD, FIELDLIST, INI, ICON) | ||
| + | VALUES (101, 0, 'Заказы', NULL, 'ORDERS ', 0, '2018-08-21 11:29:43', NULL, NULL, NULL, ';Обязательно должна быть сортировка по уникальному полю, в таблице нужны ключи по этому полу (возр/убыв) | ||
| + | [selectsql] | ||
| + | select * from vw_docs d1 where status = 1 and doc_type = 19 and not exists(select id from docs d where d.doc_type = 3 and d.parent_id = d1.id and d.doc_type2 is null) order by id | ||
| + | |||
| + | [updatesql] | ||
| + | |||
| + | [insertsql] | ||
| + | |||
| + | [deletesql] | ||
| + | |||
| + | [refreshsql] | ||
| + | Select | ||
| + | * | ||
| + | from vw_docs | ||
| + | where | ||
| + | ID = :ID | ||
| + | |||
| + | |||
| + | [cfSelect] | ||
| + | selectfieldexpression=SAGENT | ||
| + | AllwaysPartial=1 | ||
| + | [main] | ||
| + | returnfieldname=ID | ||
| + | captionfieldname=SAGENT', NULL); | ||
| + | |||
| + | COMMIT WORK; | ||
| + | |||
| + | |||
| + | |||
| + | SET TERM ^ ; | ||
| + | |||
| + | create or alter procedure PR_GET_ORDER_STATUS ( | ||
| + | DOC_ID integer, | ||
| + | DOC_TYPE integer) | ||
| + | returns ( | ||
| + | STATUS DM_TEXT) | ||
| + | as | ||
| + | begin | ||
| + | |||
| + | if (doc_type <> 19) then | ||
| + | begin | ||
| + | STATUS = ''; | ||
| + | suspend; | ||
| + | exit; | ||
| + | end | ||
| + | |||
| + | -- с проведенным чеком "исполнен" | ||
| + | if (exists(select id from docs d where d.doc_type = 3 and status = 1 and d.parent_id = :doc_id and doc_type2 is null)) Then | ||
| + | begin | ||
| + | STATUS = 'исполнен'; | ||
| + | suspend; | ||
| + | exit; | ||
| + | end | ||
| + | |||
| + | -- с отложенным чеком "готов к выдаче" | ||
| + | if (exists(select id from docs d where d.doc_type = 3 and status <> 1 and d.parent_id = :doc_id and doc_type2 is null)) Then | ||
| + | begin | ||
| + | STATUS = 'готов к выдаче'; | ||
| + | suspend; | ||
| + | exit; | ||
| + | end | ||
| + | |||
| + | -- без чека "в работе" | ||
| + | if (not exists(select id from docs d where d.doc_type = 3 and d.parent_id = :doc_id and doc_type2 is null)) Then | ||
| + | begin | ||
| + | STATUS = 'в работе'; | ||
| + | suspend; | ||
| + | exit; | ||
| + | end | ||
| + | |||
| + | end^ | ||
| + | |||
| + | SET TERM ; ^ | ||
| + | |||
| + | /* Following GRANT statements are generated automatically */ | ||
| + | |||
| + | GRANT SELECT ON DOCS TO PROCEDURE PR_GET_ORDER_STATUS; | ||
| + | |||
| + | /* Existing privileges on this procedure */ | ||
| + | |||
| + | GRANT EXECUTE ON PROCEDURE PR_GET_ORDER_STATUS TO SYSDBA; | ||
| + | |||
| + | </pre> | ||
| + | |||
| + | |||
| + | |||
| + | ===настроить сетку документа "Подготовка заказа покупателя"=== | ||
| + | |||
| + | ===добавить поле в VW_DOCS=== | ||
| + | <pre> | ||
| + | ORDER_STATUS | ||
| + | |||
| + | источник | ||
| + | |||
| + | (select status from pr_get_order_status(docs.id, docs.doc_type)) | ||
</pre> | </pre> | ||
Версия 19:00, 11 марта 2019
Содержание
Общее
Менеджер
Создать новый тип документа "Подготовка заказа покупателя "
Создать новый тип документа "'Подготовка заказа покупателя " INSERT INTO DOC_TYPES (ID, CAPTION, INSERTDT, BASE_TYPE, STATINI, REPORTS, VTYPE) VALUES (1001, 'Подготовка заказа покупателя (чек для кассы)', '21-SEP-2018 14:14:33.853', 2, NULL, NULL, 2); + скопировать сетку с любого расходного документа;
выполнить скрипт
INSERT INTO WDICTS (ID, PARENT_ID, CAPTION, DESCRIPTION, SOURCE, STATUS, INSERTDT, ORDERBYDEFAULT, ORDERFIELD, FIELDLIST, INI, ICON)
VALUES (101, 0, 'Заказы', NULL, 'ORDERS ', 0, '2018-08-21 11:29:43', NULL, NULL, NULL, ';Обязательно должна быть сортировка по уникальному полю, в таблице нужны ключи по этому полу (возр/убыв)
[selectsql]
select * from vw_docs d1 where status = 1 and doc_type = 19 and not exists(select id from docs d where d.doc_type = 3 and d.parent_id = d1.id and d.doc_type2 is null) order by id
[updatesql]
[insertsql]
[deletesql]
[refreshsql]
Select
*
from vw_docs
where
ID = :ID
[cfSelect]
selectfieldexpression=SAGENT
AllwaysPartial=1
[main]
returnfieldname=ID
captionfieldname=SAGENT', NULL);
COMMIT WORK;
SET TERM ^ ;
create or alter procedure PR_GET_ORDER_STATUS (
DOC_ID integer,
DOC_TYPE integer)
returns (
STATUS DM_TEXT)
as
begin
if (doc_type <> 19) then
begin
STATUS = '';
suspend;
exit;
end
-- с проведенным чеком "исполнен"
if (exists(select id from docs d where d.doc_type = 3 and status = 1 and d.parent_id = :doc_id and doc_type2 is null)) Then
begin
STATUS = 'исполнен';
suspend;
exit;
end
-- с отложенным чеком "готов к выдаче"
if (exists(select id from docs d where d.doc_type = 3 and status <> 1 and d.parent_id = :doc_id and doc_type2 is null)) Then
begin
STATUS = 'готов к выдаче';
suspend;
exit;
end
-- без чека "в работе"
if (not exists(select id from docs d where d.doc_type = 3 and d.parent_id = :doc_id and doc_type2 is null)) Then
begin
STATUS = 'в работе';
suspend;
exit;
end
end^
SET TERM ; ^
/* Following GRANT statements are generated automatically */
GRANT SELECT ON DOCS TO PROCEDURE PR_GET_ORDER_STATUS;
/* Existing privileges on this procedure */
GRANT EXECUTE ON PROCEDURE PR_GET_ORDER_STATUS TO SYSDBA;
настроить сетку документа "Подготовка заказа покупателя"
добавить поле в VW_DOCS
ORDER_STATUS источник (select status from pr_get_order_status(docs.id, docs.doc_type))
В ТМС проведение активного документа (-205)
if (doc_type = 1001) Then OrderPrepare;
и процедуру
procedure OrderPrepare;
var
sl: TStringList;
s2,t2: String;
begin
//Проверка, что документ не пустой
t:='select count(1) as cnt from doc_detail_active where doc_id='+doc_id;
query1:=ExecIBQuery(trn,t,1);
if (IBQuery_FieldByName_i(query1, 'cnt') = 0) then
begin
mb_res:=application.messagebox(PChar('Документ пуст. Проведение отменено'),'',MB_ICONSTOP);
program_result.Values['cancel']:='1';
exit;
end;
sl:=TStringList.Create;
s2:='[ORDERS]'#13#10+
'type=action'#13#10+
'caption=Заказы'#13#10+
'mode=wdict=101'#13#10+
'default='+#13#10;
sl.text:=s2;
if GetCustomParams(sl,'заполните значения')
then
s2:=sl.values['ORDERS']
else
begin
mb_res:=application.messagebox(PChar('Необходимо указать контрагента. Проведение документа отменено'),'',MB_ICONSTOP);
program_result.Values['cancel']:='1';
exit;
end;
mb_res:=application.messagebox(PChar('Подготовить данный товар к выдаче по указанному заказу?'),'',$00000004+$00000020);
if mb_res<>6 then
begin
mb_res:=application.messagebox(PChar('Проведение документа отменено пользователем'),'',MB_ICONSTOP);
program_result.Values['cancel']:='1';
exit;
end;
program_result.Values['cancel']:='1';
t2:='update docs set doc_type = 3, status = 2, parent_id = '+s2+' where id = '+doc_id;
query1:=ExecIBQuery(trn,t2,1);
EndIBTransaction(trn,1);
m_manager.logit(t2);
m_manager.INITACTIVEDOCS;
mb_res:=application.messagebox(PChar('Выполнено. Заказ переведен в статус "к выдаче (поступил)" и отправлен на кассу'),'Успех',MB_ICONINFORMATION);
end;