ЕГАИС постановка на баланс

Материал из wiki.standart-n.ru
Перейти к: навигация, поиск

Скрипты для постановки на баланс

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

PR_ALTER_VIEW

Заменить и запустить версию Менеджера

Менеджер выполнит некоторые скрипты уже в него заложенные
Для скриптов ниже актуальная версия Менеджера ManagerXP2_272_78 и выше

Выполнить скрипт

SET TERM ^ ;

execute procedure PR_ALTER_VIEW('PARTS','EGAIS_REGID, EGAIS_QUANT, EGAIS_ALCCODE','PARTS_IDX_EGAIS_1','index');^
execute procedure PR_ALTER_VIEW('PARTS','EGAIS_REGID, EGAIS_BREGID, EGAIS_ALCCODE, EGAIS_QUANT','PARTS_IDX_EGAIS_2','index');^
execute procedure PR_ALTER_VIEW('EGAIS_DETAIL','DOC_DETAIL_ID','EGAIS_DETAIL_IDX1','index');^


--Зкомментированные ниже строки - наброски для гурманов для тогочтобы внести в базы ТМСки по списанию пива и созданию документа перемещения в торговый зал
--EXECUTE BLOCK AS BEGIN
--if ((select 1 from groups where caption = 'Списание пива') is null) then
--execute statement 'INSERT INTO GROUPS (PARENT_ID, CAPTION, GROUPTABLE, STATUS, INSERTDT, SYSTEMFLAG, DESCRIPTION, IMAGEINDEX, DATA, COLOR, SORTING, BASE_AGENT_ID, SID) VALUES (-220, ''Списание пива'', --''TMS'', 0, ''27-SEP-2016 16:24:48'', 0, NULL, -1, NULL, 16777215, NULL, 0, NULL);';
--END;^

--EXECUTE BLOCK AS BEGIN
--if ((select 1 from groups where caption = 'Списание пива') is null) then
--execute statement 'update groups gp set gp.data =
--                    (select g.tmp_blob1 from G$PROFILES g where g.id = 1)
--                   where gp.caption = ''Списание пива'' and (select g.tmp_blob1 from G$PROFILES g where g.id = 1) is not null;^';
--END;^

--EXECUTE BLOCK AS BEGIN
--if ((select 1 from groups where caption = 'Переместить в торговый зал') is null) then
--execute statement '
--INSERT INTO GROUPS (PARENT_ID, CAPTION, GROUPTABLE, STATUS, INSERTDT, SYSTEMFLAG, DESCRIPTION, IMAGEINDEX, DATA, COLOR, SORTING, BASE_AGENT_ID, SID) VALUES ( -221, 'Переместить в торговый зал', ', 0, '8-OCT-2016 12:04:29.200', 0, NULL, -1, NULL, 16777215, NULL, 0, NULL);';
--END;^

--EXECUTE BLOCK AS BEGIN
--if ((select 1 from groups where caption = 'Переместить в торговый зал') is null) then
--execute statement 'update groups gp set gp.data =
--                    (select g.tmp_blob1 from G$PROFILES g where g.id = 3)
--                    where gp.caption = ''Переместить в торговый зал'' and (select g.tmp_blob1 from G$PROFILES g where g.id = 3) is not null;^';
--END;^

--поначалу не совсем понятно создавались наименования документов, тут правка на более понятные
update doc_types set caption='ЕГАИС Списание со склада' where id = 42;^
update doc_types set caption='ЕГАИС Списание из торгового зала' where id = 43;^
update doc_types set caption='ЕГАИС Перемещение со склада в торговый зал' where id = 44;^
update doc_types set caption='ЕГАИС Перемещение из торгового зала на склад' where id = 45;^
update doc_types set caption='ЕГАИС Акт постановки на баланс' where id = 46;^

execute procedure PR_ALTER_VIEW('VW_WAREBASE','EGAIS_SKLAD_QUANT','(select esk.quantity from egais_sklad esk where esk.informbregid = p.egais_bregid)','VIEW');^
execute procedure PR_ALTER_VIEW('VW_WAREBASE','EGAIS_SHOP_QUANT','(select esh.egais_quant from egais_shop esh where esh.alccode = p.egais_alccode and esh.producer_id = p.egais_producer_id)','VIEW');^
execute procedure PR_ALTER_VIEW('VW_WAREBASE','EGAIS_REGID','p.egais_regid','VIEW');^
execute procedure PR_ALTER_VIEW('VW_WAREBASE','EGAIS_BREGID','p.egais_bregid','VIEW');^

execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','BOTTLINGDATE','BOTTLINGDATE','VIEW');^
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','EGAIS_BARCODE','EGAIS_BARCODE','VIEW');^
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','EGAIS_FIXNUMBER','EGAIS_FIXNUMBER','VIEW');^
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','EGAIS_FIXDATE','EGAIS_FIXDATE','VIEW');^
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','EGAIS_REGID','p.egais_regid','VIEW');^
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','EGAIS_BREGID','p.egais_bregid','VIEW');^


--в начальных вариантах был неправилный домен для акцизы, после применения этого скрипта есть вероятность что нужно будет ждатьбэкап-ресторе, чтобы изменения применились
update RDB$RELATION_FIELDS set
RDB$FIELD_SOURCE = 'DM_BLOBTEXT'
where (RDB$FIELD_NAME = 'EGAIS_BARCODE') and
(RDB$RELATION_NAME = 'PARTS');^

update RDB$RELATION_FIELDS set
RDB$FIELD_SOURCE = 'DM_BLOBTEXT'
where (RDB$FIELD_NAME = 'EGAIS_BARCODE') and
(RDB$RELATION_NAME = 'DOC_DETAIL_ACTIVE');^

execute procedure PR_ALTER_VIEW('','','GEN_EGAIS_SKLAD_ID','generator');^

EXECUTE BLOCK AS BEGIN
if (not exists(select 1 from rdb$relations where rdb$relation_name = 'EGAIS_SKLAD')) then
execute statement 'CREATE TABLE EGAIS_SKLAD(ID DM_ID NOT NULL);';
END^
execute procedure PR_ALTER_VIEW('EGAIS_SKLAD','QUANTITY','DM_DOUBLE','TABLE');^
execute procedure PR_ALTER_VIEW('EGAIS_SKLAD','INFORMAREGID','DM_TEXT1024','TABLE');^
execute procedure PR_ALTER_VIEW('EGAIS_SKLAD','INFORMBREGID','DM_TEXT1024','TABLE');^
execute procedure PR_ALTER_VIEW('EGAIS_SKLAD','FULLNAME','DM_TEXT1024','TABLE');^
execute procedure PR_ALTER_VIEW('EGAIS_SKLAD','ALCCODE','DM_TEXT1024','TABLE');^
execute procedure PR_ALTER_VIEW('EGAIS_SKLAD','CAPACITY','DM_DOUBLE','TABLE');^
execute procedure PR_ALTER_VIEW('EGAIS_SKLAD','ALCVOLUME','DM_DOUBLE','TABLE');^
execute procedure PR_ALTER_VIEW('EGAIS_SKLAD','PRODUCTVCODE','DM_TEXT1024','TABLE');^
execute procedure PR_ALTER_VIEW('EGAIS_SKLAD','PRODUCER_CLIENTREGID','DM_TEXT1024','TABLE');^
execute procedure PR_ALTER_VIEW('EGAIS_SKLAD','PRODUCER_INN','DM_TEXT1024','TABLE');^
execute procedure PR_ALTER_VIEW('EGAIS_SKLAD','PRODUCER_KPP','DM_TEXT1024','TABLE');^
execute procedure PR_ALTER_VIEW('EGAIS_SKLAD','PRODUCER_FULLNAME','DM_TEXT1024','TABLE');^
execute procedure PR_ALTER_VIEW('EGAIS_SKLAD','PRODUCER_SHORTNAME','DM_TEXT1024','TABLE');^
execute procedure PR_ALTER_VIEW('EGAIS_SKLAD','PRODUCER_COUNTRY','DM_TEXT1024','TABLE');^
execute procedure PR_ALTER_VIEW('EGAIS_SKLAD','PRODUCER_REGIONCODE','DM_TEXT1024','TABLE');^
execute procedure PR_ALTER_VIEW('EGAIS_SKLAD','PRODUCER_DESCRIPTION','DM_TEXT1024','TABLE');^
execute procedure PR_ALTER_VIEW('EGAIS_SKLAD','INSERTDT',' DM_DATETIME','TABLE');^

execute procedure PR_ALTER_VIEW('EGAIS_SKLAD','INFORMAREGID','EGAIS_SKLAD_IDX1','index');^
execute procedure PR_ALTER_VIEW('EGAIS_SKLAD','INFORMBREGID','EGAIS_SKLAD_IDX2','index');^

CREATE OR ALTER TRIGGER EGAIS_SKLAD_BI FOR EGAIS_SKLAD
ACTIVE BEFORE INSERT POSITION 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gen_egais_sklad_id,1);
  if (new.insertdt is null) then
    new.insertdt = 'now';
end
^

--изменения типа редактирования штрихкода на тип memo, в большинстве случаев есть в настройках менеджера, иногда просто скрыто
update params set param_value = '            1' where PARAM_CAPTION = 'BCODE_EDITOR';^


--триггер слежения за актуальностью егаис остатков, в любом случае надо время от времени запрашивать их с егаиса 
CREATE OR ALTER TRIGGER DOC_DETAIL_AI1 FOR DOC_DETAIL
ACTIVE AFTER INSERT POSITION 0
AS
DECLARE VARIABLE PRODUCER_ID DM_TEXT;
DECLARE VARIABLE ALCCODE DM_TEXT1024;
DECLARE VARIABLE QUANT DM_DOUBLE;
DECLARE VARIABLE MMBSH DM_TEXT1024;
DECLARE VARIABLE SNAME DM_TEXT;
DECLARE VARIABLE UNITTYPE DM_TEXT;
DECLARE VARIABLE ALCVOLUME DM_TEXT;
DECLARE VARIABLE PRODUCTVCODE DM_TEXT;
DECLARE VARIABLE DOC_TYPE DM_ID;

begin
  /* учёт егаис остатков в реальном времени */
  select doc_type from docs where id = new.doc_id into DOC_TYPE;

  select first 1 MMBSH,SNAME from warebase where part_id = new.part_id into :MMBSH,:SNAME;

  select EGAIS_PRODUCER_ID,EGAIS_ALCCODE,ALC_VOLUME,EGAIS_PRODUCT_VCODE from parts p where p.id = new.part_id into :PRODUCER_ID,:ALCCODE,:ALCVOLUME,:PRODUCTVCODE;

  if (((MMBSH containing '-21={') or (MMBSH containing '-20={')) and ((PRODUCER_ID is not null) and (ALCCODE is not null))) then
  begin
      --работа только со складом
      if (:DOC_TYPE in (40,41,42,46)) then
      begin

        select first 1 QUANTITY from EGAIS_SKLAD es where es.PRODUCER_CLIENTREGID = :PRODUCER_ID and es.ALCCODE = :ALCCODE into :QUANT;

        if (QUANT is null) then
        begin
            insert into EGAIS_SKLAD (QUANTITY,FULLNAME,ALCCODE,PRODUCER_CLIENTREGID,PRODUCTVCODE)
                values (new.quant,:SNAME,:ALCCODE,:PRODUCER_ID,:PRODUCTVCODE);
        end
        else
          update EGAIS_SKLAD es set es.QUANTITY = :QUANT+new.quant where es.PRODUCER_CLIENTREGID = :PRODUCER_ID and es.ALCCODE = :ALCCODE;
      end

      --работа только со торговым залом
      if (:DOC_TYPE in (43,47)) then
      begin

      select first 1 EGAIS_QUANT from EGAIS_SHOP es where es.producer_id = :PRODUCER_ID and es.alccode = :ALCCODE into :QUANT;

      if (QUANT is null) then
      begin
            insert into EGAIS_SHOP (PART_ID,SNAME,EGAIS_QUANT,ALCCODE,UNITTYPE,ALCVOLUME,PRODUCTVCODE,PRODUCER_ID)
                values (new.part_id, :SNAME,  new.quant,:ALCCODE,:UNITTYPE,:ALCVOLUME,:PRODUCTVCODE,:PRODUCER_ID);
      end
      else
          update EGAIS_SHOP es set es.EGAIS_QUANT = :QUANT+new.quant where es.producer_id = :PRODUCER_ID and es.alccode = :ALCCODE;

      end

      --перемещение со склада в торговый зал
      if (:DOC_TYPE in (44)) then
      begin
        select first 1 QUANTITY from EGAIS_SKLAD es where es.PRODUCER_CLIENTREGID = :PRODUCER_ID and es.ALCCODE = :ALCCODE into :QUANT;

        if (QUANT is null) then
        begin
            insert into EGAIS_SKLAD (QUANTITY,FULLNAME,ALCCODE,PRODUCER_CLIENTREGID,PRODUCTVCODE)
                values (-new.quant,:SNAME,:ALCCODE,:PRODUCER_ID,:PRODUCTVCODE);
        end
        else
          update EGAIS_SKLAD es set es.QUANTITY = :QUANT-new.quant where es.PRODUCER_CLIENTREGID = :PRODUCER_ID and es.ALCCODE = :ALCCODE;

      select first 1 EGAIS_QUANT from EGAIS_SHOP es where es.producer_id = :PRODUCER_ID and es.alccode = :ALCCODE into :QUANT;

      if (QUANT is null) then
      begin
            insert into EGAIS_SHOP (PART_ID,SNAME,EGAIS_QUANT,ALCCODE,UNITTYPE,ALCVOLUME,PRODUCTVCODE,PRODUCER_ID)
                values (new.part_id, :SNAME,  new.quant,:ALCCODE,:UNITTYPE,:ALCVOLUME,:PRODUCTVCODE,:PRODUCER_ID);
      end
      else
          update EGAIS_SHOP es set es.EGAIS_QUANT = :QUANT+new.quant where es.producer_id = :PRODUCER_ID and es.alccode = :ALCCODE;

      end

     --перемещение из торгового зала на склад
      if (:DOC_TYPE in (45)) then
      begin

        select first 1 QUANTITY from EGAIS_SKLAD es where es.PRODUCER_CLIENTREGID = :PRODUCER_ID and es.ALCCODE = :ALCCODE into :QUANT;

        if (QUANT is null) then
        begin
            insert into EGAIS_SKLAD (QUANTITY,FULLNAME,ALCCODE,PRODUCER_CLIENTREGID,PRODUCTVCODE)
                values (new.quant,:SNAME,:ALCCODE,:PRODUCER_ID,:PRODUCTVCODE);
        end
        else
          update EGAIS_SKLAD es set es.QUANTITY = :QUANT+new.quant where es.PRODUCER_CLIENTREGID = :PRODUCER_ID and es.ALCCODE = :ALCCODE;

      select first 1 EGAIS_QUANT from EGAIS_SHOP es where es.producer_id = :PRODUCER_ID and es.alccode = :ALCCODE into :QUANT;

      if (QUANT is null) then
      begin
            insert into EGAIS_SHOP (PART_ID,SNAME,EGAIS_QUANT,ALCCODE,UNITTYPE,ALCVOLUME,PRODUCTVCODE,PRODUCER_ID)
                values (new.part_id, :SNAME,  -new.quant,:ALCCODE,:UNITTYPE,:ALCVOLUME,:PRODUCTVCODE,:PRODUCER_ID);
      end
      else
          update EGAIS_SHOP es set es.EGAIS_QUANT = :QUANT-new.quant where es.producer_id = :PRODUCER_ID and es.alccode = :ALCCODE;
      end
  end

end
^

SET TERM ; ^


изменить триггер DOC_DETAIL_ACTIVE_BI

в той части триггера, где берутся данные из таблицы parts, добавить чтобы заполнялось поле EGAIS_PRODUCER_ID

Инструкции по пользованию

Инструкции по пользованию