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

Материал из wiki.standart-n.ru
Перейти к: навигация, поиск
(Новая страница: «Установить процедуру '''PR_GET_ALL_BARCODE''' <pre> SET TERM ^ ; create or alter procedure PR_GET_ALL_BARCODE ( NAME_ID DM_UUID) returns…»)
 
 
(не показаны 2 промежуточные версии ещё одного участника)
Строка 1: Строка 1:
Установить процедуру '''PR_GET_ALL_BARCODE'''
+
В конец триггера DOC_DETAIL_ACTIVE_BI добавить
  
 
<pre>
 
<pre>
SET TERM ^ ;
+
--Если указано наименование, но не указан ШК изготовителя - ищем его в товарах и подставляем по умолчанию
 
+
if (new.name_id is not null and (new.bcode_izg is null or Trim(new.bcode_izg) = '' or Trim(new.bcode_izg) = '0' )
create or alter procedure PR_GET_ALL_BARCODE (
+
     and exists(select first 1 id from docs where doc_type in (1,2,20,40) and id = new.doc_id)) then
    NAME_ID DM_UUID)
+
select first 1 w.barcode from wares w where w.name_id = new.name_id and w.barcode is not null and Trim(w.barcode) <> '' and Trim(w.barcode) <> '0' into new.bcode_izg;
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;
+
</pre>
+
 
+
В '''DOC_DETAIL_ACTIVE_BI''' добавить
+
 
+
<pre>
+
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));
+
 
</pre>
 
</pre>

Текущая версия на 15:25, 29 апреля 2016

В конец триггера DOC_DETAIL_ACTIVE_BI добавить

--Если указано наименование, но не указан ШК изготовителя - ищем его в товарах и подставляем по умолчанию 
if (new.name_id is not null and (new.bcode_izg is null or Trim(new.bcode_izg) = '' or Trim(new.bcode_izg) = '0' )
     and exists(select first 1 id from docs where doc_type in (1,2,20,40) and id = new.doc_id)) then
 select first 1 w.barcode from wares w where w.name_id = new.name_id and w.barcode is not null and Trim(w.barcode) <> '' and Trim(w.barcode) <> '0' into new.bcode_izg;