Инструкция по настройке ф-ции "товар под заказ"

Материал из wiki.standart-n.ru
Перейти к: навигация, поиск

Общее

Менеджер

Создать новый тип документа "Подготовка заказа покупателя "

Создать новый тип документа "'Подготовка заказа покупателя "
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;