Автоматическое проставление штрихкода из предыдущих партий в активном документе в менеджере при вставке новой записи
Материал из 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));