Автоматическое проставление штрихкода из предыдущих партий в активном документе в менеджере при вставке новой записи

Материал из wiki.standart-n.ru
Версия от 17:52, 23 марта 2016; Aleksnick (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Установить процедуру PR_GET_ALL_BARCODE

SET TERM ^ ;

create or alter procedure PR_GET_ALL_BARCODE (
    NAME_ID DM_UUID)
returns (
    BARCODE DM_TEXT)
as
declare variable BARCODE_TMP DM_TEXT;
declare variable I integer;
declare variable B_EXIT integer;
begin

 i=0;
 BARCODE_TMP = '';
 b_exit = 0;

 select
   left((select list(barcode,',') from (select distinct w2.barcode from wares w2 where w2.name_id = :NAME_ID)),248)
 from rdb$database
   into :BARCODE_TMP;

  while (b_exit=0) do
  begin
    i=i+1;
    select BARCODE from pr_get_first_barcode(cast(:BARCODE_TMP as dm_text)) into :BARCODE;
    if ((Trim(:BARCODE) = '') or (i>20))  Then --Ограничение на кол-во проходов цикла
        b_exit = 1;
    Else
     Begin
        BARCODE_TMP = replace(:BARCODE_TMP,:BARCODE, '');
        suspend;
     end
  end



end^

SET TERM ; ^

/* Following GRANT statetements are generated automatically */

GRANT SELECT ON WARES TO PROCEDURE PR_GET_ALL_BARCODE;
GRANT EXECUTE ON PROCEDURE PR_GET_FIRST_BARCODE TO PROCEDURE PR_GET_ALL_BARCODE;

/* Existing privileges on this procedure */

GRANT EXECUTE ON PROCEDURE PR_GET_ALL_BARCODE TO PROCEDURE PR_GET_PARTS_FOR_BARCODE;
GRANT EXECUTE ON PROCEDURE PR_GET_ALL_BARCODE TO PROCEDURE PR_GET_TMP_SNAME_BARCODE;
GRANT EXECUTE ON PROCEDURE PR_GET_ALL_BARCODE TO SYSDBA;

В DOC_DETAIL_ACTIVE_BI добавить

if (new.name_id is not null and (new.bcode_izg is null or Trim(new.bcode_izg) = '' )
     and exists(select first 1 id from docs where doc_type in (1,2,20) and id = new.doc_id)) then
  new.bcode_izg = (select list(barcode,',') from PR_GET_ALL_BARCODE(new.name_id));