Установка Единого Окна — различия между версиями

Материал из wiki.standart-n.ru
Перейти к: навигация, поиск
(Лехина процедура по удалению тильд из наименований)
Строка 1: Строка 1:
 +
==Предварительная подготовка==
 +
1) Настраиваем двустороннюю синхронизацию таблиц WARES_TREB и G$PROFILES;
 +
2) Проверяем, что у клиентов в PARAMS есть параметр CODE_PROFILE (Код профиля) и он корректный;
 +
3) Обновляем у всех клиентов Менеджер до версии не ниже ManagerXP2_273_5 от декабря 2016г.
 +
 
==Подготовка серверной базы и скриптов для Единого Окна==
 
==Подготовка серверной базы и скриптов для Единого Окна==
[[Подготовка серверной базы и скриптов для Единого Окна]]
+
1) Обновляем скрипты синхронизации на сервере;
 +
2) Блокируем синхронизацию (оставляем только g$tasks);
 +
3) Готовим серверную базу;
  
==Заблокировать синхронизацию==
 
[[Заблокировать синхронизацию| Заблокировать синхронизацию, но, чтоб задания (g$tasks) выполнялись]]
 
  
 
+
==Останавливаем торговлю в точках==
==Лехина процедура по сжатию варесов засчет пустых значений стран и изготовителей==
+
 
<pre>
 
<pre>
 +
CREATE EXCEPTION EX_DONT_WORK 'Вход в программу заблокирован. Идет обновление...';
 
SET TERM ^ ;
 
SET TERM ^ ;
 
+
CREATE OR ALTER TRIGGER SESSIONS_DONT_WORK_BI0 FOR SESSIONS
create or alter procedure PR_COMPRESS_WARES
+
ACTIVE BEFORE INSERT POSITION 0
returns (
+
    OUT DM_UUID_NULL)
+
as
+
declare variable WARE_ID DM_UUID;
+
declare variable NAME_ID DM_UUID;
+
declare variable IZG_ID DM_UUID;
+
declare variable COUNTRY_ID DM_UUID;
+
declare variable BARCODE DM_TEXT;
+
declare variable NEW_VALUE DM_UUID_NULL;
+
declare variable NULL_VALUE DM_UUID_NULL;
+
begin
+
/* заполняем страну */
+
null_value = null;
+
select v.id from vals v where v.alttype=0 and V.VTYPE = 2 and v.svalue='' into :null_value;
+
for select W.ID,
+
            W.NAME_ID,
+
            W.IZG_ID,
+
            W.COUNTRY_ID,
+
            W.BARCODE
+
    from WARES W
+
    where w.country_id=:null_value
+
    into :WARE_ID,
+
          :NAME_ID,
+
          :IZG_ID,
+
          :COUNTRY_ID,
+
          :BARCODE
+
do
+
begin
+
  NEW_VALUE = null;
+
 
+
  select first 1 W.COUNTRY_ID
+
  from WARES W
+
  where 1 = 1
+
        and W.NAME_ID = :NAME_ID
+
        and ((W.IZG_ID = :IZG_ID) or (W.BARCODE = :BARCODE))
+
        and W.COUNTRY_ID <> :COUNTRY_ID
+
  order by W.INSERTDT desc
+
  into :NEW_VALUE;
+
 
+
  if (:NEW_VALUE is not null) then
+
  update WARES W set W.COUNTRY_ID = :NEW_VALUE where W.ID = :WARE_ID;
+
 
+
  end
+
 
+
 
+
/* заполняем изготовителя  */
+
null_value = null;
+
select v.id from vals v where v.alttype=0 and V.VTYPE = 3 and v.svalue='' into :null_value;
+
for select W.ID,
+
            W.NAME_ID,
+
            W.IZG_ID,
+
            W.COUNTRY_ID,
+
            W.BARCODE
+
    from WARES W
+
    where w.izg_id=:null_value
+
    into :WARE_ID,
+
          :NAME_ID,
+
          :IZG_ID,
+
          :COUNTRY_ID,
+
          :BARCODE
+
do
+
begin
+
  NEW_VALUE = null;
+
  select first 1 W.IZG_ID
+
  from WARES W
+
  where 1 = 1
+
        and W.NAME_ID = :NAME_ID
+
        and W.IZG_ID <> :IZG_ID
+
        and ((W.COUNTRY_ID = :COUNTRY_ID) or (W.BARCODE = :BARCODE))
+
  order by W.INSERTDT desc
+
  into :NEW_VALUE;
+
  if (:NEW_VALUE is not null) then
+
  update WARES W set W.IZG_ID = :NEW_VALUE where W.ID = :WARE_ID;
+
end
+
 
+
 
+
 
+
/* заполняем штрихкод */
+
for select W.ID,
+
            W.NAME_ID,
+
            W.IZG_ID,
+
            W.COUNTRY_ID,
+
            W.BARCODE
+
    from WARES W
+
    where w.barcode = ''
+
    into :WARE_ID,
+
          :NAME_ID,
+
          :IZG_ID,
+
          :COUNTRY_ID,
+
          :BARCODE
+
do
+
begin
+
  NEW_VALUE = null;
+
  select first 1 W.barcode
+
  from WARES W
+
  where 1 = 1
+
        and W.NAME_ID = :NAME_ID
+
        and W.barcode <> :barcode
+
        and ((W.COUNTRY_ID = :COUNTRY_ID) or (W.izg_id = :izg_id))
+
  order by W.INSERTDT desc
+
  into :NEW_VALUE;
+
  if (:NEW_VALUE is not null) then
+
  update WARES W set W.barcode = :NEW_VALUE where W.ID = :WARE_ID;
+
end
+
 
+
 
+
  suspend;
+
 
+
end^
+
 
+
SET TERM ; ^
+
 
+
/* Following GRANT statetements are generated automatically */
+
 
+
GRANT SELECT ON VALS TO PROCEDURE PR_COMPRESS_WARES;
+
GRANT SELECT,UPDATE ON WARES TO PROCEDURE PR_COMPRESS_WARES;
+
 
+
/* Existing privileges on this procedure */
+
 
+
GRANT EXECUTE ON PROCEDURE PR_COMPRESS_WARES TO SYSDBA;
+
</pre>
+
 
+
==Лехина процедура по удалению тильд из наименований==
+
<pre>
+
SET TERM ^ ;
+
 
+
create or alter procedure PR_MAKE_AWESOME_SNAME
+
returns (
+
    SNAME_START DM_TEXT,
+
    SNAME_FINISH DM_TEXT,
+
    S DM_TEXT1024)
+
as
+
declare variable I DM_ID;
+
declare variable K DM_METADATANAME;
+
declare variable AWESOME DM_TEXT;
+
declare variable OLD_ID DM_UUID;
+
declare variable NEW_ID DM_UUID_NULL;
+
declare variable ALTTYPE DM_STATUS;
+
declare variable VTYPE DM_STATUS;
+
declare variable CHECKED_LINE DM_UUID_NULL;
+
begin
+
 
+
  /* исправляем наименования */
+
  checked_line='';
+
  for select first 1000 w.name_id, v.svalue, v.vtype, v.alttype
+
      from wares w
+
      left join vals v on v.ID = w.name_id
+
      where (v.svalue starting with ' ')
+
      or (v.svalue starting with '@')
+
      or (v.svalue starting with '~')
+
      or (v.svalue starting with 'ъ')
+
      or (v.svalue starting with 'Ъ')
+
      order by w.name_id asc
+
      into :old_ID, :AWESOME, :vtype, :alttype
+
  do
+
  begin
+
    if (:old_id<>:checked_line) then
+
    begin
+
    checked_line=:old_id;
+
    s='';
+
    sname_start = :AWESOME;
+
 
+
    new_id = null;
+
    I = 110;
+
    K = '';
+
 
+
    AWESOME=trim(:AWESOME);
+
 
+
    if (upper(left(:awesome,1))='Ъ') then
+
      awesome=right(:awesome,char_length(:awesome)-1);
+
 
+
    while (I > 0) do
+
    begin
+
      K = '~' || :I;
+
      I = :I - 1;
+
      AWESOME = replace(:AWESOME, trim(:K || '_'), '');
+
      AWESOME = replace(:AWESOME, trim(:K), '');
+
    end
+
 
+
    AWESOME = replace(:AWESOME, '~', '');
+
    AWESOME = replace(:AWESOME, '@', '');
+
    AWESOME = replace(:AWESOME, '_', '');
+
    AWESOME = replace(:AWESOME, '''', '');
+
    AWESOME = replace(:AWESOME, '"', '');
+
    AWESOME = replace(:AWESOME, '  ', ' ');
+
 
+
 
+
    select first 1 v.id from vals v where v.alttype=:alttype and v.vtype=:vtype and v.svalue=:AWESOME into :new_id;
+
 
+
    if (:new_id is null) then
+
      --s='update vals v set v.svalue='''||:AWESOME||''', v.uppervalue=upper('''||:AWESOME||''') where v.id='''||:old_id||'''';
+
      update vals v set v.svalue=:AWESOME, v.uppervalue=upper(:AWESOME) where v.id=:old_id;
+
    else
+
      --s='update wares w set w.name_id='''||:new_id||''' where w.name_id='''||:old_id||'''';
+
      update wares w set w.name_id=:new_id, w.sname=:awesome, w.mgn_name=:awesome where w.name_id=:old_id;
+
 
+
    sname_finish = :AWESOME;
+
    suspend;
+
    end
+
  end
+
 
+
 
+
  /* исправляем изготовителя */
+
  checked_line='';
+
  for select first 1000 w.izg_id, v.svalue, v.vtype, v.alttype
+
      from wares w
+
      left join vals v on v.ID = w.izg_id
+
      where (v.svalue starting with ' ')
+
      or (v.svalue starting with '@')
+
      or (v.svalue starting with '~')
+
      or (v.svalue starting with 'ъ')
+
      or (v.svalue starting with 'Ъ')
+
      order by w.izg_id asc
+
      into :old_ID, :AWESOME, :vtype, :alttype
+
  do
+
  begin
+
    if (:old_id<>:checked_line) then
+
    begin
+
    checked_line=:old_id;
+
    s='';
+
    sname_start = :AWESOME;
+
 
+
    new_id = null;
+
    I = 110;
+
    K = '';
+
 
+
    AWESOME=trim(:AWESOME);
+
 
+
  if (upper(left(:awesome,1))='Ъ') then
+
      awesome=right(:awesome,char_length(:awesome)-1);
+
 
+
    while (I > 0) do
+
    begin
+
      K = '~' || :I;
+
      I = :I - 1;
+
      AWESOME = replace(:AWESOME, trim(:K || '_'), '');
+
      AWESOME = replace(:AWESOME, trim(:K), '');
+
    end
+
 
+
    AWESOME = replace(:AWESOME, '~', '');
+
    AWESOME = replace(:AWESOME, '@', '');
+
    AWESOME = replace(:AWESOME, '_', '');
+
    AWESOME = replace(:AWESOME, '''', '');
+
    AWESOME = replace(:AWESOME, '"', '');
+
    AWESOME = replace(:AWESOME, '  ', ' ');
+
 
+
 
+
    select first 1 v.id from vals v where v.alttype=:alttype and v.vtype=:vtype and v.svalue=:AWESOME into :new_id;
+
 
+
    if (:new_id is null) then
+
      --s='update vals v set v.svalue='''||:AWESOME||''', v.uppervalue=upper('''||:AWESOME||''') where v.id='''||:old_id||'''';
+
      update vals v set v.svalue=:AWESOME, v.uppervalue=upper(:AWESOME) where v.id=:old_id;
+
    else
+
      --s='update wares w set w.izg_id='''||:new_id||''' where w.izg_id='''||:old_id||'''';
+
      update wares w set w.izg_id=:new_id where w.izg_id=:old_id;
+
 
+
    sname_finish = :AWESOME;
+
    suspend;
+
    end
+
  end
+
 
+
 
+
 
+
  /* исправляем страну */
+
  checked_line='';
+
  for select first 1000 w.country_id, v.svalue, v.vtype, v.alttype
+
      from wares w
+
      left join vals v on v.ID = w.country_id
+
      where (v.svalue starting with ' ')
+
      or (v.svalue starting with '@')
+
      or (v.svalue starting with '~')
+
      or (v.svalue starting with 'ъ')
+
      or (v.svalue starting with 'Ъ')
+
      order by w.country_id asc
+
      into :old_ID, :AWESOME, :vtype, :alttype
+
  do
+
  begin
+
    if (:old_id<>:checked_line) then
+
    begin
+
    checked_line=:old_id;
+
    s='';
+
    sname_start = :AWESOME;
+
 
+
    new_id = null;
+
    I = 110;
+
    K = '';
+
 
+
    AWESOME=trim(:AWESOME);
+
 
+
    if (upper(left(:awesome,1))='Ъ') then
+
      awesome=right(:awesome,char_length(:awesome)-1);
+
 
+
    while (I > 0) do
+
    begin
+
      K = '~' || :I;
+
      I = :I - 1;
+
      AWESOME = replace(:AWESOME, trim(:K || '_'), '');
+
      AWESOME = replace(:AWESOME, trim(:K), '');
+
    end
+
 
+
    AWESOME = replace(:AWESOME, '~', '');
+
    AWESOME = replace(:AWESOME, '@', '');
+
    AWESOME = replace(:AWESOME, '_', '');
+
    AWESOME = replace(:AWESOME, '''', '');
+
    AWESOME = replace(:AWESOME, '"', '');
+
    AWESOME = replace(:AWESOME, '  ', ' ');
+
 
+
 
+
    select first 1 v.id from vals v where v.alttype=:alttype and v.vtype=:vtype and v.svalue=:AWESOME into :new_id;
+
 
+
    if (:new_id is null) then
+
      --s='update vals v set v.svalue='''||:AWESOME||''', v.uppervalue=upper('''||:AWESOME||''') where v.id='''||:old_id||'''';
+
      update vals v set v.svalue=:AWESOME, v.uppervalue=upper(:AWESOME) where v.id=:old_id;
+
    else
+
      --s='update wares w set w.country_id='''||:new_id||''' where w.country_id='''||:old_id||'''';
+
      update wares w set w.country_id=:new_id where w.country_id=:old_id;
+
 
+
    sname_finish = :AWESOME;
+
    suspend;
+
    end
+
  end
+
 
+
  --suspend;
+
 
+
end^
+
 
+
SET TERM ; ^
+
 
+
/* Following GRANT statetements are generated automatically */
+
 
+
GRANT SELECT,UPDATE ON WARES TO PROCEDURE PR_MAKE_AWESOME_SNAME;
+
GRANT SELECT,UPDATE ON VALS TO PROCEDURE PR_MAKE_AWESOME_SNAME;
+
 
+
/* Existing privileges on this procedure */
+
 
+
GRANT EXECUTE ON PROCEDURE PR_MAKE_AWESOME_SNAME TO SYSDBA;
+
</pre>
+
 
+
==Лехин триггер, чтобы не пересвязывались партии - НЕ ТЕСТИРОВАЛСЯ!!!==
+
<pre>
+
/******************************************************************************/
+
/***      Following SET SQL DIALECT is just for the Database Comparer      ***/
+
/******************************************************************************/
+
SET SQL DIALECT 3;
+
 
+
 
+
SET TERM ^ ;
+
 
+
 
+
 
+
CREATE OR ALTER TRIGGER WARES_BIU_COWA FOR WARES
+
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
+
 
AS
 
AS
/* заносим все поля в таблице wares в переменные */
 
declare variable    ID              type of DM_UUID;
 
declare variable    NAME_ID          type of DM_UUID;
 
declare variable    IZG_ID          type of DM_UUID;
 
declare variable    COUNTRY_ID      type of DM_UUID;
 
declare variable    ORIG_CODE        type of DM_TEXT;
 
declare variable    ORIG_NAME_ID    type of DM_UUID;
 
declare variable    ORIG_IZG_ID      type of DM_UUID;
 
declare variable    ORIG_COUNTRY_ID  type of DM_UUID;
 
declare variable    BARCODE          type of DM_TEXT;
 
declare variable    Z_ID            type of DM_ID;
 
declare variable    SKLAD_ID        type of DM_TEXT;
 
declare variable    INSERTDT        type of DM_DATETIME;
 
declare variable    PACKET          type of DM_ID;
 
declare variable    L_ID            type of DM_UUID;
 
declare variable    cur_id          type of DM_UUID;
 
declare variable    D$SRVUPDDT      type of DM_DATETIME;
 
declare variable    SNAME            type of DM_TEXT1024;
 
declare variable    MGN_NAME        type of DM_TEXT1024;
 
declare variable    MGN_ID          type of DM_ID_NULL;
 
declare variable    MGN_SOURCE      type of DM_TEXT1024;
 
declare variable    WHASH            type of DM_ID;
 
declare variable    NEW_COUNTRY_ID  type of DM_UUID_NULL;
 
declare variable    NEW_IZG_ID      type of DM_UUID_NULL;
 
 
begin
 
begin
/* находим тот варес, который уже есть в базе */
+
   exception EX_DONT_WORK; --Вход в программу заблокирован. Идет обновление...
select
+
ID,
+
NAME_ID,
+
IZG_ID,
+
COUNTRY_ID,
+
ORIG_CODE,
+
ORIG_NAME_ID,
+
ORIG_IZG_ID,
+
ORIG_COUNTRY_ID,
+
BARCODE,
+
Z_ID,
+
SKLAD_ID,
+
INSERTDT,
+
PACKET,
+
L_ID,
+
D$UUID,
+
D$SRVUPDDT,
+
SNAME,
+
MGN_NAME,
+
MGN_ID,
+
MGN_SOURCE,
+
WHASH
+
   from wares where
+
    NAME_ID=new.name_id and IZG_ID=new.izg_id and COUNTRY_ID=new.COUNTRY_ID and BARCODE=new.BARCODE and d$uuid<>new.d$uuid into
+
:ID,
+
:NAME_ID,
+
:IZG_ID,
+
:COUNTRY_ID,
+
:ORIG_CODE,
+
:ORIG_NAME_ID,
+
:ORIG_IZG_ID,
+
:ORIG_COUNTRY_ID,
+
:BARCODE,
+
:Z_ID,
+
:SKLAD_ID,
+
:INSERTDT,
+
:PACKET,
+
:L_ID,
+
:cur_id,
+
:D$SRVUPDDT,
+
:SNAME,
+
:MGN_NAME,
+
:MGN_ID,
+
:MGN_SOURCE,
+
:WHASH;
+
 
+
/* если ничего не нашли, то выходим */
+
if (:cur_id is null) then exit;
+
 
+
/* это условие я тоже не понял */
+
--if (not exists(select id from wares_log where id=:new.id)) then
+
--begin
+
--end
+
 
+
/* вот это я не понял что вообще значит */
+
  update wares_log set ACTUAL_WARE_ID=new.d$uuid where ACTUAL_WARE_ID=:cur_id;
+
 
+
/* делаем связку нового товара на текущий варес в базе */
+
  insert into wares_log (ID,NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID,BARCODE,Z_ID,SKLAD_ID,INSERTDT,PACKET,L_ID,ACTUAL_WARE_ID)
+
    values (new.ID,new.NAME_ID,new.IZG_ID,new.COUNTRY_ID,new.ORIG_CODE,new.ORIG_NAME_ID,new.ORIG_IZG_ID,new.ORIG_COUNTRY_ID,new.BARCODE,new.Z_ID,new.SKLAD_ID,new.INSERTDT,new.PACKET,new.L_ID,:cur_id);
+
 
+
/* !!! */
+
/* подменяем новые значения на старые, */
+
/* чтобы после выхода из триггера у нас снова создался ба старый варес */
+
/* соответственно со старым d$uuid */
+
/* и нам не нужно пересвязывать партии и другие таблицы */
+
/* !!! */
+
new.id=:ID;
+
new.name_id=:NAME_ID;
+
new.izg_id=:IZG_ID;
+
new.country_id=:COUNTRY_ID;
+
new.orig_code=:ORIG_CODE;
+
new.orig_name_id=:ORIG_NAME_ID;
+
new.orig_izg_id=:ORIG_IZG_ID;
+
new.orig_country_id=:ORIG_COUNTRY_ID;
+
new.barcode=:BARCODE;
+
new.z_id=:Z_ID;
+
new.sklad_id=:SKLAD_ID;
+
new.insertdt=:INSERTDT;
+
new.packet=:PACKET;
+
new.l_id=:L_ID;
+
new.d$uuid=:cur_id;
+
new.d$srvupddt=:D$SRVUPDDT;
+
new.sname=:SNAME;
+
new.mgn_name=:MGN_NAME;
+
new.mgn_name=:MGN_ID;
+
new.mgn_name=:MGN_SOURCE;
+
new.whash=:WHASH;
+
 
+
/* удаляем старый варес. */
+
/* по выходу из триггера он снова будет создан */
+
delete from wares where d$uuid=:cur_id;
+
 
+
 
+
/* код старого триггера */
+
/*
+
AS
+
declare variable cur_id type of DM_UUID;
+
begin
+
  select d$uuid from wares where
+
    NAME_ID=new.name_id and IZG_ID=new.izg_id and COUNTRY_ID=new.COUNTRY_ID and BARCODE=new.BARCODE and d$uuid<>new.d$uuid into :cur_id;
+
  if (cur_id is null) then exit;
+
  if (not exists(select id from wares_log where id=:cur_id and actual_ware_id=new.id)) then
+
  begin
+
    update wares_log set ACTUAL_WARE_ID=new.d$uuid where ACTUAL_WARE_ID=:cur_id;
+
    insert into wares_log (ID,NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID,BARCODE,Z_ID,SKLAD_ID,INSERTDT,PACKET,L_ID,ACTUAL_WARE_ID)
+
      select ID,NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID,BARCODE,Z_ID,SKLAD_ID,INSERTDT,PACKET,L_ID,new.d$uuid from wares where d$uuid=:cur_id;
+
  end
+
  update parts set ware_id=new.d$uuid where ware_id=:cur_id;
+
  update doc_detail_active set ware_id=new.d$uuid where ware_id=:cur_id;
+
  delete from wares where d$uuid=:cur_id;
+
end
+
*/
+
 
+
 
end
 
end
 
^
 
^
 
 
 
SET TERM ; ^
 
SET TERM ; ^
</pre>
+
INSERT INTO Z$SERVICE (ID, TASK, STATUS, INSERTDT, STARTDT, ENDDT, TXTLOG) VALUES (999, 'POLITE_RESTORE', 0, current_timestamp, current_timestamp, current_timestamp, NULL);
 
+
update sessions s
==Скрипт Андрея - НЕ ДЛЯ СЕТИ!!!==
+
set s.enddt=current_timestamp, s.endflag=0, s.endsession_id=s.id
[[Сжатие товаров| Сжатие товаров в одиночной аптеки перед внедрением единого окна]]
+
where 1=1
 
+
and s.prog containing 'manager'
==Лешины скрипты - ДЛЯ РАБОТЫ МЕНЕДЖЕРА С ЕДИНЫМ ОКНОМ==
+
and s.endflag is null
<pre>
+
and cast(s.startdt as dm_date) >= dateadd(-3 day to current_date);
create or alter procedure PR_AUTO_WARESLINK (
+
    DOC_ID DM_ID_NULL,
+
    ACTIVE_ID DM_ID_NULL)
+
as
+
declare variable DDA_BARCODE DM_TEXT1024;
+
declare variable DDA_WARE_ID DM_UUID_NULL;
+
declare variable DDA_ORIG_COUNTRYID DM_UUID_NULL;
+
declare variable DDA_ORIG_IZGID DM_UUID_NULL;
+
declare variable DDA_ORIG_NAMEID DM_UUID_NULL;
+
declare variable DDA_COUNTRY_ID DM_UUID_NULL;
+
declare variable DDA_IZG_ID DM_UUID_NULL;
+
declare variable DDA_NAME_ID DM_UUID_NULL;
+
declare variable DDA_Z_ID DM_UUID_NULL;
+
declare variable DDA_SKLAD_ID DM_UUID_NULL;
+
declare variable DDALOG_BARCODE DM_TEXT1024;
+
declare variable DDALOG_WARE_ID DM_UUID_NULL;
+
declare variable DDALOG_ORIG_COUNTRYID DM_UUID_NULL;
+
declare variable DDALOG_ORIG_IZGID DM_UUID_NULL;
+
declare variable DDALOG_ORIG_NAMEID DM_UUID_NULL;
+
declare variable DDALOG_COUNTRY_ID DM_UUID_NULL;
+
declare variable DDALOG_IZG_ID DM_UUID_NULL;
+
declare variable DDALOG_NAME_ID DM_UUID_NULL;
+
declare variable DDALOG_Z_ID DM_UUID_NULL;
+
declare variable DDALOG_SKLAD_ID DM_UUID_NULL;
+
declare variable DDALOG2_BARCODE DM_TEXT1024;
+
declare variable DDALOG2_WARE_ID DM_UUID_NULL;
+
declare variable DDALOG2_ORIG_COUNTRYID DM_UUID_NULL;
+
declare variable DDALOG2_ORIG_IZGID DM_UUID_NULL;
+
declare variable DDALOG2_ORIG_NAMEID DM_UUID_NULL;
+
declare variable DDALOG2_COUNTRY_ID DM_UUID_NULL;
+
declare variable DDALOG2_IZG_ID DM_UUID_NULL;
+
declare variable DDALOG2_NAME_ID DM_UUID_NULL;
+
declare variable DDALOG2_Z_ID DM_UUID_NULL;
+
declare variable DDALOG2_SKLAD_ID DM_UUID_NULL;
+
begin
+
 
+
select BCODE_IZG,
+
        WARE_ID,
+
        (select VAL_ID
+
        from PR_GETVAL_ID(DDA.SNAME, 0, DDA.PART_TYPE)) as NAME_ID,
+
        (select VAL_ID
+
        from PR_GETVAL_ID(DDA.SIZG, 3, DDA.PART_TYPE)) as IZG_ID,
+
        (select VAL_ID
+
        from PR_GETVAL_ID(DDA.SCOUNTRY, 2, DDA.PART_TYPE)) as COUNTRY_ID,
+
        (select VAL_ID
+
        from PR_GETVAL_ID(DDA.SORIG_NAME, 1, DDA.PART_TYPE)) as ORIG_NAME_ID,
+
        (select VAL_ID
+
        from PR_GETVAL_ID(DDA.SORIG_IZG, 6, DDA.PART_TYPE)) as ORGI_IZG_ID,
+
        (select VAL_ID
+
        from PR_GETVAL_ID(DDA.SORIG_COUNTRY, 5, DDA.PART_TYPE)) as ORIG_COUNTRY_ID,
+
        Z_ID,
+
        SKLAD_ID
+
from DOC_DETAIL_ACTIVE DDA
+
where DOC_ID = :DOC_ID
+
      and ID = :ACTIVE_ID
+
into DDA_BARCODE,
+
      DDA_WARE_ID,
+
      DDA_NAME_ID,
+
      DDA_IZG_ID,
+
      DDA_COUNTRY_ID,
+
      DDA_ORIG_NAMEID,
+
      DDA_ORIG_IZGID,
+
      DDA_ORIG_COUNTRYID,
+
      DDA_Z_ID,
+
      DDA_SKLAD_ID;
+
 
+
select first 1 BCODE_IZG,
+
                WARE_ID,
+
                (select VAL_ID
+
                from PR_GETVAL_ID(DDAL.SNAME, 0, DDAL.PART_TYPE)) as NAME_ID,
+
                (select VAL_ID
+
                from PR_GETVAL_ID(DDAL.SIZG, 3, DDAL.PART_TYPE)) as IZG_ID,
+
                (select VAL_ID
+
                from PR_GETVAL_ID(DDAL.SCOUNTRY, 2, DDAL.PART_TYPE)) as COUNTRY_ID,
+
                (select VAL_ID
+
                from PR_GETVAL_ID(DDAL.SORIG_NAME, 1, DDAL.PART_TYPE)) as ORIG_NAME_ID,
+
                (select VAL_ID
+
                from PR_GETVAL_ID(DDAL.SORIG_IZG, 6, DDAL.PART_TYPE)) as ORGI_IZG_ID,
+
                (select VAL_ID
+
                from PR_GETVAL_ID(DDAL.SORIG_COUNTRY, 5, DDAL.PART_TYPE)) as ORIG_COUNTRY_ID,
+
                Z_ID,
+
                SKLAD_ID
+
from DOC_DETAIL_ACTIVE_LOG DDAL
+
where DOC_ID = :DOC_ID
+
      and ID = :ACTIVE_ID
+
order by LOG_ID
+
into DDALOG_BARCODE,
+
      DDALOG_WARE_ID,
+
      DDALOG_NAME_ID,
+
      DDALOG_IZG_ID,
+
      DDALOG_COUNTRY_ID,
+
      DDALOG_ORIG_NAMEID,
+
      DDALOG_ORIG_IZGID,
+
      DDALOG_ORIG_COUNTRYID,
+
      DDALOG_Z_ID,
+
      DDALOG_SKLAD_ID;
+
 
+
select first 1 skip 1 BCODE_IZG,
+
                      WARE_ID,
+
                      (select VAL_ID
+
                        from PR_GETVAL_ID(DDAL.SNAME, 0, DDAL.PART_TYPE)) as NAME_ID,
+
                      (select VAL_ID
+
                        from PR_GETVAL_ID(DDAL.SIZG, 3, DDAL.PART_TYPE)) as IZG_ID,
+
                      (select VAL_ID
+
                        from PR_GETVAL_ID(DDAL.SCOUNTRY, 2, DDAL.PART_TYPE)) as COUNTRY_ID,
+
                      (select VAL_ID
+
                        from PR_GETVAL_ID(DDAL.SORIG_NAME, 1, DDAL.PART_TYPE)) as ORIG_NAME_ID,
+
                      (select VAL_ID
+
                        from PR_GETVAL_ID(DDAL.SORIG_IZG, 6, DDAL.PART_TYPE)) as ORGI_IZG_ID,
+
                      (select VAL_ID
+
                        from PR_GETVAL_ID(DDAL.SORIG_COUNTRY, 5, DDAL.PART_TYPE)) as ORIG_COUNTRY_ID,
+
                      Z_ID,
+
                      SKLAD_ID
+
from DOC_DETAIL_ACTIVE_LOG DDAL
+
where DOC_ID = :DOC_ID
+
      and ID = :ACTIVE_ID
+
order by LOG_ID
+
into DDALOG2_BARCODE,
+
      DDALOG2_WARE_ID,
+
      DDALOG2_NAME_ID,
+
      DDALOG2_IZG_ID,
+
      DDALOG2_COUNTRY_ID,
+
      DDALOG2_ORIG_NAMEID,
+
      DDALOG2_ORIG_IZGID,
+
      DDALOG2_ORIG_COUNTRYID,
+
      DDALOG2_Z_ID,
+
      DDALOG2_SKLAD_ID;
+
 
+
if (((DDA_WARE_ID <> '-1') and
+
    (DDA_WARE_ID <> '0') and
+
    (DDA_WARE_ID is not null)) and
+
    ((DDALOG2_WARE_ID <> '-1') and
+
    (DDALOG2_WARE_ID <> '0') and
+
    (DDALOG2_WARE_ID is not null)) and
+
    (DDA_BARCODE = DDALOG2_BARCODE) and
+
    (DDA_WARE_ID <> DDALOG2_WARE_ID)) then
+
begin
+
  update WARES
+
  set NAME_ID = :DDA_NAME_ID,
+
      IZG_ID = :DDA_IZG_ID,
+
      COUNTRY_ID = :DDA_COUNTRY_ID,
+
      ORIG_NAME_ID = :DDA_ORIG_NAMEID,
+
      ORIG_IZG_ID = :DDA_ORIG_IZGID,
+
      ORIG_COUNTRY_ID = :DDA_ORIG_COUNTRYID,
+
      BARCODE = :DDA_BARCODE
+
  where ID = :DDALOG2_WARE_ID;
+
  exit;
+
end
+
 
+
if ((DDALOG_WARE_ID = '0') or (DDALOG_WARE_ID = '-1') or (DDALOG_WARE_ID is null)) then
+
begin
+
  insert into WARES_LOG (ID, NAME_ID, IZG_ID, COUNTRY_ID, ORIG_NAME_ID, ORIG_IZG_ID, ORIG_COUNTRY_ID, BARCODE, Z_ID,
+
                        SKLAD_ID)
+
  values (:DDA_WARE_ID, :DDALOG_NAME_ID, :DDALOG_IZG_ID, :DDALOG_COUNTRY_ID, :DDALOG_ORIG_NAMEID, :DDALOG_ORIG_IZGID,
+
          :DDALOG_ORIG_COUNTRYID, :DDALOG_BARCODE, :DDALOG_Z_ID, :DDALOG_SKLAD_ID);
+
 
+
end
+
else
+
if (((DDA_WARE_ID <> '0') and
+
    (DDA_WARE_ID <> '-1') and
+
    (DDA_WARE_ID is not null)) and
+
    ((DDA_NAME_ID <> DDALOG_NAME_ID) or (DDA_IZG_ID <> DDALOG_IZG_ID) or (DDA_COUNTRY_ID <> DDALOG_COUNTRY_ID) or (DDA_ORIG_NAMEID <> DDALOG_ORIG_NAMEID) or (DDA_ORIG_IZGID <> DDALOG_ORIG_IZGID) or (DDA_ORIG_COUNTRYID <> DDALOG_ORIG_COUNTRYID)) and
+
    (DDA_BARCODE = DDALOG_BARCODE)) then
+
begin
+
  update WARES
+
  set NAME_ID = :DDA_NAME_ID,
+
      IZG_ID = :DDA_IZG_ID,
+
      COUNTRY_ID = :DDA_COUNTRY_ID,
+
      ORIG_NAME_ID = :DDA_ORIG_NAMEID,
+
      ORIG_IZG_ID = :DDA_ORIG_IZGID,
+
      ORIG_COUNTRY_ID = :DDA_ORIG_COUNTRYID,
+
      BARCODE = :DDA_BARCODE
+
  where ID = :DDALOG_WARE_ID;
+
end
+
 
+
end;
+
 
+
grant execute
+
    on procedure PR_GETVAL_ID to procedure PR_AUTO_WARESLINK;
+
grant select on DOC_DETAIL_ACTIVE to procedure PR_AUTO_WARESLINK;
+
grant select on DOC_DETAIL_ACTIVE_LOG to procedure PR_AUTO_WARESLINK;
+
grant insert on WARES_LOG to procedure PR_AUTO_WARESLINK;
+
grant select,
+
            update on WARES to procedure PR_AUTO_WARESLINK;
+
grant execute
+
    on procedure PR_AUTO_WARESLINK to SYSDBA;
+
 
+
create or alter procedure PR_MAKEGOODWAREVALUES(SNAME type of DM_TEXT, SORIG_NAME type of DM_TEXT, SIZG type of DM_TEXT, SORIG_IZG type of DM_TEXT, SCOUNTRY type of DM_TEXT, SORIG_COUNTRY type of DM_TEXT, ORIG_CODE type of DM_TEXT, ACTIVE_ID type of DM_ID, ALTTYPE DM_STATUS, BARCODE DM_TEXT1024 = '') returns(GOODNAME type of DM_TEXT, GOODIZG type of DM_TEXT, GOODCOUNTRY type of DM_TEXT, GOODBARCODE DM_TEXT)
+
as
+
declare variable WARE_ID type of DM_UUID_NULL;
+
declare variable NAME_ID type of DM_UUID_NULL;
+
declare variable ORIG_NAME_ID type of DM_UUID_NULL;
+
declare variable IZG_ID type of DM_UUID_NULL;
+
declare variable ORIG_IZG_ID type of DM_UUID_NULL;
+
declare variable COUNTRY_ID type of DM_UUID_NULL;
+
declare variable ORIG_COUNTRY_ID type of DM_UUID_NULL;
+
begin
+
 
+
/*
+
  select val_id from pr_getval_id(:sname,0,:alttype) into :name_id;
+
  select val_id from pr_getval_id(:sorig_name,1,:alttype) into :orig_name_id;
+
  select val_id from pr_getval_id(:sizg,3,:alttype) into :izg_id;
+
  select val_id from pr_getval_id(:sorig_izg,6,:alttype) into :orig_izg_id;
+
  select val_id from pr_getval_id(:scountry,2,:alttype) into :country_id;
+
  select val_id from pr_getval_id(:sorig_country,5,:alttype) into :orig_country_id;
+
*/
+
 
+
select ID
+
from VALS
+
where VTYPE = 0
+
      and ALTTYPE = :ALTTYPE
+
      and SVALUE = :SNAME
+
into :NAME_ID;
+
select ID
+
from VALS
+
where VTYPE = 1
+
      and ALTTYPE = :ALTTYPE
+
      and SVALUE = :SORIG_NAME
+
into :ORIG_NAME_ID;
+
select ID
+
from VALS
+
where VTYPE = 3
+
      and ALTTYPE = :ALTTYPE
+
      and SVALUE = :SIZG
+
into :IZG_ID;
+
select ID
+
from VALS
+
where VTYPE = 6
+
      and ALTTYPE = :ALTTYPE
+
      and SVALUE = :SORIG_IZG
+
into :ORIG_IZG_ID;
+
select ID
+
from VALS
+
where VTYPE = 2
+
      and ALTTYPE = :ALTTYPE
+
      and SVALUE = :SCOUNTRY
+
into :COUNTRY_ID;
+
select ID
+
from VALS
+
where VTYPE = 5
+
      and ALTTYPE = :ALTTYPE
+
      and SVALUE = :SORIG_COUNTRY
+
into :ORIG_COUNTRY_ID;
+
 
+
select WARE_ID
+
from PR_GETWARE_BY_IDS(:NAME_ID, :IZG_ID, :COUNTRY_ID, :ORIG_CODE, :ORIG_NAME_ID, :ORIG_IZG_ID, :ORIG_COUNTRY_ID, 0, 1, :BARCODE)
+
into :WARE_ID;
+
if (WARE_ID is not null) then
+
begin
+
  /* select actualware_id from PR_GETACTUALWAREID(:ware_id) into :ware_id; */
+
  select SNAME,
+
        SIZG,
+
        SCOUNTRY,
+
        BARCODE
+
  from VW_WARES
+
  where ID = :WARE_ID
+
  into :GOODNAME,
+
      :GOODIZG,
+
      :GOODCOUNTRY,
+
      :GOODBARCODE;
+
  /* if ((active_id>0) and ((goodname<>sname) or (goodizg<>sizg) or (goodcountry<>scountry))) then */
+
  /* insert into doc_detail_active_log(id,sname,sizg,scountry,part_type) values (:active_id,:sname,:sizg,:scountry,:alttype); */
+
  /* goodname='2';--sname; */
+
  if (GOODNAME is null) then
+
  GOODNAME = SNAME;
+
  if (GOODIZG is null) then
+
  GOODIZG = SIZG;
+
  if (GOODCOUNTRY is null) then
+
  GOODCOUNTRY = SCOUNTRY;
+
  if (GOODNAME is null) then
+
  GOODNAME = SORIG_NAME;
+
  if (GOODIZG is null) then
+
  GOODIZG = SORIG_IZG;
+
  if (GOODCOUNTRY is null) then
+
  GOODCOUNTRY = SORIG_COUNTRY;
+
  if (GOODBARCODE is null) then
+
  GOODBARCODE = BARCODE;
+
  suspend;
+
  exit;
+
end
+
 
+
select WARE_ID
+
from PR_GETWARE_BY_IDS(:NAME_ID, :IZG_ID, :COUNTRY_ID, :ORIG_CODE, :ORIG_NAME_ID, :ORIG_IZG_ID, :ORIG_COUNTRY_ID, 0, null, :BARCODE)
+
into :WARE_ID;
+
if (WARE_ID is not null) then
+
begin
+
  /* select actualware_id from PR_GETACTUALWAREID(:ware_id) into :ware_id; */
+
  /* goodname='1';--sname; */
+
  GOODNAME = SNAME;
+
  GOODIZG = SIZG;
+
  GOODCOUNTRY = SCOUNTRY;
+
  GOODBARCODE = BARCODE;
+
 
+
  suspend;
+
  exit;
+
end
+
 
+
WARE_ID = null;
+
if (ORIG_NAME_ID is not null) then
+
begin
+
  select first 1 ID
+
  from WARES
+
  where ORIG_NAME_ID = :ORIG_NAME_ID
+
  order by ID desc
+
  into :WARE_ID;
+
  if (WARE_ID is null) then
+
  select first 1 iif(ACTUAL_WARE_ID is null, ID, ACTUAL_WARE_ID)
+
  from WARES_LOG
+
  where ORIG_NAME_ID = :ORIG_NAME_ID
+
  order by LOG_ID desc
+
  into :WARE_ID;
+
end
+
if ((WARE_ID is null) and
+
    (NAME_ID is not null)) then
+
begin
+
  select first 1 ID
+
  from WARES
+
  where NAME_ID = :NAME_ID
+
  into :WARE_ID;
+
  if (WARE_ID is null) then
+
  select first 1 iif(ACTUAL_WARE_ID is null, ID, ACTUAL_WARE_ID)
+
  from WARES_LOG
+
  where NAME_ID = :NAME_ID
+
  order by LOG_ID desc
+
  into :WARE_ID;
+
end
+
if (WARE_ID is null) then
+
begin
+
  /* goodname='3';--sname; */
+
  GOODNAME = SNAME;
+
  NAME_ID = null;
+
end
+
else
+
begin
+
  /* select actualware_id from PR_GETACTUALWAREID(:ware_id) into :ware_id; */
+
  select W.NAME_ID,
+
        V.SVALUE
+
  from WARES W
+
  left join VALS V on W.NAME_ID = V.ID
+
  where W.ID = :WARE_ID
+
  into :NAME_ID,
+
      :GOODNAME;
+
end
+
 
+
WARE_ID = null;
+
if (ORIG_IZG_ID is not null) then
+
begin
+
  select first 1 ID
+
  from WARES
+
  where ORIG_IZG_ID = :ORIG_IZG_ID
+
  into :WARE_ID;
+
  if (WARE_ID is null) then
+
  select first 1 iif(ACTUAL_WARE_ID is null, ID, ACTUAL_WARE_ID)
+
  from WARES_LOG
+
  where ORIG_IZG_ID = :ORIG_IZG_ID
+
  order by LOG_ID desc
+
  into :WARE_ID;
+
end
+
if ((WARE_ID is null) and
+
    (IZG_ID is not null)) then
+
begin
+
  select first 1 ID
+
  from WARES
+
  where IZG_ID = :IZG_ID
+
  into :WARE_ID;
+
  if (WARE_ID is null) then
+
  select first 1 iif(ACTUAL_WARE_ID is null, ID, ACTUAL_WARE_ID)
+
  from WARES_LOG
+
  where IZG_ID = :IZG_ID
+
  order by LOG_ID desc
+
  into :WARE_ID;
+
end
+
if (WARE_ID is null) then
+
  GOODIZG = SIZG;
+
else
+
begin
+
  /* select actualware_id from PR_GETACTUALWAREID(:ware_id) into :ware_id; */
+
  select W.IZG_ID,
+
        V.SVALUE
+
  from WARES W
+
  left join VALS V on W.IZG_ID = V.ID
+
  where W.ID = :WARE_ID
+
  into :IZG_ID,
+
      :GOODIZG;
+
end
+
 
+
WARE_ID = null;
+
if (ORIG_COUNTRY_ID is not null) then
+
begin
+
  select first 1 ID
+
  from WARES
+
  where ORIG_COUNTRY_ID = :ORIG_COUNTRY_ID
+
  into :WARE_ID;
+
  if (WARE_ID is null) then
+
  select first 1 iif(ACTUAL_WARE_ID is null, ID, ACTUAL_WARE_ID)
+
  from WARES_LOG
+
  where ORIG_COUNTRY_ID = :ORIG_COUNTRY_ID
+
  order by LOG_ID desc
+
  into :WARE_ID;
+
end
+
if ((WARE_ID is null) and
+
    (COUNTRY_ID is not null)) then
+
begin
+
  select first 1 ID
+
  from WARES
+
  where COUNTRY_ID = :COUNTRY_ID
+
  into :WARE_ID;
+
  if (WARE_ID is null) then
+
  select first 1 iif(ACTUAL_WARE_ID is null, ID, ACTUAL_WARE_ID)
+
  from WARES_LOG
+
  where COUNTRY_ID = :COUNTRY_ID
+
  order by LOG_ID desc
+
  into :WARE_ID;
+
end
+
if (WARE_ID is null) then
+
  GOODCOUNTRY = SCOUNTRY;
+
else
+
begin
+
  /* select actualware_id from PR_GETACTUALWAREID(:ware_id) into :ware_id; */
+
  select W.COUNTRY_ID,
+
        V.SVALUE
+
  from WARES W
+
  left join VALS V on W.COUNTRY_ID = V.ID
+
  where W.ID = :WARE_ID
+
  into :COUNTRY_ID,
+
      :GOODCOUNTRY;
+
end
+
 
+
/* if ((active_id>0) and ((goodname<>sname) or (goodizg<>sizg) or (goodcountry<>scountry))) then */
+
/*  insert into doc_detail_active_log(id,sname,sizg,scountry, part_type) values (:active_id,:sname,:sizg,:scountry,:alttype); */
+
 
+
/* goodname='3'; */
+
GOODBARCODE = BARCODE;
+
 
+
if (GOODNAME is null) then
+
  GOODNAME = SNAME;
+
if (GOODIZG is null) then
+
  GOODIZG = SIZG;
+
if (GOODCOUNTRY is null) then
+
  GOODCOUNTRY = SCOUNTRY;
+
if (GOODNAME is null) then
+
  GOODNAME = SORIG_NAME;
+
if (GOODIZG is null) then
+
  GOODIZG = SORIG_IZG;
+
if (GOODCOUNTRY is null) then
+
  GOODCOUNTRY = SORIG_COUNTRY;
+
 
+
suspend;
+
end;
+
 
+
create or alter procedure PR_GET_WARE (
+
    SNAME type of DM_TEXT,
+
    SIZG type of DM_TEXT,
+
    SCOUNTRY type of DM_TEXT,
+
    ORIG_CODE type of DM_TEXT = '',
+
    SORIG_NAME type of DM_TEXT = '',
+
    SORIG_IZG type of DM_TEXT = '',
+
    SORIG_COUNTRY type of DM_TEXT = '',
+
    BARCODE type of DM_TEXT = '',
+
    Z_ID type of DM_ID = 0,
+
    SKLAD_ID DM_TEXT = '',
+
    ALTTYPE DM_STATUS = 0,
+
    MNN DM_TEXT = '')
+
returns (
+
    W_ID type of DM_UUID_NULL)
+
as
+
declare variable NAME_ID type of DM_UUID_NULL;
+
declare variable IZG_ID type of DM_UUID_NULL;
+
declare variable COUNTRY_ID type of DM_UUID_NULL;
+
declare variable ORIG_NAME_ID type of DM_UUID_NULL;
+
declare variable ORIG_IZG_ID type of DM_UUID_NULL;
+
declare variable ORIG_COUNTRY_ID type of DM_UUID_NULL;
+
begin
+
 
+
select VAL_ID
+
from PR_GETVAL_ID(:SNAME, 0, :ALTTYPE, :MNN)
+
into :NAME_ID;
+
select VAL_ID
+
from PR_GETVAL_ID(:SIZG, 3, :ALTTYPE)
+
into :IZG_ID;
+
select VAL_ID
+
from PR_GETVAL_ID(:SCOUNTRY, 2, :ALTTYPE)
+
into :COUNTRY_ID;
+
select VAL_ID
+
from PR_GETVAL_ID(:SORIG_NAME, 1, :ALTTYPE)
+
into :ORIG_NAME_ID;
+
select VAL_ID
+
from PR_GETVAL_ID(:SORIG_IZG, 6, :ALTTYPE)
+
into :ORIG_IZG_ID;
+
select VAL_ID
+
from PR_GETVAL_ID(:SORIG_COUNTRY, 5, :ALTTYPE)
+
into :ORIG_COUNTRY_ID;
+
/*
+
  select first 1 id from wares where NAME_ID=:name_id and IZG_ID=:izg_id and COUNTRY_ID=:country_id and
+
  ORIG_CODE=:orig_code and ORIG_NAME_ID=:orig_name_id and
+
  ORIG_IZG_ID=:orig_izg_id and ORIG_COUNTRY_ID=:orig_country_id -- into :w_id;
+
  and barcode=:barcode into :w_id;
+
  */
+
select ID
+
from WARES
+
where NAME_ID = :NAME_ID
+
      and IZG_ID = :IZG_ID
+
      and COUNTRY_ID = :COUNTRY_ID
+
      and BARCODE = :BARCODE
+
into :W_ID;
+
 
+
if (W_ID is null) then
+
begin
+
  /* exception EX_WRONG_OPER; */
+
  /* w_id=gen_id(gen_wares_id,1); */
+
  W_ID = uuid_to_char(gen_uuid());
+
  insert into WARES (ID, NAME_ID, IZG_ID, COUNTRY_ID, ORIG_CODE, ORIG_NAME_ID, ORIG_IZG_ID, ORIG_COUNTRY_ID, BARCODE,
+
                    Z_ID, SKLAD_ID)
+
  values (:W_ID, :NAME_ID, :IZG_ID, :COUNTRY_ID, :ORIG_CODE, :ORIG_NAME_ID, :ORIG_IZG_ID, :ORIG_COUNTRY_ID, :BARCODE,
+
          :Z_ID, :SKLAD_ID);
+
end
+
suspend;
+
end;
+
 
+
create or alter procedure PR_GETWARE_BY_IDS (
+
    NAME_ID type of DM_UUID_NULL,
+
    IZG_ID type of DM_UUID_NULL,
+
    COUNTRY_ID type of DM_UUID_NULL,
+
    ORIG_CODE type of DM_TEXT,
+
    ORIG_NAME_ID type of DM_UUID_NULL,
+
    ORIG_IZG_ID type of DM_UUID_NULL,
+
    ORIG_COUNTRY_ID type of DM_UUID_NULL,
+
    DOINSERT type of DM_STATUS,
+
    SEARCHINLOGS type of DM_STATUS,
+
    BARCODE DM_TEXT)
+
returns (
+
    WARE_ID type of DM_UUID_NULL)
+
as
+
begin
+
if (ORIG_CODE is null) then
+
  ORIG_CODE = '';
+
if (SEARCHINLOGS is null) then
+
  SEARCHINLOGS = 0;
+
if (SEARCHINLOGS = 1) then
+
begin
+
  select first 1 iif(ACTUAL_WARE_ID is null, ID, ACTUAL_WARE_ID)
+
  from WARES_LOG
+
  where NAME_ID = :NAME_ID
+
        and IZG_ID = :IZG_ID
+
        and COUNTRY_ID = :COUNTRY_ID
+
        and BARCODE = :BARCODE
+
  order by LOG_INSERTDT desc
+
  into :WARE_ID;
+
  select ID
+
  from WARES
+
  where ID = :WARE_ID
+
  into :WARE_ID;
+
end
+
else
+
begin
+
  select first 1 ID
+
  from WARES
+
  where NAME_ID = :NAME_ID
+
        and IZG_ID = :IZG_ID
+
        and COUNTRY_ID = :COUNTRY_ID
+
        and BARCODE = :BARCODE
+
  into :WARE_ID;
+
end
+
if ((WARE_ID is null) and
+
    (DOINSERT = 1) and
+
    (SEARCHINLOGS <> 1)) then
+
begin
+
  /* ware_id=gen_id(gen_wares_id,1); */
+
  WARE_ID = uuid_to_char(gen_uuid());
+
  insert into WARES (ID, NAME_ID, IZG_ID, COUNTRY_ID, ORIG_CODE, ORIG_NAME_ID, ORIG_IZG_ID, ORIG_COUNTRY_ID, Z_ID,
+
                    SKLAD_ID, BARCODE)
+
  values (:WARE_ID, :NAME_ID, :IZG_ID, :COUNTRY_ID, :ORIG_CODE, :ORIG_NAME_ID, :ORIG_IZG_ID, :ORIG_COUNTRY_ID, 0, '',
+
          :BARCODE);
+
end
+
suspend;
+
end;
+
 
+
create or alter procedure PR_DOC_COMMIT (
+
    DOC_ID type of DM_ID,
+
    SESSION_ID type of DM_ID)
+
as
+
declare variable WRONG_WARES DM_STATUS;
+
declare variable BASE_TYPE type of DM_STATUS;
+
declare variable SUMMA type of DM_DOUBLE;
+
declare variable SUMMA_O type of DM_DOUBLE;
+
declare variable SUM_NDSO type of DM_DOUBLE;
+
declare variable DSCSUMMA type of DM_DOUBLE;
+
declare variable SUM_DSC type of DM_DOUBLE;
+
declare variable PRICE_TYPE DM_STATUS;
+
declare variable CONTRACT_ID DM_ID;
+
declare variable W_PARAM DM_STATUS;
+
declare variable WARES_MODE DM_STATUS;
+
begin
+
select DT.BASE_TYPE,
+
        D.PRICE_TYPE,
+
        D.CONTRACT_ID
+
from DOCS D
+
left join DOC_TYPES DT on D.DOC_TYPE = DT.ID
+
where D.ID = :DOC_ID
+
into :BASE_TYPE,
+
      :PRICE_TYPE,
+
      :CONTRACT_ID;
+
if (BASE_TYPE in (1, 3, 6, 8)) then
+
begin
+
 
+
  WRONG_WARES = 0;
+
  WARES_MODE = 1;
+
  select PARAM_VALUE
+
  from PR_GETPARAMVALUE('WARES_MODE', 0)
+
  into WARES_MODE;
+
  if (WARES_MODE = 0) then
+
  begin
+
  select count(ID)
+
  from DOC_DETAIL_ACTIVE
+
  where DOC_ID = :DOC_ID
+
        and ((WARE_ID = '0') or (WARE_ID = '-1') or (WARE_ID = ''))
+
  into WRONG_WARES;
+
  if (WRONG_WARES > 0) then
+
    exception EX_WRONG_OPER;
+
  end
+
 
+
  execute procedure PR_DOC_PRIHOD_COMMIT(:DOC_ID, 0);
+
end
+
else
+
if (BASE_TYPE in (2, 7, 9)) then
+
  execute procedure PR_DOC_RASHOD_COMMIT(:DOC_ID, 0);
+
else
+
  exception EX_WRONGDOC_BASE_TYPE;
+
delete from DOC_DETAIL_ACTIVE
+
where DOC_ID = :DOC_ID;
+
if (BASE_TYPE = 3) then
+
begin
+
  delete from WAREBASE
+
  where PART_ID in (select PART_ID
+
                    from DOC_DETAIL
+
                    where DOC_ID = :DOC_ID
+
                          and QUANT < 0
+
                          and PART_TYPE = 1);
+
end
+
select sum(SUMMA),
+
        sum(SUMMA_O),
+
        sum(SUM_NDSO),
+
        sum(PRICE * QUANT / 10000),
+
        sum(SUM_DSC)
+
from DOC_DETAIL
+
where DOC_ID = :DOC_ID
+
into :SUMMA,
+
      :SUMMA_O,
+
      :SUM_NDSO,
+
      :DSCSUMMA,
+
      :SUM_DSC;
+
DSCSUMMA = DSCSUMMA * 10000;
+
update DOCS
+
set COMMITSESSION_ID = :SESSION_ID,
+
    STATUS = 1,
+
    POSTDT = 'now',
+
    CHECKDATA = (select CHECKDATA
+
                  from PR_DOCCHECKDATA(:DOC_ID)),
+
    SUMMA = :SUMMA,
+
    SUMMA_O = :SUMMA_O,
+
    SUM_NDSO = :SUM_NDSO,
+
    CALCSUMMA = :DSCSUMMA,
+
    SUM_DSC = :SUM_DSC,
+
    CASHDATA = (iif(:BASE_TYPE = 1, -:SUMMA, null))
+
where ID = :DOC_ID;
+
execute procedure PR_UPDBLOCKINFO_BY_DOC(:DOC_ID, 1);
+
/* if ((base_type = 2) and (contract_id<>0)) then */
+
if (CONTRACT_ID <> 0) then
+
begin
+
  if (BASE_TYPE = 2) then
+
  execute procedure PR_CREDITCOMMIT(:CONTRACT_ID);
+
  if (BASE_TYPE in (8, 9)) then
+
  execute procedure PR_CREDITREINITCOMMIT(:CONTRACT_ID, :SESSION_ID);
+
  /* execute procedure PR_CREDITCOMMIT(:contract_id); */
+
end
+
execute procedure PR_DOEVENT('EV_DOCCOMMIT');
+
end;
+
 
+
create or alter trigger DOC_DETAIL_ACTIVE_BI for DOC_DETAIL_ACTIVE
+
active before insert position 0
+
as
+
begin
+
if (new.ID is null) then
+
  new.ID = gen_id(GEN_DOC_DETAIL_ACTIVE_ID, 1);
+
new.INSERTDT = 'now';
+
if (new.BASE_AGENT_ID is null) then
+
  new.BASE_AGENT_ID = 0;
+
if (new.STATUS is null) then
+
  new.STATUS = 0;
+
if (new.PARENT_ID is null) then
+
  new.PARENT_ID = 0;
+
if (new.PART_TYPE is null) then
+
  new.PART_TYPE = 0;
+
 
+
/* первая строчка =  до привидения, оригианльные значения накладной */
+
/* select first 1 ID from WARES where NAME_ID = new.NAME_ID and IZG_ID = new.IZG_ID and COUNTRY_ID = new.COUNTRY_ID and BARCODE = new.BCODE_IZG into new.WARE_ID; */
+
 
+
insert into DOC_DETAIL_ACTIVE_LOG (ID, PARENT_ID, DOC_ID, PART_ID, PART_PARENT_ID, DOC_DETAIL_ID, PRICE, NAC, QUANT,
+
                                    DISCOUNT, SUMMA, SUMMA_O, DCARD, WARE_ID, PRICE_O, PRICE_Z, PRICE_R, BARCODE,
+
                                    BARCODE1, BCODE_IZG, GODENDO, SERIA, NDS, SUM_NDSO, SERT, DATESERT, KEMVSERT,
+
                                    SDSERT, REGN, NGTD, EDIZM, NAME_ID, IZG_ID, COUNTRY_ID, ORIG_CODE, ORIG_NAME_ID,
+
                                    ORIG_IZG_ID, ORIG_COUNTRY_ID, Z_ID, SKLAD_ID, SNAME, SIZG, SCOUNTRY, SORIG_NAME,
+
                                    SORIG_IZG, SORIG_COUNTRY, INSERTDT, INFO, KOEF, MOTHERPART_ID, DEP, SUM_DSC,
+
                                    HUMAN_QUANT, CUSTOMDRAW, PART_TYPE, BASE_AGENT_ID)
+
values (new.ID, new.PARENT_ID, new.DOC_ID, new.PART_ID, new.PART_PARENT_ID, new.DOC_DETAIL_ID, new.PRICE, new.NAC,
+
        new.QUANT, new.DISCOUNT, new.SUMMA, new.SUMMA_O, new.DCARD, new.WARE_ID, new.PRICE_O, new.PRICE_Z, new.PRICE_R,
+
        new.BARCODE, new.BARCODE1, new.BCODE_IZG, new.GODENDO, new.SERIA, new.NDS, new.SUM_NDSO, new.SERT,
+
        new.DATESERT, new.KEMVSERT, new.SDSERT, new.REGN, new.NGTD, new.EDIZM, new.NAME_ID, new.IZG_ID, new.COUNTRY_ID,
+
        new.ORIG_CODE, new.ORIG_NAME_ID, new.ORIG_IZG_ID, new.ORIG_COUNTRY_ID, new.Z_ID, new.SKLAD_ID, new.SNAME,
+
        new.SIZG, new.SCOUNTRY, new.SORIG_NAME, new.SORIG_IZG, new.SORIG_COUNTRY, new.INSERTDT, new.INFO, new.KOEF,
+
        new.MOTHERPART_ID, new.DEP, new.SUM_DSC, new.HUMAN_QUANT, new.CUSTOMDRAW, new.PART_TYPE, new.BASE_AGENT_ID);
+
/* -- */
+
 
+
if ((new.PART_ID is null) or (new.PART_ID = 0)) then
+
begin
+
  /* >cf20110923 */
+
  /* if (new.ware_id<0) then */
+
  if (new.WARE_ID = '-1') then
+
  begin
+
  select GOODNAME,
+
          GOODIZG,
+
          GOODCOUNTRY,
+
          GOODBARCODE
+
  from PR_MAKEGOODWAREVALUES(new.SNAME, new.SORIG_NAME, new.SIZG, new.SORIG_IZG, new.SCOUNTRY, new.SORIG_COUNTRY, new.ORIG_CODE, new.ID, new.PART_TYPE, new.BCODE_IZG)
+
  into new.SNAME,
+
        new.SIZG,
+
        new.SCOUNTRY,
+
        new.BCODE_IZG;
+
  end
+
  /* <cf20110923 */
+
  new.PART_ID = 0;
+
  select ID
+
  from VALS
+
  where VTYPE = 0
+
        and ALTTYPE = new.PART_TYPE
+
        and SVALUE = new.SNAME
+
  into new.NAME_ID;
+
  select ID
+
  from VALS
+
  where VTYPE = 3
+
        and ALTTYPE = new.PART_TYPE
+
        and SVALUE = new.SIZG
+
  into new.IZG_ID;
+
  select ID
+
  from VALS
+
  where VTYPE = 2
+
        and ALTTYPE = new.PART_TYPE
+
        and SVALUE = new.SCOUNTRY
+
  into new.COUNTRY_ID;
+
  select ID
+
  from VALS
+
  where VTYPE = 1
+
        and ALTTYPE = new.PART_TYPE
+
        and SVALUE = new.SORIG_NAME
+
  into new.ORIG_NAME_ID;
+
  select ID
+
  from VALS
+
  where VTYPE = 6
+
        and ALTTYPE = new.PART_TYPE
+
        and SVALUE = new.SORIG_IZG
+
  into new.ORIG_IZG_ID;
+
  select ID
+
  from VALS
+
  where VTYPE = 5
+
        and ALTTYPE = new.PART_TYPE
+
        and SVALUE = new.SORIG_COUNTRY
+
  into new.ORIG_COUNTRY_ID;
+
  new.WARE_ID = 0;
+
  select first 1 ID
+
  from WARES
+
  where NAME_ID = new.NAME_ID
+
        and IZG_ID = new.IZG_ID
+
        and COUNTRY_ID = new.COUNTRY_ID
+
        and BARCODE = new.BCODE_IZG
+
  into new.WARE_ID;
+
 
+
  /* вторая строчка = после приведения */
+
  insert into DOC_DETAIL_ACTIVE_LOG (ID, PARENT_ID, DOC_ID, PART_ID, PART_PARENT_ID, DOC_DETAIL_ID, PRICE, NAC, QUANT,
+
                                    DISCOUNT, SUMMA, SUMMA_O, DCARD, WARE_ID, PRICE_O, PRICE_Z, PRICE_R, BARCODE,
+
                                    BARCODE1, BCODE_IZG, GODENDO, SERIA, NDS, SUM_NDSO, SERT, DATESERT, KEMVSERT,
+
                                    SDSERT, REGN, NGTD, EDIZM, NAME_ID, IZG_ID, COUNTRY_ID, ORIG_CODE, ORIG_NAME_ID,
+
                                    ORIG_IZG_ID, ORIG_COUNTRY_ID, Z_ID, SKLAD_ID, SNAME, SIZG, SCOUNTRY, SORIG_NAME,
+
                                    SORIG_IZG, SORIG_COUNTRY, INSERTDT, INFO, KOEF, MOTHERPART_ID, DEP, SUM_DSC,
+
                                    HUMAN_QUANT, CUSTOMDRAW, PART_TYPE, BASE_AGENT_ID)
+
  values (new.ID, new.PARENT_ID, new.DOC_ID, new.PART_ID, new.PART_PARENT_ID, new.DOC_DETAIL_ID, new.PRICE, new.NAC,
+
          new.QUANT, new.DISCOUNT, new.SUMMA, new.SUMMA_O, new.DCARD, new.WARE_ID, new.PRICE_O, new.PRICE_Z,
+
          new.PRICE_R, new.BARCODE, new.BARCODE1, new.BCODE_IZG, new.GODENDO, new.SERIA, new.NDS, new.SUM_NDSO,
+
          new.SERT, new.DATESERT, new.KEMVSERT, new.SDSERT, new.REGN, new.NGTD, new.EDIZM, new.NAME_ID, new.IZG_ID,
+
          new.COUNTRY_ID, new.ORIG_CODE, new.ORIG_NAME_ID, new.ORIG_IZG_ID, new.ORIG_COUNTRY_ID, new.Z_ID, new.SKLAD_ID,
+
          new.SNAME, new.SIZG, new.SCOUNTRY, new.SORIG_NAME, new.SORIG_IZG, new.SORIG_COUNTRY, new.INSERTDT, new.INFO,
+
          new.KOEF, new.MOTHERPART_ID, new.DEP, new.SUM_DSC, new.HUMAN_QUANT, new.CUSTOMDRAW, new.PART_TYPE,
+
          new.BASE_AGENT_ID);
+
  /* -- */
+
 
+
end
+
if (new.PART_PARENT_ID is null) then
+
  new.PART_PARENT_ID = 0;
+
if (new.WARE_ID is null) then
+
  new.WARE_ID = 0;
+
if (new.NAME_ID is null) then
+
  new.NAME_ID = 0;
+
if (new.IZG_ID is null) then
+
  new.IZG_ID = 0;
+
if (new.COUNTRY_ID is null) then
+
  new.COUNTRY_ID = 0;
+
if (new.ORIG_NAME_ID is null) then
+
  new.ORIG_NAME_ID = 0;
+
if (new.ORIG_IZG_ID is null) then
+
  new.ORIG_IZG_ID = 0;
+
if (new.ORIG_COUNTRY_ID is null) then
+
  new.ORIG_COUNTRY_ID = 0;
+
if (new.Z_ID is null) then
+
  new.Z_ID = 0;
+
if (new.SKLAD_ID is null) then
+
  new.SKLAD_ID = '';
+
if (new.MOTHERPART_ID is null) then
+
  new.MOTHERPART_ID = 0;
+
if (new.DOC_DETAIL_ID is null) then
+
  new.DOC_DETAIL_ID = 0;
+
 
+
if (new.PART_ID > 0) then
+
/* заполняем значения партии */
+
begin
+
  select WARE_ID,
+
        PRICE,
+
        PRICE_O,
+
        PRICE_Z,
+
        PRICE_R,
+
        /* QUANT, */
+
        /* BARCODE, */
+
        BARCODE1,
+
        /* KRITK, */
+
        GODENDO,
+
        SERIA,
+
        NDS,
+
        /* SUM_NDSO, */
+
        SERT,
+
        DATESERT,
+
        KEMVSERT,
+
        SDSERT,
+
        REGN,
+
        NGTD,
+
        EDIZM,
+
        NAC,
+
        DEP,
+
        PART_TYPE,
+
        BASE_AGENT_ID,
+
        GROUP_ID
+
  from PARTS
+
  where ID = new.PART_ID
+
  into new.WARE_ID,
+
      new.PRICE,
+
      new.PRICE_O,
+
      new.PRICE_Z,
+
      new.PRICE_R,
+
 
+
      /* new.QUANT, */
+
      /* new.BARCODE, */
+
      new.BARCODE1,
+
 
+
      /* new.KRITK,*/
+
      new.GODENDO,
+
      new.SERIA,
+
      new.NDS,
+
 
+
      /* new.SUM_NDSO, */
+
      new.SERT,
+
      new.DATESERT,
+
      new.KEMVSERT,
+
      new.SDSERT,
+
      new.REGN,
+
      new.NGTD,
+
      new.EDIZM,
+
      new.NAC,
+
      new.DEP,
+
      new.PART_TYPE,
+
      new.BASE_AGENT_ID,
+
      new.GROUP_ID;
+
end
+
if (new.GROUP_ID is null) then
+
  new.GROUP_ID = 0;
+
/* if (new.ware_id>0) then -- заполняем значения позиции */
+
if (new.WARE_ID not in ('-1', '0')) then
+
/* заполняем значения позиции */
+
begin
+
  select WW.NAME_ID,
+
        (select SVALUE
+
          from VALS
+
          where ID = WW.NAME_ID),
+
        WW.IZG_ID,
+
        (select SVALUE
+
          from VALS
+
          where ID = WW.IZG_ID),
+
        WW.COUNTRY_ID,
+
        (select SVALUE
+
          from VALS
+
          where ID = WW.COUNTRY_ID),
+
        WW.ORIG_CODE,
+
        WW.ORIG_NAME_ID,
+
        (select SVALUE
+
          from VALS
+
          where ID = WW.ORIG_NAME_ID),
+
        WW.ORIG_IZG_ID,
+
        (select SVALUE
+
          from VALS
+
          where ID = WW.ORIG_IZG_ID),
+
        WW.ORIG_COUNTRY_ID,
+
        (select SVALUE
+
          from VALS
+
          where ID = WW.ORIG_COUNTRY_ID),
+
        WW.BARCODE,
+
        WW.Z_ID,
+
        WW.SKLAD_ID
+
  from WARES WW
+
  where WW.ID = new.WARE_ID
+
  into new.NAME_ID,
+
      new.SNAME,
+
      new.IZG_ID,
+
      new.SIZG,
+
      new.COUNTRY_ID,
+
      new.SCOUNTRY,
+
      new.ORIG_CODE,
+
      new.ORIG_NAME_ID,
+
      new.SORIG_NAME,
+
      new.ORIG_IZG_ID,
+
      new.SORIG_IZG,
+
      new.ORIG_COUNTRY_ID,
+
      new.SORIG_COUNTRY,
+
      new.BCODE_IZG,
+
      new.Z_ID,
+
      new.SKLAD_ID;
+
end
+
else
+
begin
+
  /* if (new.ware_id<0) then */
+
  if (new.WARE_ID = '-1') then
+
  begin
+
  select GOODNAME,
+
          GOODIZG,
+
          GOODCOUNTRY
+
  from PR_MAKEGOODWAREVALUES(new.SNAME, new.SORIG_NAME, new.SIZG, new.SORIG_IZG, new.SCOUNTRY, new.SORIG_COUNTRY, new.ORIG_CODE, new.ID, new.PART_TYPE, new.BCODE_IZG)
+
  into new.SNAME,
+
        new.SIZG,
+
        new.SCOUNTRY;
+
  new.WARE_ID = 0;
+
  end
+
end
+
if (new.QUANT is null) then
+
  new.QUANT = 0;
+
if (new.PRICE is null) then
+
  new.PRICE = 0;
+
if (new.PRICE_O is null) then
+
  new.PRICE_O = 0;
+
if (new.NDS is null) then
+
  new.NDS = 0;
+
if (new.SUMMA is null) then
+
  new.SUMMA = new.QUANT * new.PRICE;
+
if (new.SUM_DSC is null) then
+
  new.SUM_DSC = 0;
+
if (new.SUMMA_O is null) then
+
begin
+
  new.SUMMA_O = new.QUANT * new.PRICE_O;
+
end
+
else
+
begin
+
  if (new.QUANT <> 0) then
+
  new.PRICE_O = new.SUMMA_O / new.QUANT;
+
end
+
if (new.SUM_NDSO is null) then
+
  new.SUM_NDSO = new.SUMMA_O * new.NDS / 100;
+
if (((new.NAC is null) or (new.NAC = 0)) and
+
    new.PRICE_O <> 0) then
+
  new.NAC = (new.PRICE - new.PRICE_O) * 100 / new.PRICE_O;
+
if (new.DEP is null) then
+
begin
+
  select first 1 ID
+
  from DEPS
+
  where NDS = new.NDS
+
  order by ID
+
  into new.DEP;
+
end
+
if (new.DEP is null) then
+
  new.DEP = 0;
+
/* -> 20130301-ann gen_barcode_by_name */
+
if ((new.BARCODE is null) or (trim(new.BARCODE) = '')) then
+
begin
+
  if ((select PARAM_VALUE
+
      from PR_GETPARAMVALUE('GEN_BARCODE', 0)) = 0) then
+
  select RES_BCODE
+
  from UTPR_GETCHECKSUM_EAN13(new.ID)
+
  into new.BARCODE;
+
 
+
  /* else select res_bcode from utpr_getchecksum_ean13(new.name_id,'88') into new.barcode; */
+
  else
+
  select RES_BCODE
+
  from UTPR_GETCHECKSUM_EAN13((select L_ID
+
                                from VALS
+
                                where D$UUID = new.NAME_ID), '88')
+
  into new.BARCODE;
+
end
+
/* -> 20130301-ann gen_barcode_by_name */
+
if (new.PART_PARENT_ID > 0) then
+
begin
+
  update DOC_DETAIL_ACTIVE
+
  set QUANT = QUANT - new.QUANT,
+
      SUMMA = SUMMA - new.SUMMA,
+
      SUMMA_O = SUMMA_O - new.SUMMA_O,
+
      SUM_NDSO = SUM_NDSO - new.SUM_NDSO
+
  where ID = new.PART_PARENT_ID;
+
  execute procedure PR_COPY_MEMBERSHIP('DOC_DETAIL_ACTIVE', new.PART_PARENT_ID, new.ID);
+
end
+
end;
+
 
+
create or alter trigger DOC_DETAIL_ACTIVE_BU0 for DOC_DETAIL_ACTIVE
+
active before update position 0
+
as
+
begin
+
/*20160513
+
    if ((new.SNAME <> old.SNAME) or (new.NAME_ID is null) or (new.NAME_ID = '0')) then
+
      select VAL_ID from PR_GETVAL_ID(new.SNAME, 0, new.PART_TYPE, new.MNN) into new.NAME_ID;
+
    */
+
 
+
if (new.NAME_ID is null) then
+
  new.NAME_ID = 0;
+
if ((new.SUMMA is null) and
+
    ((new.QUANT <> 0) and
+
    (new.PRICE <> 0))) then
+
begin
+
  new.SUMMA = new.QUANT * new.PRICE;
+
  if (new.SUM_DSC is not null) then
+
  new.SUMMA = new.SUMMA - new.SUM_DSC;
+
end
+
if (((new.SUMMA_O = 0) or (new.SUMMA_O is null)) and
+
    ((new.QUANT <> 0) and
+
    (new.PRICE_O <> 0))) then
+
  new.SUMMA_O = new.QUANT * new.PRICE_O;
+
if (new.NAME_ID <> old.NAME_ID) then
+
  execute procedure PR_COPYGROUPS(old.NAME_ID, new.NAME_ID);
+
if (new.SUM_DSC is null) then
+
  if (new.SUMMA <> old.SUMMA) then
+
  begin
+
  new.SUM_DSC = (1 + new.DISCOUNT / 100) * 100 * new.SUMMA / (100 + old.DISCOUNT) - 100 * new.SUMMA / (100 + old.DISCOUNT);
+
  --new.summa=(1+new.discount/100)*100*old.summa/(100+old.discount);
+
  end
+
if (new.SUM_DSC is null) then
+
  if (new.DISCOUNT <> old.DISCOUNT) then
+
  begin
+
  new.SUM_DSC = (1 + new.DISCOUNT / 100) * 100 * old.SUMMA / (100 + old.DISCOUNT) - 100 * old.SUMMA / (100 + old.DISCOUNT);
+
  new.SUMMA = (1 + new.DISCOUNT / 100) * 100 * old.SUMMA / (100 + old.DISCOUNT);
+
  end
+
 
+
select ID
+
from VALS
+
where VTYPE = 0
+
      and ALTTYPE = new.PART_TYPE
+
      and SVALUE = new.SNAME
+
into new.NAME_ID;
+
if (new.NAME_ID is null) then
+
  new.NAME_ID = 0;
+
select ID
+
from VALS
+
where VTYPE = 3
+
      and ALTTYPE = new.PART_TYPE
+
      and SVALUE = new.SIZG
+
into new.IZG_ID;
+
if (new.IZG_ID is null) then
+
  new.IZG_ID = 0;
+
select ID
+
from VALS
+
where VTYPE = 2
+
      and ALTTYPE = new.PART_TYPE
+
      and SVALUE = new.SCOUNTRY
+
into new.COUNTRY_ID;
+
if (new.COUNTRY_ID is null) then
+
  new.COUNTRY_ID = 0;
+
select ID
+
from VALS
+
where VTYPE = 1
+
      and ALTTYPE = new.PART_TYPE
+
      and SVALUE = new.SORIG_NAME
+
into new.ORIG_NAME_ID;
+
if (new.ORIG_NAME_ID is null) then
+
  new.ORIG_NAME_ID = 0;
+
select ID
+
from VALS
+
where VTYPE = 6
+
      and ALTTYPE = new.PART_TYPE
+
      and SVALUE = new.SORIG_IZG
+
into new.ORIG_IZG_ID;
+
if (new.ORIG_IZG_ID is null) then
+
  new.ORIG_IZG_ID = 0;
+
select ID
+
from VALS
+
where VTYPE = 5
+
      and ALTTYPE = new.PART_TYPE
+
      and SVALUE = new.SORIG_COUNTRY
+
into new.ORIG_COUNTRY_ID;
+
if (new.ORIG_COUNTRY_ID is null) then
+
  new.ORIG_COUNTRY_ID = 0;
+
 
+
insert into DOC_DETAIL_ACTIVE_LOG (ID, PARENT_ID, DOC_ID, PART_ID, PART_PARENT_ID, DOC_DETAIL_ID, PRICE, NAC, QUANT,
+
                                    DISCOUNT, SUMMA, SUMMA_O, DCARD, WARE_ID, PRICE_O, PRICE_Z, PRICE_R, BARCODE,
+
                                    BARCODE1, BCODE_IZG,
+
                                    --KRITK,
+
                                    GODENDO, SERIA, NDS, SUM_NDSO, SERT, DATESERT, KEMVSERT, SDSERT, REGN, NGTD, EDIZM,
+
                                    NAME_ID, IZG_ID, COUNTRY_ID, ORIG_CODE, ORIG_NAME_ID, ORIG_IZG_ID, ORIG_COUNTRY_ID,
+
                                    Z_ID, SKLAD_ID, SNAME, SIZG, SCOUNTRY, SORIG_NAME, SORIG_IZG, SORIG_COUNTRY,
+
                                    INSERTDT, INFO, KOEF, MOTHERPART_ID, DEP, SUM_DSC, HUMAN_QUANT, CUSTOMDRAW,
+
                                    PART_TYPE, BASE_AGENT_ID)
+
values (old.ID, old.PARENT_ID, old.DOC_ID, old.PART_ID, old.PART_PARENT_ID, old.DOC_DETAIL_ID, old.PRICE, old.NAC,
+
        old.QUANT, old.DISCOUNT, old.SUMMA, old.SUMMA_O, old.DCARD, old.WARE_ID, old.PRICE_O, old.PRICE_Z, old.PRICE_R,
+
        old.BARCODE, old.BARCODE1, old.BCODE_IZG,
+
        --old.KRITK,
+
        old.GODENDO, old.SERIA, old.NDS, old.SUM_NDSO, old.SERT, old.DATESERT, old.KEMVSERT, old.SDSERT, old.REGN,
+
        old.NGTD, old.EDIZM, old.NAME_ID, old.IZG_ID, old.COUNTRY_ID, old.ORIG_CODE, old.ORIG_NAME_ID, old.ORIG_IZG_ID,
+
        old.ORIG_COUNTRY_ID, old.Z_ID, old.SKLAD_ID, old.SNAME, old.SIZG, old.SCOUNTRY, old.SORIG_NAME, old.SORIG_IZG,
+
        old.SORIG_COUNTRY, old.INSERTDT, old.INFO, old.KOEF, old.MOTHERPART_ID, old.DEP, old.SUM_DSC, old.HUMAN_QUANT,
+
        old.CUSTOMDRAW, old.PART_TYPE, old.BASE_AGENT_ID);
+
end;
+
 
+
create or alter view VW_WARES (
+
    ID,
+
    NAME_ID,
+
    SNAME,
+
    IZG_ID,
+
    SIZG,
+
    COUNTRY_ID,
+
    SCOUNTRY,
+
    ORIG_CODE,
+
    ORIG_NAME_ID,
+
    SORIG_NAME,
+
    ORIG_IZG_ID,
+
    SORIG_IZG,
+
    ORIG_COUNTRY_ID,
+
    SORIG_COUNTRY,
+
    BARCODE,
+
    Z_ID,
+
    SKLAD_ID,
+
    INSERTDT,
+
    PACKET,
+
    MGN_NAME,
+
    MGN_ID,
+
    MGN_SOURCE)
+
as
+
select W.ID,
+
      W.NAME_ID,
+
      W.SNAME, --(select svalue from vals where id = w.name_id),
+
      W.IZG_ID,
+
      (select SVALUE
+
        from VALS
+
        where ID = W.IZG_ID),
+
      W.COUNTRY_ID,
+
      (select SVALUE
+
        from VALS
+
        where ID = W.COUNTRY_ID),
+
      W.ORIG_CODE,
+
      W.ORIG_NAME_ID,
+
      (select SVALUE
+
        from VALS
+
        where ID = W.ORIG_NAME_ID),
+
      W.ORIG_IZG_ID,
+
      (select SVALUE
+
        from VALS
+
        where ID = W.ORIG_IZG_ID),
+
      W.ORIG_COUNTRY_ID,
+
      (select SVALUE
+
        from VALS
+
        where ID = W.ORIG_COUNTRY_ID),
+
      W.BARCODE,
+
      W.Z_ID,
+
      W.SKLAD_ID,
+
      W.INSERTDT,
+
      W.PACKET,
+
      W.MGN_NAME,
+
      W.MGN_ID,
+
      W.MGN_SOURCE
+
from WARES W;
+
 
+
create or alter procedure PR_DOC_DETAIL_ACTIVE_ONCOMMIT (
+
    ACTIVE_ID type of DM_ID,
+
    COMMIT_ID type of DM_ID,
+
    DOC_ID type of DM_ID,
+
    COMMITDATE type of DM_DATETIME)
+
as
+
begin
+
/*
+
  эта процедура выполняется для каждой записи, добавляемой в DOC_DETAIL в процедурах проведения документов
+
*/
+
/* Для вречей*/
+
update DOC_DETAIL_DOCTOR
+
set DOC_DETAIL_ID = :COMMIT_ID,
+
    DOC_ID = :DOC_ID,
+
    COMMITDATE = :COMMITDATE
+
where DOC_DETAIL_ACTIVE_ID = :ACTIVE_ID;
+
/* Старые рецепты*/
+
update DOC_DETAIL_MAKE
+
set DOC_DETAIL_ID = :COMMIT_ID,
+
    DOC_ID = :DOC_ID,
+
    COMMITDATE = :COMMITDATE
+
where DOC_DETAIL_ACTIVE_ID = :ACTIVE_ID;
+
/* Новые рецепты*/
+
update RECEPTS
+
set TABLE_ID = :COMMIT_ID,
+
    TABLE_NAME = 'DOC_DETAIL',
+
    STATUS = 1
+
where DOC_DETAIL_ACTIVE_ID = :ACTIVE_ID;--для рецептов
+
 
+
execute procedure PR_AUTO_WARESLINK(:DOC_ID, :ACTIVE_ID);
+
 
+
end;
+
</pre>
+
 
+
==Славины скрипты - ДЛЯ СИНХРОНИЗАЦИИ И СЖАТИЯ ТОВАРОВ==
+
===1===
+
<pre>
+
set term ^;
+
 
+
create trigger WARES_LOG_BI_COWATMP for WARES_LOG
+
active before insert position 0
+
as
+
begin
+
if (new.SKLAD_ID is null) then
+
  new.SKLAD_ID = '';
+
end^
+
 
+
set term; ^
+
 
+
create table TMP_LOG (SKEY DM_TEXT, SVALUE DM_TEXT);
+
 
+
alter table WARES_LOG add ACTUAL_WARE_ID DM_UUID_NULL;
+
 
+
create index WARES_LOG_ACTUAL_WARE_ID on WARES_LOG (ACTUAL_WARE_ID);
+
 
+
create generator GEN_VALS_CARANTINE_ID;
+
 
+
create table VALS_CARANTINE (ID DM_ID not null, CUR_ID DM_UUID, NEW_ID DM_UUID, INSERTDT DM_DATETIME, FROM_PROFILE_ID DM_ID_NULL);
+
set term ^;
+
 
+
create or alter trigger VALS_CARANTINE_BI for VALS_CARANTINE
+
active before insert position 0
+
as
+
begin
+
if (new.ID is null) then
+
  new.ID = gen_id(GEN_VALS_CARANTINE_ID, 1);
+
new.INSERTDT = current_timestamp;
+
if (new.FROM_PROFILE_ID is null) then
+
  select FROM_PROFILE_ID
+
  from G$DISTRIBUTE
+
  where UUID = new.NEW_ID
+
  into new.FROM_PROFILE_ID;
+
end^
+
 
+
set term ; ^
+
set term ^ ;
+
 
+
create or alter trigger VALS_BIU_DODOUBLES for VALS
+
active before insert or update position 0
+
as
+
declare variable ID type of DM_UUID;
+
begin
+
select ID
+
from VALS
+
where VTYPE = new.VTYPE
+
      and SVALUE = new.SVALUE
+
      and ALTTYPE = new.ALTTYPE
+
      and D$UUID <> new.D$UUID
+
into :ID;
+
if (ID is null) then
+
  exit;
+
/*
+
0 - приведенное наименование
+
3 - приведенный производитель
+
2 - приведенная страна
+
1 - ориг. наименование
+
6 - ориг. производитель
+
5 - ориг. страна
+
Запускает цепочку апдейтов. При изменении wares проверяются дубли, и, в случае нахождения, правятся партии
+
*/
+
if (new.VTYPE = 0) then
+
  update WARES
+
  set NAME_ID = new.ID
+
  where NAME_ID = :ID;
+
else
+
if (new.VTYPE = 3) then
+
  update WARES
+
  set IZG_ID = new.ID
+
  where IZG_ID = :ID;
+
else
+
if (new.VTYPE = 2) then
+
  update WARES
+
  set COUNTRY_ID = new.ID
+
  where COUNTRY_ID = :ID;
+
else
+
if (new.VTYPE = 1) then
+
  update WARES
+
  set ORIG_NAME_ID = new.ID
+
  where ORIG_NAME_ID = :ID;
+
else
+
if (new.VTYPE = 6) then
+
  update WARES
+
  set ORIG_IZG_ID = new.ID
+
  where ORIG_IZG_ID = :ID;
+
else
+
if (new.VTYPE = 5) then
+
  update WARES
+
  set ORIG_COUNTRY_ID = new.ID
+
  where ORIG_COUNTRY_ID = :ID;
+
else
+
  exit;
+
insert into VALS_CARANTINE (CUR_ID, NEW_ID)
+
values (:ID, new.ID);
+
delete from VALS
+
where ID = :ID;
+
end^
+
 
+
set term;
+
^
+
 
+
set term ^;
+
 
+
create or alter trigger WARES_BIU_COWA for WARES
+
active before insert or update position 0
+
as
+
declare variable CUR_ID type of DM_UUID;
+
begin
+
select D$UUID
+
from WARES
+
where NAME_ID = new.NAME_ID
+
      and IZG_ID = new.IZG_ID
+
      and COUNTRY_ID = new.COUNTRY_ID
+
      and BARCODE = new.BARCODE
+
      and D$UUID <> new.D$UUID
+
into :CUR_ID;
+
if (CUR_ID is null) then
+
  exit;
+
if (not exists(select ID
+
                from WARES_LOG
+
                where ID = :CUR_ID
+
                      and ACTUAL_WARE_ID = new.ID)) then
+
begin
+
  insert into WARES_LOG (ID, NAME_ID, IZG_ID, COUNTRY_ID, ORIG_CODE, ORIG_NAME_ID, ORIG_IZG_ID, ORIG_COUNTRY_ID,
+
                        BARCODE, Z_ID, SKLAD_ID, INSERTDT, PACKET, L_ID, ACTUAL_WARE_ID)
+
  select ID,
+
        NAME_ID,
+
        IZG_ID,
+
        COUNTRY_ID,
+
        ORIG_CODE,
+
        ORIG_NAME_ID,
+
        ORIG_IZG_ID,
+
        ORIG_COUNTRY_ID,
+
        BARCODE,
+
        Z_ID,
+
        SKLAD_ID,
+
        INSERTDT,
+
        PACKET,
+
        L_ID,
+
        new.D$UUID
+
  from WARES
+
  where D$UUID = :CUR_ID;
+
end
+
update PARTS
+
set WARE_ID = new.D$UUID
+
where WARE_ID = :CUR_ID;
+
update DOC_DETAIL_ACTIVE
+
set WARE_ID = new.D$UUID
+
where WARE_ID = :CUR_ID;
+
delete from WARES
+
where D$UUID = :CUR_ID;
+
end^
+
 
+
set term;
+
^
+
 
+
set term ^;
+
 
+
create or alter trigger PARTS_BIU_COWA for PARTS
+
active before insert or update position 0
+
as
+
declare variable WARE_ID type of DM_UUID;
+
begin
+
if (exists(select ID
+
            from WARES
+
            where ID = new.WARE_ID)) then
+
  exit;
+
/* select max(actual_ware_id) from wares_log where id=new.ware_id into :ware_id; */
+
select max(ACTUAL_WARE_ID)
+
from WARES_LOG
+
where ID = new.WARE_ID
+
      and (exists(select ID
+
                  from WARES W
+
                  where W.D$UUID = ACTUAL_WARE_ID))
+
into :WARE_ID;
+
if (WARE_ID is null) then
+
  exit;
+
/* if (exists(select id from wares where d$uuid=:ware_id)) then */
+
new.WARE_ID = :WARE_ID;
+
end^
+
 
+
set term;
+
^
+
 
+
set term ^;
+
 
+
create or alter trigger WARES_BD_COWA for WARES
+
active before delete position 0
+
as
+
declare variable WARE_ID type of DM_UUID;
+
begin
+
if (not exists(select ID
+
                from PARTS
+
                where WARE_ID = old.ID)) then
+
  exit;
+
/*  select max(actual_ware_id) from wares_log where id=old.id into ware_id; */
+
select max(ACTUAL_WARE_ID)
+
from WARES_LOG WL
+
where ID = old.ID
+
      and (exists(select ID
+
                  from WARES W
+
                  where W.ID = WL.ACTUAL_WARE_ID))
+
into WARE_ID;
+
if (WARE_ID is null) then
+
  insert into TMP_LOG (SKEY, SVALUE)
+
  values ('Нет ware по acual_ware!', old.ID);
+
else
+
  update PARTS
+
  set WARE_ID = :WARE_ID
+
  where WARE_ID = old.ID;
+
end^
+
 
+
set term;
+
^
+
 
+
set term ^;
+
 
+
create or alter procedure PR_TMP_CHANGEWARES_CONSTR
+
as
+
declare variable UUID type of DM_UUID;
+
declare variable NAME_ID type of DM_UUID;
+
declare variable IZG_ID type of DM_UUID;
+
declare variable COUNTRY_ID type of DM_UUID;
+
declare variable BARCODE type of DM_TEXT;
+
declare variable ACTUAL_UUID type of DM_UUID;
+
declare variable EXISTING_ACTUAL_WARE_ID type of DM_UUID;
+
begin
+
/*  delete from wares_log wl where (ACTUAL_WARE_ID is null) and (not exists (select id from wares w where w.id=wl.id)); */
+
for select min(D$UUID),
+
            NAME_ID,
+
            IZG_ID,
+
            COUNTRY_ID,
+
            BARCODE
+
    from WARES
+
    group by NAME_ID, IZG_ID, COUNTRY_ID, BARCODE
+
    having count(1) > 1
+
    into ACTUAL_UUID,
+
          NAME_ID,
+
          IZG_ID,
+
          COUNTRY_ID,
+
          BARCODE
+
do
+
begin
+
  EXISTING_ACTUAL_WARE_ID = null;
+
  select max(ACTUAL_WARE_ID)
+
  from WARES_LOG
+
  where NAME_ID = :NAME_ID
+
        and IZG_ID = :IZG_ID
+
        and COUNTRY_ID = :COUNTRY_ID
+
        and BARCODE = :BARCODE
+
  into EXISTING_ACTUAL_WARE_ID;
+
  if (EXISTING_ACTUAL_WARE_ID is not null) then
+
  begin
+
  if (exists(select ID
+
              from WARES
+
              where D$UUID = :EXISTING_ACTUAL_WARE_ID)) then
+
    ACTUAL_UUID = EXISTING_ACTUAL_WARE_ID;
+
  end
+
  for select D$UUID
+
      from WARES
+
      where NAME_ID = :NAME_ID
+
            and IZG_ID = :IZG_ID
+
            and COUNTRY_ID = :COUNTRY_ID
+
            and BARCODE = :BARCODE
+
            and D$UUID <> :ACTUAL_UUID
+
      into UUID
+
  do
+
  begin
+
  insert into WARES_LOG (ID, NAME_ID, IZG_ID, COUNTRY_ID, ORIG_CODE, ORIG_NAME_ID, ORIG_IZG_ID, ORIG_COUNTRY_ID,
+
                          BARCODE, Z_ID, SKLAD_ID, INSERTDT, PACKET, L_ID, ACTUAL_WARE_ID)
+
  select ID,
+
          NAME_ID,
+
          IZG_ID,
+
          COUNTRY_ID,
+
          ORIG_CODE,
+
          ORIG_NAME_ID,
+
          ORIG_IZG_ID,
+
          ORIG_COUNTRY_ID,
+
          BARCODE,
+
          Z_ID,
+
          SKLAD_ID,
+
          INSERTDT,
+
          PACKET,
+
          L_ID,
+
          :ACTUAL_UUID
+
  from WARES
+
  where D$UUID = :UUID;
+
  --на триггере      update parts set ware_id=:actual_uuid where ware_id=:uuid;
+
  delete from WARES
+
  where D$UUID = :UUID;
+
  end
+
end
+
end^
+
 
+
set term;
+
^
+
 
+
set term ^;
+
 
+
create or alter trigger WARES_LOG_AI_COWATMP for WARES_LOG
+
active after insert position 0
+
as
+
begin
+
if (new.ACTUAL_WARE_ID is null) then
+
  exit;
+
if (exists(select ID
+
            from WARES
+
            where ID = new.ACTUAL_WARE_ID)) then
+
  delete from WARES
+
  where ID = new.ID;
+
else
+
  insert into TMP_LOG (SKEY, SVALUE)
+
  values ('WARES_LOG_AI_COWATMP', new.ACTUAL_WARE_ID);
+
end^
+
 
+
set term;
+
^
+
 
+
alter trigger WARES_AD_DISTR inactive;
+
alter trigger WARES_BU_DISTR inactive;
+
alter trigger WARES_LOG_BI_DISTR inactive;
+
alter trigger WARES_LOG_AI0 inactive;
+
alter trigger PARTS_AU0 inactive;
+
 
+
alter trigger PARTS_BU_DISTR inactive;
+
alter trigger PARTS_BU_G$SYNC inactive;
+
alter trigger PARTS_BU0 inactive;
+
</pre>
+
 
+
===4===
+
<pre>
+
/* Insert into wares_log */
+
</pre>
+
 
+
===3===
+
<pre>
+
alter trigger PARTS_BU_DISTR active;
+
alter trigger PARTS_BU_G$SYNC active;
+
alter trigger PARTS_BU0 active;
+
 
+
alter trigger WARES_LOG_BI_DISTR active;
+
alter trigger WARES_AD_DISTR active;
+
alter trigger WARES_BU_DISTR active;
+
 
+
create index WARES_IDX_U on WARES(NAME_ID, IZG_ID, COUNTRY_ID, BARCODE);
+
 
+
alter table WARES drop constraint UNQ1_WARES;
+
alter table WARES drop constraint WARES_IDX1;
+
create index WARES_IDX1 on WARES(NAME_ID, IZG_ID, COUNTRY_ID, ORIG_CODE, ORIG_NAME_ID, ORIG_IZG_ID, ORIG_COUNTRY_ID);
+
 
+
drop trigger WARES_LOG_BI_COWATMP;
+
 
+
alter trigger WARES_AU0 inactive;
+
 
+
alter trigger WARES_BU0 inactive;
+
alter trigger WARES_BIU_COWA inactive;
+
alter trigger WARES_SNAME_BU0 inactive;
+
alter trigger WARES_BU_DISTR inactive;
+
</pre>
+
 
+
===4===
+
<pre>
+
update WARES
+
set BARCODE = ''
+
where BARCODE is null;
+
alter trigger WARES_BU0 active;
+
alter trigger WARES_BIU_COWA active;
+
alter trigger WARES_SNAME_BU0 active;
+
alter trigger WARES_BU_DISTR active;
+
 
+
create unique index WARES_IDX_UUID on WARES(D$UUID);
+
</pre>
+
 
+
===5===
+
<pre>
+
execute procedure PR_TMP_CHANGEWARES_CONSTR;
+
</pre>
+
 
+
===6===
+
<pre>
+
drop index WARES_IDX_U;
+
create unique index WARES_IDX_U on WARES (NAME_ID, IZG_ID, COUNTRY_ID, BARCODE);
+
 
+
drop trigger WARES_LOG_AI_COWATMP;
+
</pre>
+
 
+
===7===
+
<pre>
+
/* update or insert into wares */
+
</pre>
+
 
+
===8===
+
<pre>
+
ALTER TRIGGER WARES_AU0 ACTIVE;
+
ALTER TRIGGER WARES_LOG_AI0 ACTIVE;
+
ALTER TRIGGER PARTS_AU0 ACTIVE;
+
 
+
ALTER TRIGGER PARTS_BU_DISTR INACTIVE;
+
</pre>
+
 
+
===9===
+
<pre>
+
execute procedure DBGPR_MAKEWAREBASEFROMDOCS(0);
+
</pre>
+
 
+
===10===
+
<pre>
+
ALTER TRIGGER PARTS_BU_DISTR ACTIVE;
+
 
</pre>
 
</pre>

Версия 10:09, 14 января 2017

Предварительная подготовка

1) Настраиваем двустороннюю синхронизацию таблиц WARES_TREB и G$PROFILES;
2) Проверяем, что у клиентов в PARAMS есть параметр CODE_PROFILE (Код профиля) и он корректный; 
3) Обновляем у всех клиентов Менеджер до версии не ниже ManagerXP2_273_5 от декабря 2016г.

Подготовка серверной базы и скриптов для Единого Окна

1) Обновляем скрипты синхронизации на сервере;
2) Блокируем синхронизацию (оставляем только g$tasks);
3) Готовим серверную базу;


Останавливаем торговлю в точках

CREATE EXCEPTION EX_DONT_WORK 'Вход в программу заблокирован. Идет обновление...';
SET TERM ^ ;
CREATE OR ALTER TRIGGER SESSIONS_DONT_WORK_BI0 FOR SESSIONS
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  exception EX_DONT_WORK; --Вход в программу заблокирован. Идет обновление...
end
^
SET TERM ; ^
INSERT INTO Z$SERVICE (ID, TASK, STATUS, INSERTDT, STARTDT, ENDDT, TXTLOG) VALUES (999, 'POLITE_RESTORE', 0, current_timestamp, current_timestamp, current_timestamp, NULL);
update sessions s
set s.enddt=current_timestamp, s.endflag=0, s.endsession_id=s.id
where 1=1
and s.prog containing 'manager'
and s.endflag is null
and cast(s.startdt as dm_date) >= dateadd(-3 day to current_date);