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