<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.standart-n.ru/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.standart-n.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ilsiya</id>
		<title>wiki.standart-n.ru - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.standart-n.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ilsiya"/>
		<link rel="alternate" type="text/html" href="http://wiki.standart-n.ru/index.php/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Ilsiya"/>
		<updated>2026-04-30T21:42:24Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.23.3</generator>

	<entry>
		<id>http://wiki.standart-n.ru/index.php/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%95%D0%93%D0%90%D0%98%D0%A1</id>
		<title>Установка ЕГАИС</title>
		<link rel="alternate" type="text/html" href="http://wiki.standart-n.ru/index.php/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%95%D0%93%D0%90%D0%98%D0%A1"/>
				<updated>2017-02-09T06:20:30Z</updated>
		
		<summary type="html">&lt;p&gt;Ilsiya: /* Склейка партий */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Настройка jacarta-ключа=&lt;br /&gt;
Предварительно нужно установить Единый клиент джакарты&lt;br /&gt;
[[Медиа:Получение_КЭП_для_ЕГАИС.docx]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Установка Этап 1 (выполняется для '''ВСЕХ''' клиентов)=&lt;br /&gt;
&lt;br /&gt;
==Установить процедуру PR_ALTER_VIEW==&lt;br /&gt;
[[Изменения представления| '''PR_ALTER_VIEW''']]&lt;br /&gt;
&lt;br /&gt;
==Заменить версию Менеджера==&lt;br /&gt;
Для скриптов ниже актуальная версия Менеджера ManagerXP2_272_62(20160321_155233)&lt;br /&gt;
кассира zkassa 2.2.1.22.exe&lt;br /&gt;
&lt;br /&gt;
==Выполнить скрипт==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SET TERM ^ ;&lt;br /&gt;
/*создание доменов если их нет*/&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DM_ID_NULL','','BIGINT','DOMAIN');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DM_ID','','BIGINT NOT NULL','DOMAIN');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DM_STATUS','','INTEGER','DOMAIN');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DM_DATETIME','','TIMESTAMP','DOMAIN');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DM_TEXT1024','','VARCHAR(1024) CHARACTER SET WIN1251 COLLATE WIN1251','DOMAIN');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DM_DOUBLE','','DOUBLE PRECISION','DOMAIN');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DM_ID_NULL','','BIGINT','DOMAIN');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DM_ID_NULL','','BIGINT','DOMAIN');^&lt;br /&gt;
&lt;br /&gt;
/*не относится к ЕГАИС*/&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL','FIO_ID','DM_ID_NULL','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL','FIO_BOLNOY_ID','DM_ID_NULL','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL','TYPE_LGOTA','DM_ID_NULL','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL','RECEPT','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','SUM_NDSR','DM_DOUBLE','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL','SUM_NDSR','DM_DOUBLE','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOCS','FIO_ID','DM_ID_NULL','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOCS','SUM_NDSR','DM_DOUBLE','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL','SUM_NDSR','DM_DOUBLE','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','MOTHERPART_UUID','DM_UUID_NULL','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','MOTHERPART_UUID','DM_UUID_NULL','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VALS','D$UUID','DM_UUID_NULL','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VALS','L_ID','DM_ID_NULL','TABLE');^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('AGENTS','EGAIS_ID','DM_UUID_NULL','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOCS','EGAIS_NUM','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOCS','EGAIS_ID','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOCS','EGAIS_UNITTYPE','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOCS','EGAIS_STATUS','DM_STATUS','TABLE');^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','EGAIS_ID','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','EGAIS_REGID','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','EGAIS_BREGID','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','EGAIS_ALCCODE','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','EGAIS_QUANT','DM_DOUBLE','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','CAPACITY','DM_DOUBLE','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','ALC_VOLUME','DM_DOUBLE','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','EGAIS_PRODUCER_ID','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','EGAIS_BARCODE','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','EGAIS_TYPE','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','PRODUCER_INN','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','PRODUCER_KPP','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','BOTTLINGDATE','DM_DATETIME','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','EGAIS_PRODUCT_VCODE','DM_TEXT','TABLE');^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','EGAIS_ID','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','EGAIS_BREGID','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','EGAIS_REGID','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','EGAIS_ALCCODE','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','EGAIS_PRODUCT_VCODE','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','CAPACITY','DM_DOUBLE','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','ALC_VOLUME','DM_DOUBLE','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','EGAIS_PRODUCER_ID','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','EGAIS_QUANT','DM_DOUBLE','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','EGAIS_BARCODE','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','EGAIS_TYPE','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','PRODUCER_INN','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','PRODUCER_KPP','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','BOTTLINGDATE','DM_DATETIME','TABLE');^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('','','GEN_EGAIS_REQUESTS_ID','generator');^&lt;br /&gt;
&lt;br /&gt;
/*таблица EGAIS_PRODUCERS*/&lt;br /&gt;
EXECUTE BLOCK AS BEGIN&lt;br /&gt;
if (not exists(select 1 from rdb$relations where rdb$relation_name = 'EGAIS_PRODUCERS')) then&lt;br /&gt;
execute statement 'CREATE TABLE EGAIS_PRODUCERS(ID DM_ID NOT NULL);';&lt;br /&gt;
END^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_PRODUCERS','INN','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_PRODUCERS','KPP','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_PRODUCERS','FULLNAME','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_PRODUCERS','SHORTNAME','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_PRODUCERS','COUNTRY','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_PRODUCERS','POSTINDEX','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_PRODUCERS','REGIONCODE','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_PRODUCERS','DESCRIPTION','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_PRODUCERS','CITY','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_PRODUCERS','STREET','DM_TEXT','TABLE');^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_PRODUCERS','ID','EGAIS_PRODUCERS_IDX1','INDEX');^&lt;br /&gt;
&lt;br /&gt;
/* таблица EGAIS_REQUESTS*/&lt;br /&gt;
EXECUTE BLOCK AS BEGIN&lt;br /&gt;
if (not exists(select 1 from rdb$relations where rdb$relation_name = 'EGAIS_REQUESTS')) then&lt;br /&gt;
execute statement 'CREATE TABLE EGAIS_REQUESTS (ID  DM_ID NOT NULL);';&lt;br /&gt;
END^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','REPLY_ID','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','REPLY_URL','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','QUERY_TYPE','DM_STATUS','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','QUERY_URL','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','QUERY_DATA','DM_BLOBBIN','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','REPLY_DATA','DM_BLOBBIN','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','STATUS','DM_STATUS','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','INSERT_DATE','DM_DATETIME','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','REPLY_DATE','DM_DATETIME','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','EGAIS_ID','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','QUERY_OUT','DM_TEXT1024','TABLE');^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','ID','','PRIMARY KEY');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','REPLY_ID','EGAIS_REQUESTS_IDX1','index');^&lt;br /&gt;
&lt;br /&gt;
/* Trigger: EGAIS_REQUESTS_BI */&lt;br /&gt;
CREATE OR ALTER TRIGGER EGAIS_REQUESTS_BI FOR EGAIS_REQUESTS&lt;br /&gt;
ACTIVE BEFORE INSERT POSITION 0&lt;br /&gt;
as&lt;br /&gt;
begin&lt;br /&gt;
  if (new.id is null) then&lt;br /&gt;
    new.id = gen_id(gen_egais_REQUESTS_id,1);&lt;br /&gt;
  if (new.insert_date is null) then&lt;br /&gt;
    new.insert_date = 'now';&lt;br /&gt;
end;^&lt;br /&gt;
&lt;br /&gt;
/* Trigger: EGAIS_REQUESTS_BU0 */&lt;br /&gt;
CREATE OR ALTER TRIGGER EGAIS_REQUESTS_BU0 FOR EGAIS_REQUESTS&lt;br /&gt;
ACTIVE BEFORE UPDATE POSITION 0&lt;br /&gt;
AS&lt;br /&gt;
begin&lt;br /&gt;
  if (new.reply_url &amp;lt;&amp;gt; '') then&lt;br /&gt;
    new.reply_date = 'now';&lt;br /&gt;
end;^&lt;br /&gt;
&lt;br /&gt;
create or alter procedure PR_NEW_PART (&lt;br /&gt;
    DOC_ID type of DM_ID,&lt;br /&gt;
    PARENT_ID type of DM_ID,&lt;br /&gt;
    WARE_ID type of DM_UUID_NULL,&lt;br /&gt;
    PRICE type of DM_DOUBLE,&lt;br /&gt;
    PRICE_O type of DM_DOUBLE,&lt;br /&gt;
    PRICE_Z type of DM_DOUBLE,&lt;br /&gt;
    PRICE_R type of DM_DOUBLE,&lt;br /&gt;
    QUANT type of DM_DOUBLE,&lt;br /&gt;
    BARCODE type of DM_TEXT,&lt;br /&gt;
    BARCODE1 type of DM_TEXT,&lt;br /&gt;
    DEP type of DM_ID,&lt;br /&gt;
    GODENDO type of DM_DATETIME,&lt;br /&gt;
    SERIA type of DM_TEXT,&lt;br /&gt;
    NDS type of DM_DOUBLE,&lt;br /&gt;
    SUM_NDSO type of DM_DOUBLE,&lt;br /&gt;
    SERT type of DM_TEXT,&lt;br /&gt;
    DATESERT type of DM_DATETIME,&lt;br /&gt;
    KEMVSERT type of DM_TEXT,&lt;br /&gt;
    SDSERT type of DM_DATETIME,&lt;br /&gt;
    REGN type of DM_TEXT,&lt;br /&gt;
    NGTD type of DM_TEXT,&lt;br /&gt;
    EDIZM type of DM_TEXT,&lt;br /&gt;
    NAC type of DM_DOUBLE,&lt;br /&gt;
    MOTHERPART_ID type of DM_ID,&lt;br /&gt;
    PART_TYPE DM_STATUS,&lt;br /&gt;
    BASE_AGENT_ID DM_ID,&lt;br /&gt;
    SKLAD_ID type of DM_TEXT,&lt;br /&gt;
    CONTRACT_ID DM_ID,&lt;br /&gt;
    DOC_DETAIL_ACTIVE_ID DM_ID,&lt;br /&gt;
    GROUP_ID DM_ID,&lt;br /&gt;
    MOTHERPART_UUID DM_UUID_NULL = 0,&lt;br /&gt;
    EGAIS_ID DM_TEXT = null,&lt;br /&gt;
    EGAIS_REGID DM_TEXT1024 = null,&lt;br /&gt;
    EGAIS_BREGID DM_TEXT1024 = null,&lt;br /&gt;
    EGAIS_ALCCODE DM_TEXT1024 = null,&lt;br /&gt;
    EGAIS_QUANT DM_DOUBLE = 0,&lt;br /&gt;
    CAPACITY DM_DOUBLE = 0,&lt;br /&gt;
    ALC_VOLUME DM_DOUBLE = 0,&lt;br /&gt;
    EGAIS_PRODUCER_ID DM_TEXT1024 = null,&lt;br /&gt;
    EGAIS_BARCODE DM_TEXT1024 = null,&lt;br /&gt;
    EGAIS_TYPE DM_TEXT = null,&lt;br /&gt;
    PRODUCER_INN DM_TEXT1024 = null,&lt;br /&gt;
    PRODUCER_KPP DM_TEXT1024 = null,&lt;br /&gt;
    BOTTLINGDATE DM_DATETIME = null,&lt;br /&gt;
    EGAIS_PRODUCT_VCODE DM_TEXT = null)&lt;br /&gt;
returns (&lt;br /&gt;
    P_ID type of DM_ID)&lt;br /&gt;
as&lt;br /&gt;
begin&lt;br /&gt;
  p_id=gen_id(gen_parts_id,1);&lt;br /&gt;
  insert into parts&lt;br /&gt;
    (ID,parent_id,doc_id,WARE_ID,PRICE,PRICE_O,PRICE_Z,PRICE_R,QUANT,BARCODE,BARCODE1,DEP,/*KRITK,*/GODENDO,SERIA,NDS,SUM_NDSO,SERT,DATESERT,KEMVSERT,SDSERT,REGN,NGTD,&lt;br /&gt;
    EDIZM,NAC,motherpart_id,sklad_id,part_type,BASE_AGENT_ID,contract_id, doc_detail_active_id, group_id, motherpart_uuid,&lt;br /&gt;
    EGAIS_ID, EGAIS_BREGID, EGAIS_REGID, EGAIS_ALCCODE, EGAIS_QUANT, CAPACITY, ALC_VOLUME, EGAIS_PRODUCER_ID, EGAIS_BARCODE,&lt;br /&gt;
    EGAIS_TYPE, PRODUCER_INN, PRODUCER_KPP, BOTTLINGDATE, EGAIS_PRODUCT_VCODE)&lt;br /&gt;
  values&lt;br /&gt;
    (:p_id,:parent_id,:doc_id,:WARE_ID,:PRICE,:PRICE_O,:PRICE_Z,:PRICE_R,:QUANT,:BARCODE,:BARCODE1,:DEP,/*:KRITK,*/:GODENDO,:SERIA,:NDS,:SUM_NDSO,:SERT,:DATESERT,:KEMVSERT,&lt;br /&gt;
    :SDSERT,:REGN,:NGTD,:EDIZM,:NAC,:motherpart_id,:sklad_id,:part_type,:BASE_AGENT_ID,:contract_id,:doc_detail_active_id, :group_id, :motherpart_uuid,&lt;br /&gt;
    :EGAIS_ID, :EGAIS_BREGID, :EGAIS_REGID, :EGAIS_ALCCODE, :EGAIS_QUANT, :CAPACITY, :ALC_VOLUME, :EGAIS_PRODUCER_ID, :EGAIS_BARCODE,&lt;br /&gt;
    :EGAIS_TYPE, :PRODUCER_INN, :PRODUCER_KPP, :BOTTLINGDATE, :EGAIS_PRODUCT_VCODE);&lt;br /&gt;
  suspend;&lt;br /&gt;
end;^&lt;br /&gt;
&lt;br /&gt;
GRANT INSERT ON PARTS TO PROCEDURE PR_NEW_PART;^&lt;br /&gt;
&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_NEW_PART TO PROCEDURE PR_DOC_PRIHOD_COMMIT_RECURSE;^&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_NEW_PART TO &amp;quot;PUBLIC&amp;quot;;^&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_NEW_PART TO STANDART;^&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_NEW_PART TO SYSDBA;^&lt;br /&gt;
&lt;br /&gt;
create or alter procedure PR_GET_EGAIS_STATUS (&lt;br /&gt;
    ID DM_STATUS)&lt;br /&gt;
returns (&lt;br /&gt;
    OUT_TEXT DM_TEXT1024)&lt;br /&gt;
as&lt;br /&gt;
begin&lt;br /&gt;
  if ( (id is null) or (id = 0) )  then out_text = 'Не установлен';&lt;br /&gt;
  else if (id = 1) then out_text = 'Акт принятия принят';&lt;br /&gt;
  else if (id = 2) then out_text = 'Акт принятия отклонен';&lt;br /&gt;
  else if (id = 3) then out_text = 'Акт отказа принят';&lt;br /&gt;
  else if (id = 4) then out_text = 'Акт отказа отклонен';&lt;br /&gt;
  else if (id = 5) then out_text = 'Акт расхождений принят';&lt;br /&gt;
  else if (id = 6) then out_text = 'Акт расхождений отклонен';&lt;br /&gt;
  else out_text = 'Неизвестный статус';&lt;br /&gt;
&lt;br /&gt;
  suspend;&lt;br /&gt;
end;^&lt;br /&gt;
&lt;br /&gt;
create or alter procedure PR_INSTALL_COMMIT_RECURSE&lt;br /&gt;
as&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
  if ((select&lt;br /&gt;
    count(1)&lt;br /&gt;
    from rdb$procedure_parameters pp&lt;br /&gt;
    where 1=1&lt;br /&gt;
    and pp.rdb$procedure_name='PR_DOC_DETAIL_INSERT'&lt;br /&gt;
    and pp.rdb$parameter_name='SUM_NDSR')=0 ) then&lt;br /&gt;
  EXECUTE STATEMENT ('&lt;br /&gt;
   create or alter procedure PR_DOC_PRIHOD_COMMIT_RECURSE (&lt;br /&gt;
        DOC_ID type of DM_ID,&lt;br /&gt;
        DOC_PARENT_ID type of DM_ID,&lt;br /&gt;
        PART_PARENT_ID type of DM_ID,&lt;br /&gt;
        DOC_COMMITDATE type of DM_DATE,&lt;br /&gt;
        CONTRACT_ID DM_ID)&lt;br /&gt;
    as&lt;br /&gt;
    declare variable PART_ID type of DM_ID;&lt;br /&gt;
    declare variable WARE_ID type of DM_UUID_NULL;&lt;br /&gt;
    declare variable SNAME type of DM_TEXT;&lt;br /&gt;
    declare variable SIZG type of DM_TEXT;&lt;br /&gt;
    declare variable SCOUNTRY type of DM_TEXT;&lt;br /&gt;
    declare variable ORIG_CODE type of DM_TEXT;&lt;br /&gt;
    declare variable SORIG_NAME type of DM_TEXT;&lt;br /&gt;
    declare variable SORIG_IZG type of DM_TEXT;&lt;br /&gt;
    declare variable SORIG_COUNTRY type of DM_TEXT;&lt;br /&gt;
    declare variable BARCODE type of DM_TEXT;&lt;br /&gt;
    declare variable Z_ID type of DM_ID;&lt;br /&gt;
    declare variable SKLAD_ID DM_TEXT;&lt;br /&gt;
    declare variable PRICE type of DM_DOUBLE;&lt;br /&gt;
    declare variable PRICE_O type of DM_DOUBLE;&lt;br /&gt;
    declare variable PRICE_Z type of DM_DOUBLE;&lt;br /&gt;
    declare variable PRICE_R type of DM_DOUBLE;&lt;br /&gt;
    declare variable QUANT type of DM_DOUBLE;&lt;br /&gt;
    declare variable BARCODE1 type of DM_TEXT;&lt;br /&gt;
    declare variable DEP type of DM_ID;&lt;br /&gt;
    declare variable KRITK type of DM_DOUBLE;&lt;br /&gt;
    declare variable GODENDO type of DM_DATETIME;&lt;br /&gt;
    declare variable SERIA type of DM_TEXT;&lt;br /&gt;
    declare variable NDS type of DM_DOUBLE;&lt;br /&gt;
    declare variable SUM_NDSO type of DM_DOUBLE;&lt;br /&gt;
    declare variable SERT type of DM_TEXT;&lt;br /&gt;
    declare variable DATESERT type of DM_DATETIME;&lt;br /&gt;
    declare variable KEMVSERT type of DM_TEXT;&lt;br /&gt;
    declare variable SDSERT type of DM_DATETIME;&lt;br /&gt;
    declare variable REGN type of DM_TEXT;&lt;br /&gt;
    declare variable NGTD type of DM_TEXT;&lt;br /&gt;
    declare variable EDIZM type of DM_TEXT;&lt;br /&gt;
    declare variable PARENT_ID type of DM_ID;&lt;br /&gt;
    declare variable SUMMA type of DM_DOUBLE;&lt;br /&gt;
    declare variable SUMMA_O type of DM_DOUBLE;&lt;br /&gt;
    declare variable DISCOUNT type of DM_DOUBLE;&lt;br /&gt;
    declare variable ACTIVE_ID type of DM_ID;&lt;br /&gt;
    declare variable NAC type of DM_DOUBLE;&lt;br /&gt;
    declare variable DOC_DETAIL_ID type of DM_ID;&lt;br /&gt;
    declare variable MOTHERPART_ID type of DM_ID;&lt;br /&gt;
    declare variable BCODE_IZG type of DM_TEXT;&lt;br /&gt;
    declare variable HUMAN_QUANT type of DM_TEXT;&lt;br /&gt;
    declare variable SUM_DSC type of DM_DOUBLE;&lt;br /&gt;
    declare variable DCARD type of DM_TEXT;&lt;br /&gt;
    declare variable PART_TYPE DM_STATUS;&lt;br /&gt;
    declare variable BASE_AGENT_ID DM_ID;&lt;br /&gt;
    declare variable GROUP_ID DM_ID;&lt;br /&gt;
    declare variable MAKE_ID DM_ID_NULL;&lt;br /&gt;
    declare variable MNN DM_TEXT;&lt;br /&gt;
    declare variable MOTHERPART_UUID DM_UUID_NULL;&lt;br /&gt;
    declare variable EGAIS_ID DM_TEXT;&lt;br /&gt;
    declare variable EGAIS_BREGID DM_TEXT1024;&lt;br /&gt;
    declare variable EGAIS_REGID DM_TEXT1024;&lt;br /&gt;
    declare variable EGAIS_ALCCODE DM_TEXT1024;&lt;br /&gt;
    declare variable CAPACITY DM_DOUBLE;&lt;br /&gt;
    declare variable ALC_VOLUME DM_DOUBLE;&lt;br /&gt;
    declare variable EGAIS_PRODUCER_ID DM_TEXT1024;&lt;br /&gt;
    declare variable EGAIS_QUANT DM_DOUBLE;&lt;br /&gt;
    declare variable EGAIS_BARCODE DM_TEXT1024;&lt;br /&gt;
    declare variable EGAIS_TYPE DM_TEXT;&lt;br /&gt;
    declare variable PRODUCER_INN DM_TEXT1024;&lt;br /&gt;
    declare variable PRODUCER_KPP DM_TEXT1024;&lt;br /&gt;
    declare variable BOTTLINGDATE DM_DATETIME;&lt;br /&gt;
    declare variable EGAIS_PRODUCT_VCODE DM_TEXT;&lt;br /&gt;
    begin&lt;br /&gt;
    --whithout SUM_NDSR&lt;br /&gt;
    for&lt;br /&gt;
    select&lt;br /&gt;
    /*ware_id*/  sname,sizg,scountry,orig_code,sorig_name,sorig_izg,sorig_country,barcode,z_id,sklad_id,&lt;br /&gt;
    /*part_id*/  PRICE,PRICE_O,PRICE_Z,PRICE_R,QUANT,BARCODE1,/*KRITK,*/GODENDO,SERIA,NDS,SUM_NDSO,SERT,DATESERT,KEMVSERT,SDSERT,REGN,NGTD,EDIZM,&lt;br /&gt;
    PARENT_ID,DISCOUNT,SUMMA,summa_o, id, part_id, nac, doc_detail_id, motherpart_id, dep, bcode_izg, human_quant, SUM_DSC, dcard,&lt;br /&gt;
    part_type, BASE_AGENT_ID, group_id, make_id, mnn, motherpart_uuid,&lt;br /&gt;
    EGAIS_ID, EGAIS_BREGID, EGAIS_REGID, EGAIS_ALCCODE, CAPACITY, ALC_VOLUME, EGAIS_PRODUCER_ID, EGAIS_QUANT, EGAIS_BARCODE,&lt;br /&gt;
    EGAIS_TYPE, PRODUCER_INN, PRODUCER_KPP, BOTTLINGDATE, EGAIS_PRODUCT_VCODE&lt;br /&gt;
    from doc_detail_active where doc_id=:doc_id and part_parent_id=:doc_parent_id&lt;br /&gt;
    into&lt;br /&gt;
    :sname,:sizg,:scountry,:orig_code,:sorig_name,:sorig_izg,:sorig_country,:barcode,:z_id,:sklad_id,&lt;br /&gt;
    :PRICE,:PRICE_O,:PRICE_Z,:PRICE_R,:QUANT,:BARCODE1,/*:KRITK,*/:GODENDO,:SERIA,:NDS,:SUM_NDSO,:SERT,:DATESERT,:KEMVSERT,:SDSERT,:REGN,:NGTD,:EDIZM,&lt;br /&gt;
    :PARENT_ID,:DISCOUNT,:SUMMA,:summa_o, :active_id, :part_id, :nac, :doc_detail_id, :motherpart_id, :dep, :bcode_izg, :human_quant, :SUM_DSC, :dcard,&lt;br /&gt;
    :part_type, :BASE_AGENT_ID, :group_id,:make_id, :mnn, :motherpart_uuid,&lt;br /&gt;
    :EGAIS_ID, :EGAIS_BREGID, :EGAIS_REGID, :EGAIS_ALCCODE, :CAPACITY, :ALC_VOLUME, :EGAIS_PRODUCER_ID, :EGAIS_QUANT, :EGAIS_BARCODE,&lt;br /&gt;
    :EGAIS_TYPE, :PRODUCER_INN, :PRODUCER_KPP, :BOTTLINGDATE, :EGAIS_PRODUCT_VCODE&lt;br /&gt;
    do&lt;br /&gt;
    begin&lt;br /&gt;
    --    if ((price&amp;lt;0.001) or (price is null)) then exception EX_PRICE;&lt;br /&gt;
    if ((price&amp;lt;0) or (price is null)) then exception EX_PRICE;&lt;br /&gt;
    if (/*(price_o&amp;lt;0.001) or */(price_o is null)) then exception EX_PRICE_O;&lt;br /&gt;
    if (/*(quant&amp;lt;0.00001) or */(quant is null)) then exception EX_QUANT;&lt;br /&gt;
    if (/*(summa&amp;lt;0.00001) or */(summa is null)) then exception EX_SUMMA;&lt;br /&gt;
    if (/*(summa_o&amp;lt;0.00001) or */(summa_o is null)) then exception EX_SUMMA_O;&lt;br /&gt;
    --    if ((NDS&amp;lt;0.00001) or (NDS is null)) then exception EX_NDS;&lt;br /&gt;
    if (/*(SUM_NDSO&amp;lt;0) or */(SUM_NDSO is null)) then exception EX_SUM_NDSO;&lt;br /&gt;
    select w_id from pr_get_ware(:sname,:sizg,:scountry,:orig_code,:sorig_name,:sorig_izg,:sorig_country,:bcode_izg,:z_id,:sklad_id,:part_type,:mnn)&lt;br /&gt;
    into :ware_id;&lt;br /&gt;
    if ((part_id=0) or (part_id is NULL)) then&lt;br /&gt;
    select p_id from pr_new_part(:DOC_ID,:part_parent_id,:WARE_ID,:PRICE,:PRICE_O,:PRICE_Z,:PRICE_R,:QUANT,:BARCODE,:BARCODE1,:DEP,/*:KRITK,*/:GODENDO,:SERIA,:NDS,&lt;br /&gt;
    :SUM_NDSO,:SERT,:DATESERT,:KEMVSERT,:SDSERT,:REGN,:NGTD,:EDIZM,:NAC,:motherpart_id, :part_type,:BASE_AGENT_ID, :sklad_id, :contract_id, :active_id, :group_id,&lt;br /&gt;
    :motherpart_uuid, :EGAIS_ID, :EGAIS_REGID, :EGAIS_BREGID, :EGAIS_ALCCODE, :EGAIS_QUANT, :CAPACITY, :ALC_VOLUME, :EGAIS_PRODUCER_ID, :EGAIS_BARCODE,&lt;br /&gt;
    :EGAIS_TYPE, :PRODUCER_INN, :PRODUCER_KPP, :BOTTLINGDATE, :EGAIS_PRODUCT_VCODE) into :part_id;&lt;br /&gt;
    execute procedure PR_DOC_DETAIL_INSERT(:doc_detail_id,:DOC_ID,:PART_ID,:QUANT,:DISCOUNT,:SUMMA,:summa_o,:price,:sum_ndso,:nac,:doc_commitdate,:human_quant,:SUM_DSC,:dcard,:active_id,:part_type,:make_id);&lt;br /&gt;
    -- обновляем членство в группах&lt;br /&gt;
    execute procedure PR_UPDGROUPDETAIL_ACTIVE2PARTS(:active_id,:part_id);&lt;br /&gt;
    -- присваиваем ценам партии&lt;br /&gt;
    update prices set part_id=:part_id where dda_id=:active_id;&lt;br /&gt;
    update or insert into prices (part_id,price_type,currency_id, price,dda_id) values (:part_id,0,0,:price,:active_id) matching (PART_ID,PRICE_TYPE);&lt;br /&gt;
    execute procedure PR_DOC_PRIHOD_COMMIT_RECURSE(:doc_id,:active_id,:part_id,:doc_commitdate,:contract_id);&lt;br /&gt;
    end&lt;br /&gt;
    end;&lt;br /&gt;
&lt;br /&gt;
  ');&lt;br /&gt;
&lt;br /&gt;
else&lt;br /&gt;
&lt;br /&gt;
  EXECUTE STATEMENT ('&lt;br /&gt;
    create or alter procedure PR_DOC_PRIHOD_COMMIT_RECURSE (&lt;br /&gt;
        DOC_ID type of DM_ID,&lt;br /&gt;
        DOC_PARENT_ID type of DM_ID,&lt;br /&gt;
        PART_PARENT_ID type of DM_ID,&lt;br /&gt;
        DOC_COMMITDATE type of DM_DATE,&lt;br /&gt;
        CONTRACT_ID DM_ID)&lt;br /&gt;
    as&lt;br /&gt;
    declare variable PART_ID type of DM_ID;&lt;br /&gt;
    declare variable WARE_ID type of DM_UUID_NULL;&lt;br /&gt;
    declare variable SNAME type of DM_TEXT;&lt;br /&gt;
    declare variable SIZG type of DM_TEXT;&lt;br /&gt;
    declare variable SCOUNTRY type of DM_TEXT;&lt;br /&gt;
    declare variable ORIG_CODE type of DM_TEXT;&lt;br /&gt;
    declare variable SORIG_NAME type of DM_TEXT;&lt;br /&gt;
    declare variable SORIG_IZG type of DM_TEXT;&lt;br /&gt;
    declare variable SORIG_COUNTRY type of DM_TEXT;&lt;br /&gt;
    declare variable BARCODE type of DM_TEXT;&lt;br /&gt;
    declare variable Z_ID type of DM_ID;&lt;br /&gt;
    declare variable SKLAD_ID DM_TEXT;&lt;br /&gt;
    declare variable PRICE type of DM_DOUBLE;&lt;br /&gt;
    declare variable PRICE_O type of DM_DOUBLE;&lt;br /&gt;
    declare variable PRICE_Z type of DM_DOUBLE;&lt;br /&gt;
    declare variable PRICE_R type of DM_DOUBLE;&lt;br /&gt;
    declare variable QUANT type of DM_DOUBLE;&lt;br /&gt;
    declare variable BARCODE1 type of DM_TEXT;&lt;br /&gt;
    declare variable DEP type of DM_ID;&lt;br /&gt;
    declare variable KRITK type of DM_DOUBLE;&lt;br /&gt;
    declare variable GODENDO type of DM_DATETIME;&lt;br /&gt;
    declare variable SERIA type of DM_TEXT;&lt;br /&gt;
    declare variable NDS type of DM_DOUBLE;&lt;br /&gt;
    declare variable SUM_NDSO type of DM_DOUBLE;&lt;br /&gt;
    declare variable SUM_NDSR DM_DOUBLE;&lt;br /&gt;
    declare variable SERT type of DM_TEXT;&lt;br /&gt;
    declare variable DATESERT type of DM_DATETIME;&lt;br /&gt;
    declare variable KEMVSERT type of DM_TEXT;&lt;br /&gt;
    declare variable SDSERT type of DM_DATETIME;&lt;br /&gt;
    declare variable REGN type of DM_TEXT;&lt;br /&gt;
    declare variable NGTD type of DM_TEXT;&lt;br /&gt;
    declare variable EDIZM type of DM_TEXT;&lt;br /&gt;
    declare variable PARENT_ID type of DM_ID;&lt;br /&gt;
    declare variable SUMMA type of DM_DOUBLE;&lt;br /&gt;
    declare variable SUMMA_O type of DM_DOUBLE;&lt;br /&gt;
    declare variable DISCOUNT type of DM_DOUBLE;&lt;br /&gt;
    declare variable ACTIVE_ID type of DM_ID;&lt;br /&gt;
    declare variable NAC type of DM_DOUBLE;&lt;br /&gt;
    declare variable DOC_DETAIL_ID type of DM_ID;&lt;br /&gt;
    declare variable MOTHERPART_ID type of DM_ID;&lt;br /&gt;
    declare variable BCODE_IZG type of DM_TEXT;&lt;br /&gt;
    declare variable HUMAN_QUANT type of DM_TEXT;&lt;br /&gt;
    declare variable SUM_DSC type of DM_DOUBLE;&lt;br /&gt;
    declare variable DCARD type of DM_TEXT;&lt;br /&gt;
    declare variable PART_TYPE DM_STATUS;&lt;br /&gt;
    declare variable BASE_AGENT_ID DM_ID;&lt;br /&gt;
    declare variable GROUP_ID DM_ID;&lt;br /&gt;
    declare variable MAKE_ID DM_ID_NULL;&lt;br /&gt;
    declare variable MNN DM_TEXT;&lt;br /&gt;
    declare variable MOTHERPART_UUID DM_UUID_NULL;&lt;br /&gt;
    declare variable EGAIS_ID DM_TEXT;&lt;br /&gt;
    declare variable EGAIS_BREGID DM_TEXT1024;&lt;br /&gt;
    declare variable EGAIS_REGID DM_TEXT1024;&lt;br /&gt;
    declare variable EGAIS_ALCCODE DM_TEXT1024;&lt;br /&gt;
    declare variable CAPACITY DM_DOUBLE;&lt;br /&gt;
    declare variable ALC_VOLUME DM_DOUBLE;&lt;br /&gt;
    declare variable EGAIS_PRODUCER_ID DM_TEXT1024;&lt;br /&gt;
    declare variable EGAIS_QUANT DM_DOUBLE;&lt;br /&gt;
    declare variable EGAIS_BARCODE DM_TEXT1024;&lt;br /&gt;
    declare variable EGAIS_TYPE DM_TEXT;&lt;br /&gt;
    declare variable PRODUCER_INN DM_TEXT1024;&lt;br /&gt;
    declare variable PRODUCER_KPP DM_TEXT1024;&lt;br /&gt;
    declare variable BOTTLINGDATE DM_DATETIME;&lt;br /&gt;
    declare variable EGAIS_PRODUCT_VCODE DM_TEXT;&lt;br /&gt;
    begin&lt;br /&gt;
    --whith SUM_NDSR&lt;br /&gt;
    for&lt;br /&gt;
    select&lt;br /&gt;
    /*ware_id*/  sname,sizg,scountry,orig_code,sorig_name,sorig_izg,sorig_country,barcode,z_id,sklad_id,&lt;br /&gt;
    /*part_id*/  PRICE,PRICE_O,PRICE_Z,PRICE_R,QUANT,BARCODE1,/*KRITK,*/GODENDO,SERIA,NDS,SUM_NDSO,SUM_NDSR,SERT,DATESERT,KEMVSERT,SDSERT,REGN,NGTD,EDIZM,&lt;br /&gt;
    PARENT_ID,DISCOUNT,SUMMA,summa_o, id, part_id, nac, doc_detail_id, motherpart_id, dep, bcode_izg, human_quant, SUM_DSC, dcard,&lt;br /&gt;
    part_type, BASE_AGENT_ID, group_id, make_id, mnn, motherpart_uuid,&lt;br /&gt;
    EGAIS_ID, EGAIS_BREGID, EGAIS_REGID, EGAIS_ALCCODE, CAPACITY, ALC_VOLUME, EGAIS_PRODUCER_ID, EGAIS_QUANT, EGAIS_BARCODE,&lt;br /&gt;
    EGAIS_TYPE, PRODUCER_INN, PRODUCER_KPP, BOTTLINGDATE, EGAIS_PRODUCT_VCODE&lt;br /&gt;
    from doc_detail_active where doc_id=:doc_id and part_parent_id=:doc_parent_id&lt;br /&gt;
    into&lt;br /&gt;
    :sname,:sizg,:scountry,:orig_code,:sorig_name,:sorig_izg,:sorig_country,:barcode,:z_id,:sklad_id,&lt;br /&gt;
    :PRICE,:PRICE_O,:PRICE_Z,:PRICE_R,:QUANT,:BARCODE1,/*:KRITK,*/:GODENDO,:SERIA,:NDS,:SUM_NDSO,:SUM_NDSR,:SERT,:DATESERT,:KEMVSERT,:SDSERT,:REGN,:NGTD,:EDIZM,&lt;br /&gt;
    :PARENT_ID,:DISCOUNT,:SUMMA,:summa_o, :active_id, :part_id, :nac, :doc_detail_id, :motherpart_id, :dep, :bcode_izg, :human_quant, :SUM_DSC, :dcard,&lt;br /&gt;
    :part_type, :BASE_AGENT_ID, :group_id,:make_id, :mnn, :motherpart_uuid,&lt;br /&gt;
    :EGAIS_ID, :EGAIS_BREGID, :EGAIS_REGID, :EGAIS_ALCCODE, :CAPACITY, :ALC_VOLUME, :EGAIS_PRODUCER_ID, :EGAIS_QUANT, :EGAIS_BARCODE,&lt;br /&gt;
    :EGAIS_TYPE, :PRODUCER_INN, :PRODUCER_KPP, :BOTTLINGDATE, :EGAIS_PRODUCT_VCODE&lt;br /&gt;
    do&lt;br /&gt;
    begin&lt;br /&gt;
    --    if ((price&amp;lt;0.001) or (price is null)) then exception EX_PRICE;&lt;br /&gt;
    if ((price&amp;lt;0) or (price is null)) then exception EX_PRICE;&lt;br /&gt;
    if (/*(price_o&amp;lt;0.001) or */(price_o is null)) then exception EX_PRICE_O;&lt;br /&gt;
    if (/*(quant&amp;lt;0.00001) or */(quant is null)) then exception EX_QUANT;&lt;br /&gt;
    if (/*(summa&amp;lt;0.00001) or */(summa is null)) then exception EX_SUMMA;&lt;br /&gt;
    if (/*(summa_o&amp;lt;0.00001) or */(summa_o is null)) then exception EX_SUMMA_O;&lt;br /&gt;
    --    if ((NDS&amp;lt;0.00001) or (NDS is null)) then exception EX_NDS;&lt;br /&gt;
    if (/*(SUM_NDSO&amp;lt;0) or */(SUM_NDSO is null or SUM_NDSR is null )) then exception EX_SUM_NDSO;&lt;br /&gt;
    select w_id from pr_get_ware(:sname,:sizg,:scountry,:orig_code,:sorig_name,:sorig_izg,:sorig_country,:bcode_izg,:z_id,:sklad_id,:part_type,:mnn)&lt;br /&gt;
    into :ware_id;&lt;br /&gt;
    if ((part_id=0) or (part_id is NULL)) then&lt;br /&gt;
    select p_id from pr_new_part(:DOC_ID,:part_parent_id,:WARE_ID,:PRICE,:PRICE_O,:PRICE_Z,:PRICE_R,:QUANT,:BARCODE,:BARCODE1,:DEP,/*:KRITK,*/:GODENDO,:SERIA,:NDS,&lt;br /&gt;
    :SUM_NDSO,:SERT,:DATESERT,:KEMVSERT,:SDSERT,:REGN,:NGTD,:EDIZM,:NAC,:motherpart_id, :part_type,:BASE_AGENT_ID, :sklad_id, :contract_id, :active_id, :group_id,&lt;br /&gt;
    :motherpart_uuid, :EGAIS_ID, :EGAIS_REGID, :EGAIS_BREGID, :EGAIS_ALCCODE, :EGAIS_QUANT, :CAPACITY, :ALC_VOLUME, :EGAIS_PRODUCER_ID, :EGAIS_BARCODE,&lt;br /&gt;
    :EGAIS_TYPE, :PRODUCER_INN, :PRODUCER_KPP, :BOTTLINGDATE, :EGAIS_PRODUCT_VCODE) into :part_id;&lt;br /&gt;
    execute procedure PR_DOC_DETAIL_INSERT(:doc_detail_id,:DOC_ID,:PART_ID,:QUANT,:DISCOUNT,:SUMMA,:summa_o,:price,:sum_ndso,:sum_ndsr,:nac,:doc_commitdate,:human_quant,:SUM_DSC,:dcard,:active_id,:part_type,:make_id);&lt;br /&gt;
    -- обновляем членство в группах&lt;br /&gt;
    execute procedure PR_UPDGROUPDETAIL_ACTIVE2PARTS(:active_id,:part_id);&lt;br /&gt;
    -- присваиваем ценам партии&lt;br /&gt;
    update prices set part_id=:part_id where dda_id=:active_id;&lt;br /&gt;
    update or insert into prices (part_id,price_type,currency_id, price,dda_id) values (:part_id,0,0,:price,:active_id) matching (PART_ID,PRICE_TYPE);&lt;br /&gt;
    execute procedure PR_DOC_PRIHOD_COMMIT_RECURSE(:doc_id,:active_id,:part_id,:doc_commitdate,:contract_id);&lt;br /&gt;
    end&lt;br /&gt;
    end;&lt;br /&gt;
  ');&lt;br /&gt;
&lt;br /&gt;
end^&lt;br /&gt;
&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_INSTALL_COMMIT_RECURSE TO SYSDBA;^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_INSTALL_COMMIT_RECURSE;^&lt;br /&gt;
&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_GET_EGAIS_STATUS TO SYSDBA;^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','MOTHERPART_UUID','da.motherpart_uuid');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','EGAIS_ID','EGAIS_ID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','EGAIS_BREGID','EGAIS_BREGID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','EGAIS_REGID','EGAIS_REGID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','EGAIS_ALCCODE','EGAIS_ALCCODE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','CAPACITY','CAPACITY');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','ALC_VOLUME','ALC_VOLUME');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','EGAIS_PRODUCER_ID','EGAIS_PRODUCER_ID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','EGAIS_QUANT','EGAIS_QUANT');^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','MOTHERPART_UUID','p.motherpart_uuid');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','EGAIS_ID','p.EGAIS_ID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','EGAIS_BREGID','p.EGAIS_BREGID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','EGAIS_REGID','p.EGAIS_REGID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','EGAIS_ALCCODE','p.EGAIS_ALCCODE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','CAPACITY','p.CAPACITY');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','ALC_VOLUME','p.ALC_VOLUME');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','EGAIS_TTNID','d.EGAIS_ID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','EGAIS_QUANT','p.EGAIS_QUANT');^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_PARTS','EGAIS_ID','p.EGAIS_ID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_PARTS','EGAIS_BREGID','p.EGAIS_BREGID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_PARTS','EGAIS_REGID','p.EGAIS_REGID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_PARTS','EGAIS_ALCCODE','p.EGAIS_ALCCODE');^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOCS','EGAIS_NUM','docs.EGAIS_NUM');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOCS','EGAIS_ID','docs.EGAIS_ID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOCS','EGAIS_UNITTYPE','docs.EGAIS_UNITTYPE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOCS','EGAIS_STATUS','docs.EGAIS_STATUS');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOCS','EGAIS_STATUS_TEXT','(select out_text from PR_GET_EGAIS_STATUS(docs.EGAIS_STATUS))');^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_AGENTS','EGAIS_ID','EGAIS_ID');^&lt;br /&gt;
&lt;br /&gt;
create or alter procedure PR_GET_ADDRESS_ID (&lt;br /&gt;
    COUNTRY_ID DM_ID_NULL,&lt;br /&gt;
    REGION_ID DM_ID_NULL,&lt;br /&gt;
    DESCRIPTION DM_TEXT_BIG)&lt;br /&gt;
returns (&lt;br /&gt;
    ID DM_ID_NULL)&lt;br /&gt;
as&lt;br /&gt;
begin&lt;br /&gt;
  if ((select id from addr_vals where id = :country_id) is null) then&lt;br /&gt;
    insert into addr_vals (id, vtype, svalue) values (:country_id, 0, :country_id);&lt;br /&gt;
  if ((select id from addr_vals where id = :region_id) is null) then&lt;br /&gt;
    insert into addr_vals (id, vtype, svalue) values (:region_id, 1, :region_id);&lt;br /&gt;
&lt;br /&gt;
  select id from addrs where country_id = :country_id and region_id = :region_id and addresstext = :description into :id;&lt;br /&gt;
  if (id is null) then&lt;br /&gt;
    insert into addrs (country_id, region_id, addresstext) values (:country_id, :region_id, :description) returning id into :id;&lt;br /&gt;
&lt;br /&gt;
  suspend;&lt;br /&gt;
end;^&lt;br /&gt;
&lt;br /&gt;
GRANT SELECT,INSERT ON ADDR_VALS TO PROCEDURE PR_GET_ADDRESS_ID;^&lt;br /&gt;
GRANT SELECT,INSERT ON ADDRS TO PROCEDURE PR_GET_ADDRESS_ID;^&lt;br /&gt;
&lt;br /&gt;
EXECUTE BLOCK AS BEGIN&lt;br /&gt;
if (not exists(select 1 from DOC_TYPES where ID = 40)) then&lt;br /&gt;
execute statement '&lt;br /&gt;
INSERT INTO DOC_TYPES (ID, CAPTION, INSERTDT, BASE_TYPE, STATINI, REPORTS, VTYPE)&lt;br /&gt;
               VALUES (40, ''ТТН ЕГАИС'', null, 1, ''[XML]&lt;br /&gt;
enabled=1&lt;br /&gt;
caption=Печать пакета документов прихода&lt;br /&gt;
tmplpath=prihod.xml&lt;br /&gt;
askbefore=1&lt;br /&gt;
&lt;br /&gt;
[freereport]&lt;br /&gt;
enabled=1&lt;br /&gt;
caption=Печать пакета документов прихода&lt;br /&gt;
tmplpath=prihod.cffr3&lt;br /&gt;
&lt;br /&gt;
[dbf]&lt;br /&gt;
inipath=dbf.ini&lt;br /&gt;
&lt;br /&gt;
[CSV]&lt;br /&gt;
inipath=dbf.ini&lt;br /&gt;
quotestrings=1&lt;br /&gt;
separator=#9&lt;br /&gt;
headers=1'', '' [XML]&lt;br /&gt;
enabled=1&lt;br /&gt;
caption=Печать пакета документов прихода&lt;br /&gt;
tmplpath=prihod.xml&lt;br /&gt;
askbefore=1&lt;br /&gt;
&lt;br /&gt;
[freereport]&lt;br /&gt;
enabled=1&lt;br /&gt;
caption=Печать пакета документов прихода&lt;br /&gt;
tmplpath=prihod.cffr&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;''''doc_id=:doc_id:'''';''''doc_detail=:doc_detail:'''''', 1);';&lt;br /&gt;
END^&lt;br /&gt;
&lt;br /&gt;
EXECUTE BLOCK AS BEGIN&lt;br /&gt;
if (not exists(select 1 from GROUPS where ID = -10)) then&lt;br /&gt;
execute statement '&lt;br /&gt;
INSERT INTO GROUPS (ID, PARENT_ID, CAPTION, GROUPTABLE, STATUS, INSERTDT, SYSTEMFLAG, DESCRIPTION, IMAGEINDEX, DATA, COLOR, SORTING, BASE_AGENT_ID)&lt;br /&gt;
            VALUES (-10, -4, ''ЕГАИС оптовики'', ''AGENTS'', 0, null, 1, NULL, -1, NULL, NULL, NULL, 0);&lt;br /&gt;
';&lt;br /&gt;
END^&lt;br /&gt;
&lt;br /&gt;
create or alter procedure PR_EDITCUSTOMDOC (&lt;br /&gt;
    DOC_ID type of DM_ID,&lt;br /&gt;
    SESSION_ID type of DM_ID,&lt;br /&gt;
    RGUID type of DM_RGUID)&lt;br /&gt;
returns (&lt;br /&gt;
    CUR_DOC_ID type of DM_ID)&lt;br /&gt;
as&lt;br /&gt;
declare variable VNUM type of DM_ID_NULL;&lt;br /&gt;
declare variable DOC_TYPE type of DM_ID;&lt;br /&gt;
declare variable DOC_BASE_TYPE type of DM_ID;&lt;br /&gt;
declare variable DOC_STATUS type of DM_STATUS;&lt;br /&gt;
declare variable DOC_AGENT_ID type of DM_ID;&lt;br /&gt;
declare variable DOCNUM type of DM_TEXT;&lt;br /&gt;
declare variable DOC_CAPTION type of DM_TEXT;&lt;br /&gt;
declare variable BASE_AGENT_ID integer;&lt;br /&gt;
declare variable DOCDATE type of DM_DATETIME;&lt;br /&gt;
declare variable EGAIS_NUM DM_TEXT;&lt;br /&gt;
declare variable EGAIS_ID DM_TEXT;&lt;br /&gt;
declare variable EGAIS_UNITTYPE DM_TEXT;&lt;br /&gt;
declare variable EGAIS_STATUS DM_STATUS;&lt;br /&gt;
begin&lt;br /&gt;
  select d.doc_type, d.status, dt.base_type, dt.caption, d.docnum, d.docdate, d.agent_id, d.vnum, d.base_agent_id, EGAIS_NUM, EGAIS_ID, EGAIS_UNITTYPE, EGAIS_STATUS from docs d left join doc_types dt on d.doc_type=dt.id where d.id=:doc_id&lt;br /&gt;
    into :doc_type, :doc_status, :doc_base_type, :doc_caption, :docnum, :docdate, :doc_AGENT_ID,:vnum, :BASE_AGENT_ID, :EGAIS_NUM, :EGAIS_ID, :EGAIS_UNITTYPE, :EGAIS_STATUS;&lt;br /&gt;
&lt;br /&gt;
  if (doc_type is null) then exception EX_CANTFINDDOC_ID;&lt;br /&gt;
  if (doc_status in (0,-2,2)) then exception EX_WRONGDOCSTATUS;&lt;br /&gt;
  if (doc_base_type=3) then exception EX_WRONGDOC_BASE_TYPE;&lt;br /&gt;
--  if (doc_agent_id &amp;lt;= 0) then exception EX_WRONG_AGENT;&lt;br /&gt;
  cur_doc_id=gen_id(gen_docs_id,1);&lt;br /&gt;
  insert into docs (ID,PARENT_ID,DOC_TYPE,STATUS,AGENT_ID,RGUID,AUDIT_ID,DOCNUM,DOCDATE,DELETED_DOC_ID, BASE_AGENT_ID, EGAIS_NUM, EGAIS_ID, EGAIS_UNITTYPE, EGAIS_STATUS)&lt;br /&gt;
    values (:cur_doc_id,0,:DOC_TYPE,0,:doc_AGENT_ID,:RGUID,:session_ID,:DOCNUM,:DOCDATE,:DOC_ID, :BASE_AGENT_ID, :EGAIS_NUM, :EGAIS_ID, :EGAIS_UNITTYPE, :EGAIS_STATUS);&lt;br /&gt;
  -- Обновление номера документа на старое значение&lt;br /&gt;
  UPDATE docs set vnum = :vnum, caption=:doc_caption || ' №' || :vnum  where id = :cur_doc_id;&lt;br /&gt;
&lt;br /&gt;
  if (doc_base_type=1) then --приход&lt;br /&gt;
  begin&lt;br /&gt;
   if (doc_status=1) then --&lt;br /&gt;
   begin&lt;br /&gt;
     insert into DOC_DETAIL_ACTIVE (doc_id,part_id,quant,summa,discount,koef,sum_dsc,sum_ndso,sum_ndsr)&lt;br /&gt;
       select :cur_doc_id,part_id,quant,summa,discount,0,sum_dsc,sum_ndso,sum_ndsr from doc_detail where doc_id=:doc_id;&lt;br /&gt;
     update DOC_DETAIL_ACTIVE dda set dda.part_id=iif((select count(*) from doc_detail where part_id = dda.part_id) &amp;gt; 1,dda.part_id,0) where dda.doc_id=:cur_doc_id;&lt;br /&gt;
   end&lt;br /&gt;
   else&lt;br /&gt;
   begin&lt;br /&gt;
     if (doc_status=-1) then&lt;br /&gt;
     begin&lt;br /&gt;
       insert into DOC_DETAIL_ACTIVE (doc_id,part_id,quant,summa,discount,koef,sum_dsc)&lt;br /&gt;
         select :cur_doc_id,part_id,quant,summa,discount,0,sum_dsc from doc_detail_deleted where doc_id=:doc_id;&lt;br /&gt;
       --update DOC_DETAIL_ACTIVE set part_id=0 where doc_id=:cur_doc_id;&lt;br /&gt;
       update DOC_DETAIL_ACTIVE dda set dda.part_id=iif((select count(*) from doc_detail where part_id = dda.part_id) &amp;gt; 1,dda.part_id,0) where dda.doc_id=:cur_doc_id;&lt;br /&gt;
     end &lt;br /&gt;
   end&lt;br /&gt;
  end&lt;br /&gt;
  else if ((doc_base_type=2) or (doc_base_type=7)) then  --расход&lt;br /&gt;
  begin&lt;br /&gt;
    if (doc_status=1) then&lt;br /&gt;
    begin&lt;br /&gt;
      insert into doc_detail_active (doc_id,part_id,quant,dcard,summa,summa_o,nac,discount,sum_ndso,sum_ndsr,koef,sum_dsc)&lt;br /&gt;
        select :cur_doc_id,part_id,quant,dcard,summa,summa_o,nac,discount,sum_ndso,sum_ndsr,1,sum_dsc from doc_detail where doc_id=:doc_id;&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
    begin&lt;br /&gt;
      if (doc_status=-1) then&lt;br /&gt;
      begin&lt;br /&gt;
        insert into doc_detail_active (doc_id,part_id,quant,dcard,summa,summa_o,nac,discount,sum_ndso,sum_ndsr,koef,sum_dsc)&lt;br /&gt;
          select :cur_doc_id,part_id,quant,dcard,summa,summa_o,nac,discount,sum_ndso,sum_ndsr,1,sum_dsc from doc_detail_deleted where doc_id=:doc_id;&lt;br /&gt;
      end&lt;br /&gt;
    end &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  suspend;&lt;br /&gt;
end;^&lt;br /&gt;
&lt;br /&gt;
set term ; ^&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Дополнения к ЕГАИС==&lt;br /&gt;
Если вы ставите версию менеджера 68 и выше, то нужно еще установить [[Скрипт дополнений к ЕГАИС]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Установка Этап 2 (выполняется для '''ПРОДУКТОВЫХ''' клиентов)=&lt;br /&gt;
&lt;br /&gt;
==В процедуре PR_DOC_COMMIT==&lt;br /&gt;
вставить строки после exception EX_WRONGDOC_BASE_TYPE на &lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
/* nicky edit */&lt;br /&gt;
if (exists (select * from docs d where d.id = :doc_id and d.doc_type in (3, 9))) then&lt;br /&gt;
  begin&lt;br /&gt;
    insert into egais_detail (doc_detail_id, egais_barcode, producer_inn, producer_kpp) select dd.id, dda.egais_barcode, dda.producer_inn, dda.producer_kpp&lt;br /&gt;
      from doc_detail dd join doc_detail_active dda on dd.doc_id = dda.doc_id and dd.part_id = dda.part_id&lt;br /&gt;
      join vw_warebase wb on dd.part_id = wb.part_id&lt;br /&gt;
      where dd.doc_id = :doc_id and (char_length(dda.EGAIS_BARCODE) &amp;gt; 0 or (wb.MMBSH containing '-21={') );&lt;br /&gt;
  end&lt;br /&gt;
/* nicky edit end*/&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==во VW_WAREBASE==&lt;br /&gt;
добавить EGAIS_PRODUCT_VCODE где источник p.EGAIS_PRODUCT_VCODE и в конце добавить left join parts p on wb.part_id = p.id&lt;br /&gt;
&lt;br /&gt;
==Исправить триггер DOC_DETAIL_ACTIVE_BI==&lt;br /&gt;
1) Комментируем строки стандартного приведения&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
/*if (new.ware_id&amp;lt;0) then&lt;br /&gt;
begin&lt;br /&gt;
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)&lt;br /&gt;
into new.sname, new.sizg,new.scountry;&lt;br /&gt;
end&lt;br /&gt;
*/&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) После условия &amp;lt;nowiki&amp;gt; if (new.part_id&amp;gt;0) then -- заполняем значения партии &amp;lt;/nowiki&amp;gt;, &lt;br /&gt;
дополняем выборку из таблицы PARTS полями&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
.....&lt;br /&gt;
motherpart_uuid,&lt;br /&gt;
EGAIS_ID,&lt;br /&gt;
EGAIS_REGID,&lt;br /&gt;
EGAIS_BREGID,&lt;br /&gt;
EGAIS_ALCCODE,&lt;br /&gt;
EGAIS_QUANT,&lt;br /&gt;
CAPACITY,&lt;br /&gt;
ALC_VOLUME,&lt;br /&gt;
EGAIS_BARCODE,&lt;br /&gt;
EGAIS_TYPE,&lt;br /&gt;
PRODUCER_INN,&lt;br /&gt;
PRODUCER_KPP,&lt;br /&gt;
BOTTLINGDATE,&lt;br /&gt;
EGAIS_PRODUCT_VCODE&lt;br /&gt;
from parts where id=new.part_id into&lt;br /&gt;
......&lt;br /&gt;
new.motherpart_uuid,&lt;br /&gt;
new.EGAIS_ID,&lt;br /&gt;
new.EGAIS_REGID,&lt;br /&gt;
new.EGAIS_BREGID,&lt;br /&gt;
new.EGAIS_ALCCODE,&lt;br /&gt;
new.EGAIS_QUANT,&lt;br /&gt;
new.CAPACITY,&lt;br /&gt;
new.ALC_VOLUME,&lt;br /&gt;
new.EGAIS_BARCODE,&lt;br /&gt;
new.EGAIS_TYPE,&lt;br /&gt;
new.PRODUCER_INN,&lt;br /&gt;
new.PRODUCER_KPP,&lt;br /&gt;
new.BOTTLINGDATE,&lt;br /&gt;
new.EGAIS_PRODUCT_VCODE;&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) В конце триггера пишем&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
--20160212 Приведение наименований для ЕГАИС, стандартное д.б. отключено&lt;br /&gt;
if ((select doc_type from docs where id = new.doc_id)=40) then&lt;br /&gt;
if ( (new.capacity is not null) and&lt;br /&gt;
     (new.bcode_izg is null or trim(new.bcode_izg) = '') and&lt;br /&gt;
     (select first 1 count(1) from warebase w left join parts p on p.id = w.part_id&lt;br /&gt;
          where (sname = new.sname or sorig_name = new.sname or sname = new.sorig_name or sorig_name = new.sorig_name) and&lt;br /&gt;
                (bcode_izg is not null and trim(bcode_izg) &amp;lt;&amp;gt; '') and&lt;br /&gt;
                (coalesce(p.capacity,0) = new.capacity) and&lt;br /&gt;
                (coalesce(p.egais_alccode,0) = coalesce(new.egais_alccode,0)) ) &amp;gt; 0&lt;br /&gt;
   )&lt;br /&gt;
  then&lt;br /&gt;
  begin&lt;br /&gt;
    select first 1 sname, name_id, bcode_izg, w.price from warebase w left join parts p on p.id = w.part_id&lt;br /&gt;
           where ( (sname = new.sname or sorig_name = new.sname or sname = new.sorig_name or sorig_name = new.sorig_name) and&lt;br /&gt;
                   (bcode_izg is not null and trim(bcode_izg) &amp;lt;&amp;gt; '') and&lt;br /&gt;
                   (coalesce(p.capacity,0) = new.capacity) and&lt;br /&gt;
                   (coalesce(p.egais_alccode,0) = coalesce(new.egais_alccode,0)) )&lt;br /&gt;
     into new.sname, new.name_id, new.bcode_izg, new.price;&lt;br /&gt;
     new.summa = new.price*new.quant;&lt;br /&gt;
     if (new.price_o&amp;lt;&amp;gt;0) then new.nac=(new.price-new.price_o)*100/new.price_o;&lt;br /&gt;
  End&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Новый метод редактирования штрихкодов==&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
CREATE UNIQUE INDEX WARES_IDX1 ON WARES (NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID,BARCODE);&lt;br /&gt;
CREATE INDEX WARES_LOG_IDX_INSERTDT ON WARES_LOG (INSERTDT);&lt;br /&gt;
&lt;br /&gt;
SET TERM ^ ;&lt;br /&gt;
&lt;br /&gt;
create or alter procedure PR_GET_WARE (&lt;br /&gt;
    SNAME type of DM_TEXT,&lt;br /&gt;
    SIZG type of DM_TEXT,&lt;br /&gt;
    SCOUNTRY type of DM_TEXT,&lt;br /&gt;
    ORIG_CODE type of DM_TEXT,&lt;br /&gt;
    SORIG_NAME type of DM_TEXT,&lt;br /&gt;
    SORIG_IZG type of DM_TEXT,&lt;br /&gt;
    SORIG_COUNTRY type of DM_TEXT,&lt;br /&gt;
    BARCODE type of DM_TEXT,&lt;br /&gt;
    Z_ID type of DM_ID,&lt;br /&gt;
    SKLAD_ID DM_TEXT,&lt;br /&gt;
    ALTTYPE DM_STATUS,&lt;br /&gt;
    MNN DM_TEXT = '')&lt;br /&gt;
returns (&lt;br /&gt;
    W_ID type of DM_ID)&lt;br /&gt;
as&lt;br /&gt;
declare variable OLD_BARCODE DM_TEXT1024;&lt;br /&gt;
declare variable NAME_ID type of DM_ID;&lt;br /&gt;
declare variable IZG_ID type of DM_ID;&lt;br /&gt;
declare variable COUNTRY_ID type of DM_ID;&lt;br /&gt;
declare variable ORIG_NAME_ID type of DM_ID;&lt;br /&gt;
declare variable ORIG_IZG_ID type of DM_ID;&lt;br /&gt;
declare variable ORIG_COUNTRY_ID type of DM_ID;&lt;br /&gt;
begin&lt;br /&gt;
if (orig_code is null) then orig_code='';&lt;br /&gt;
if (barcode is null) then barcode='';&lt;br /&gt;
select val_id from pr_getval_id(:sname,0,:alttype,:mnn) into :name_id;&lt;br /&gt;
select val_id from pr_getval_id(:sizg,3,:alttype) into :izg_id;&lt;br /&gt;
select val_id from pr_getval_id(:scountry,2,:alttype) into :country_id;&lt;br /&gt;
select val_id from pr_getval_id(:sorig_name,1,:alttype) into :orig_name_id;&lt;br /&gt;
select val_id from pr_getval_id(:sorig_izg,6,:alttype) into :orig_izg_id;&lt;br /&gt;
select val_id from pr_getval_id(:sorig_country,5,:alttype) into :orig_country_id;&lt;br /&gt;
select id from wares where NAME_ID=:name_id and IZG_ID=:izg_id and COUNTRY_ID=:country_id and&lt;br /&gt;
ORIG_CODE=:orig_code and ORIG_NAME_ID=:orig_name_id and&lt;br /&gt;
ORIG_IZG_ID=:orig_izg_id and ORIG_COUNTRY_ID=:orig_country_id and barcode=:barcode into :w_id;&lt;br /&gt;
if (w_id is null) then&lt;br /&gt;
begin&lt;br /&gt;
--    exception EX_WRONG_OPER;&lt;br /&gt;
w_id=gen_id(gen_wares_id,1);&lt;br /&gt;
--w_id=UUID_TO_CHAR(GEN_UUID());&lt;br /&gt;
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)&lt;br /&gt;
values&lt;br /&gt;
(:W_ID,:NAME_ID,:IZG_ID,:COUNTRY_ID,:ORIG_CODE,:ORIG_NAME_ID,:ORIG_IZG_ID,:ORIG_COUNTRY_ID,:BARCODE,:Z_ID,:SKLAD_ID);&lt;br /&gt;
end&lt;br /&gt;
--else if (old_barcode &amp;lt;&amp;gt; barcode) then update wares set barcode = :barcode where id = :w_id;&lt;br /&gt;
suspend;&lt;br /&gt;
end^&lt;br /&gt;
&lt;br /&gt;
SET TERM ; ^&lt;br /&gt;
&lt;br /&gt;
/* Following GRANT statetements are generated automatically */&lt;br /&gt;
&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_GETVAL_ID TO PROCEDURE PR_GET_WARE;&lt;br /&gt;
GRANT SELECT,INSERT ON WARES TO PROCEDURE PR_GET_WARE;&lt;br /&gt;
&lt;br /&gt;
/* Existing privileges on this procedure */&lt;br /&gt;
&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_GET_WARE TO PROCEDURE PR_DOC_PRIHOD_COMMIT_RECURSE;&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_GET_WARE TO &amp;quot;PUBLIC&amp;quot;;&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_GET_WARE TO STANDART;&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_GET_WARE TO SYSDBA;&lt;br /&gt;
&lt;br /&gt;
SET TERM ^ ;&lt;br /&gt;
&lt;br /&gt;
create or alter procedure PR_GETWARE_BY_IDS (&lt;br /&gt;
    NAME_ID type of DM_ID,&lt;br /&gt;
    IZG_ID type of DM_ID,&lt;br /&gt;
    COUNTRY_ID type of DM_ID,&lt;br /&gt;
    ORIG_CODE type of DM_TEXT,&lt;br /&gt;
    ORIG_NAME_ID type of DM_ID,&lt;br /&gt;
    ORIG_IZG_ID type of DM_ID,&lt;br /&gt;
    ORIG_COUNTRY_ID type of DM_ID,&lt;br /&gt;
    DOINSERT type of DM_STATUS,&lt;br /&gt;
    SEARCHINLOGS type of DM_STATUS,&lt;br /&gt;
    BARCODE DM_TEXT)&lt;br /&gt;
returns (&lt;br /&gt;
    WARE_ID type of DM_ID)&lt;br /&gt;
as&lt;br /&gt;
begin&lt;br /&gt;
  if (orig_code is null) then orig_code='';&lt;br /&gt;
  if (searchinlogs is null) then searchinlogs=0;&lt;br /&gt;
  if (searchinlogs=1) then&lt;br /&gt;
  begin &lt;br /&gt;
    select first 1 id from wares_log where name_id=:name_id and izg_id=:izg_id and country_id=:country_id and&lt;br /&gt;
      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&lt;br /&gt;
      and barcode=:barcode order by insertdt desc&lt;br /&gt;
      into :ware_id;&lt;br /&gt;
      if ((select id from wares where id = :ware_id) is null) then ware_id = null;&lt;br /&gt;
  end&lt;br /&gt;
  else&lt;br /&gt;
  begin&lt;br /&gt;
    select id from wares where name_id=:name_id and izg_id=:izg_id and country_id=:country_id and&lt;br /&gt;
      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&lt;br /&gt;
      and barcode=:barcode&lt;br /&gt;
      into :ware_id;&lt;br /&gt;
  end&lt;br /&gt;
  if ((ware_id is null) and (DOINSERT=1) and (searchinlogs&amp;lt;&amp;gt;1)) then&lt;br /&gt;
  begin&lt;br /&gt;
    ware_id=gen_id(gen_wares_id,1);&lt;br /&gt;
--    ware_id=UUID_TO_CHAR(GEN_UUID());&lt;br /&gt;
    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)&lt;br /&gt;
     values&lt;br /&gt;
       (:ware_id,:NAME_ID,:IZG_ID,:COUNTRY_ID,:ORIG_CODE,:ORIG_NAME_ID,:ORIG_IZG_ID,:ORIG_COUNTRY_ID,0,'',:barcode);&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  suspend;&lt;br /&gt;
end^&lt;br /&gt;
&lt;br /&gt;
SET TERM ; ^&lt;br /&gt;
&lt;br /&gt;
/* Following GRANT statetements are generated automatically */&lt;br /&gt;
&lt;br /&gt;
GRANT SELECT ON WARES_LOG TO PROCEDURE PR_GETWARE_BY_IDS;&lt;br /&gt;
GRANT SELECT,INSERT ON WARES TO PROCEDURE PR_GETWARE_BY_IDS;&lt;br /&gt;
&lt;br /&gt;
/* Existing privileges on this procedure */&lt;br /&gt;
&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_GETWARE_BY_IDS TO PROCEDURE PR_MAKEGOODWAREVALUES;&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_GETWARE_BY_IDS TO PROCEDURE PR_UPDATEWARE;&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_GETWARE_BY_IDS TO PROCEDURE PR_UPDATEWARE4PART;&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_GETWARE_BY_IDS TO STANDART;&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_GETWARE_BY_IDS TO SYSDBA;&lt;br /&gt;
&lt;br /&gt;
Update params p set p.param_value = '1' where p.param_id ='BCODE_IZG_EDIT_MODE';&lt;br /&gt;
&lt;br /&gt;
Update params p set p.param_value = 'Нет' where p.param_id ='ELNAKL_MAKE_LOCAL_GN';&lt;br /&gt;
Update params p set p.param_value = 'Нет' where p.param_id ='ELNAKL_MAKE_GLOBAL_GN';&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==установка журнала продажи алкоголя==&lt;br /&gt;
после выполнения скрипта расположенного ниже - поместить&lt;br /&gt;
в таблице REPORTS в отчёт - журнал продажи алкоголя в поле data содержимое файла otch_alko.txt из архива [[Медиа:Alko.zip]]&lt;br /&gt;
также в таблице groups поместить в поле data в строку Пиво содержимое файла groups_pivo.TXT из того же архива&lt;br /&gt;
и в строку Алкоголь файл groups_alko.TXT&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
CREATE OR ALTER VIEW VW_ALKO(&lt;br /&gt;
    ID,&lt;br /&gt;
    DOC_TYPE,&lt;br /&gt;
    CAPTION,&lt;br /&gt;
    DOCDATE,&lt;br /&gt;
    EGAIS_BARCODE,&lt;br /&gt;
    SNAME,&lt;br /&gt;
    ORIG_CODE,&lt;br /&gt;
    CAPACITY,&lt;br /&gt;
    QUANT)&lt;br /&gt;
AS&lt;br /&gt;
select d.id, d.doc_type, d.caption, d.docdate, ed.egais_barcode as egais_barcode, dd.sname, p.EGAIS_PRODUCT_VCODE, dd.capacity, iif(ed.egais_barcode='-',dd.quant,-1)&lt;br /&gt;
from egais_detail ed&lt;br /&gt;
left join vw_doc_detail dd on dd.id = ed.doc_detail_id&lt;br /&gt;
left join vw_docs d on d.id = dd.doc_id&lt;br /&gt;
left join parts p on dd.part_id = p.id&lt;br /&gt;
where d.doc_type = 3 or d.doc_type = 9&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
INSERT INTO REPORTS ( PARENT_ID, STATUS, REPORTTYPE, SORTING, CAPTION, PARAMS, WDICT_ID, DATA) VALUES ( 0, 0, 0, 0, 'Журнал продажи алкоголя', '', 25, NULL);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
INSERT INTO GROUPS (ID, PARENT_ID, CAPTION, GROUPTABLE, STATUS, INSERTDT, SYSTEMFLAG, DESCRIPTION, IMAGEINDEX, DATA, COLOR, SORTING, BASE_AGENT_ID, PACKET, SID) VALUES (-20, -8, 'Алкоголь', 'PARTS.NAME_ID', 0, '30-DEC-2015 14:41:25.011', 1, NULL, -1, NULL, 16777088, 8, 0, 6379, NULL);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
INSERT INTO GROUPS (ID, PARENT_ID, CAPTION, GROUPTABLE, STATUS, INSERTDT, SYSTEMFLAG, DESCRIPTION, IMAGEINDEX, DATA, COLOR, SORTING, BASE_AGENT_ID, PACKET, SID) VALUES (-21, -20, 'Пиво', 'PARTS.NAME_ID', 0, '30-DEC-2015 14:41:43.135', 1, NULL, -1, NULL, 516088, 8, 0, 6393, NULL);&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Склейка партий==&lt;br /&gt;
в менеджере ТМС перед авторизацией пользователя изменить запрос ищущий партии для склейки на подобный(или добавить нужные поля вручную - объём, содержание спирта...)&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
Select  count(part_id),sname,base_agent_id,price, docagent,capacity, sum(quant) as quant&lt;br /&gt;
from VW_WAREBASE&lt;br /&gt;
      where quant &amp;lt;&amp;gt; 0&lt;br /&gt;
      group by sname,base_agent_id,price, docagent,capacity&lt;br /&gt;
      having count(part_id)&amp;gt;1&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ТМС проверки новых накладных от ЕГАИС==&lt;br /&gt;
ТМС - вспомогательные - добавить новую ТМС &amp;quot;Проверить накладные&amp;quot;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
uses                                                                                                            &lt;br /&gt;
  Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, Messages, SysUtils,&lt;br /&gt;
  ToolWin, ImgList, dxExEdtr, dxCntner, dxTL, dxDBCtrl, dxDBGrid, StdCtrls,&lt;br /&gt;
  unMain,DB, IBQuery, IBDatabase, unDM, DBTables, cfdxUtils, Menus, System,&lt;br /&gt;
  Buttons, ExtCtrls, StdCtrls, cfSelectEdit,need,&lt;br /&gt;
  gb_table, Grids, ClipBrd, DBGrids, unFrameCustomDict, cfWindows;&lt;br /&gt;
&lt;br /&gt;
var qWork: TIBQuery;&lt;br /&gt;
    tmRefresh: TTimer;&lt;br /&gt;
    m: TMemo;                                       &lt;br /&gt;
                                         &lt;br /&gt;
procedure ShowData;                                     &lt;br /&gt;
var docnum: string;&lt;br /&gt;
begin&lt;br /&gt;
  try&lt;br /&gt;
  qWork:=dm.TempQuery(nil);                    &lt;br /&gt;
  try&lt;br /&gt;
    //m.Clear;&lt;br /&gt;
    if qWork.Transaction.Active then qWork.Transaction.Rollback;&lt;br /&gt;
    qWork.Transaction.StartTransaction;&lt;br /&gt;
    qWork.Active:=false;&lt;br /&gt;
    qWork.SQL.Text:='select list(docnum) as docnum from docs where status=2 and doc_type = 40';&lt;br /&gt;
    qWork.Active:=true;&lt;br /&gt;
    docnum:=qWork.FieldByName('docnum').AsString;&lt;br /&gt;
    if trim(docnum)&amp;lt;&amp;gt;'' then&lt;br /&gt;
    begin&lt;br /&gt;
      m.Color:=$008080FF;&lt;br /&gt;
      frmManagerXP2.LogIt('Внимание, новые накладные ЕГАИС № '+trim(docnum)+#13#10+'Откройте отложенные документы из журнала.');&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
      m.Color:=clWhite;&lt;br /&gt;
  except                                                                                                        &lt;br /&gt;
  //  ShowMessage(GLEM);&lt;br /&gt;
  end;&lt;br /&gt;
  finally&lt;br /&gt;
    qWork.Free;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure tmRefreshTimer;&lt;br /&gt;
begin&lt;br /&gt;
   ShowData;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
 m:=frmManagerXP2.FindComponent('mmLog');&lt;br /&gt;
 //m.Font.Name:='Verdana';&lt;br /&gt;
 //m.Font.Color:=clBlack;&lt;br /&gt;
 //m.Color:=$008080FF;&lt;br /&gt;
 ShowData;&lt;br /&gt;
 tmRefresh:=TTimer.Create(application);&lt;br /&gt;
 tmRefresh.Interval:=10000;&lt;br /&gt;
 tmRefresh.OnTimer:='tmRefreshTimer';&lt;br /&gt;
end;&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Вызов ТМС проверки накладных==&lt;br /&gt;
ТМС - События - После авторизации пользователя. В коде ХХХ это номер ТМС, созданной в предыдущем пункте&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
uses&lt;br /&gt;
  Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, Messages, SysUtils,&lt;br /&gt;
  ToolWin, ImgList, dxExEdtr, dxCntner, dxTL, dxDBCtrl, dxDBGrid, StdCtrls,&lt;br /&gt;
  unMain,DB, IBQuery, IBDatabase, unDM, DBTables, cfdxUtils, Menus, System,&lt;br /&gt;
  Buttons, ExtCtrls, StdCtrls, cfSelectEdit,need,&lt;br /&gt;
  gb_table, Grids, ClipBrd, DBGrids, unFrameCustomDict, cfWindows, Unit1;  &lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  mainForm: TForm1;&lt;br /&gt;
begin&lt;br /&gt;
  frmManagerXp2.RunTms(ХХХ,application);&lt;br /&gt;
  if dm.IsReg = false then&lt;br /&gt;
   begin&lt;br /&gt;
    MainForm := TForm1.Create(Application);&lt;br /&gt;
    MainForm.ShowModal;&lt;br /&gt;
   end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Менеджера==&lt;br /&gt;
Перезапустить Менеджер:&lt;br /&gt;
 1. в сервис - параметры системы - Настройка ЕГАИС указать адрес сервера ЕГАИС и идентификатор;&lt;br /&gt;
 2. в сервис - параметры системы - автоматизация отключить &amp;quot;Приводить наименования к существующим&amp;quot; и &amp;quot;Приводить наименования через глобальный справочник&amp;quot; (!!!ТОЛЬКО ДЛЯ ПРОДУКТОВ!!!).&lt;br /&gt;
&lt;br /&gt;
==Сетки==&lt;br /&gt;
Прикрепленный файл  [[Файл:Сетки_ЕГАИС.zip]]&lt;br /&gt;
&lt;br /&gt;
==Проверить УТМ (универсальный транспортный модуль)==&lt;br /&gt;
Переходим по ссылке на web страницу УТМ, например http://egais:8080/, смотрим версию модуля, версия должна быть '''не ниже 2.0.1''', если ниже, это значит, что УТМ тестовый.&lt;br /&gt;
&lt;br /&gt;
[[Файл:ЕГАИС_версия_УТМ.png|Версия УТМ]]&lt;br /&gt;
&lt;br /&gt;
==Проверка==&lt;br /&gt;
Запустить Менеджер - Инструменты - ЕГАИС Менеджер - Настройки - Перепроверить идентификаторы всех ТТН. После этого нажать &amp;quot;Проверить ТТН&amp;quot;. Ошибок быть не должно&lt;br /&gt;
&lt;br /&gt;
[[Файл:Проверка_ИД_ТТН_ЕГАИС.png|Проверка существующих ТТН]]&lt;br /&gt;
&lt;br /&gt;
 Теги: ЕГАИС, УТМ, универсальный транспортный модуль&lt;br /&gt;
&lt;br /&gt;
=Модификация ЕГАИС для общепита=&lt;br /&gt;
Для организаций, реализующих алкоголь &amp;quot;на разлив&amp;quot;, по требованию законодательства, необходимо в журнале продажи алкоголя фиксировать факт вскрытия упаковки.&lt;br /&gt;
Данные отправлять в ЕГАИС не нужно, поэтому у таких клиентов на алкогольную продукцию стоит системная группа -21 &amp;quot;Пиво&amp;quot;.&lt;br /&gt;
Особенности заполнения журнала реализованы через процедуру PR_EGAIS_DETAIL_OBSHEPIT, которая вызывается при проведении документа, &lt;br /&gt;
полный скрипт [[Файл:Модификация_ЕГАИС_для_общепита.txt]] обновления прилагается.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Проблемы при продаже алкоголя=&lt;br /&gt;
при отбитии пивного чека бывает ошибка, где написано java и регулярное выражение, например {d+\10} ... и т.п.&amp;lt;br&amp;gt; &lt;br /&gt;
в конце этого сообщения пишется поле, которое не прошло проверку правильности данных. варианты:&amp;lt;br&amp;gt; &lt;br /&gt;
KP - неправильно указан КПП в параметрах системы &amp;lt;br&amp;gt; &lt;br /&gt;
IN - неправильно указан ИНН в параметрах системы&amp;lt;br&amp;gt; &lt;br /&gt;
EAN - неправильно указан шк изготовителя&amp;lt;br&amp;gt; &lt;br /&gt;
BK - неправильно просканирован акциз (скорей всего маленький квадратик вместо основного)&amp;lt;br&amp;gt;&lt;br /&gt;
значение Value  состоит только из цифр - не тот штрихкод отсканировали, на акцизе два штрихкода, один маленький, другой большой, пусть закроют пальцем маленький и сканируют большой, в нём должны быть цифры и латинские буквы!!! &amp;lt;br&amp;gt; пример ошибки&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
java.lang.IllegalArgumentException: org.xml.sax.SAXParseException; cvc-pattern-valid: Value '133-103995646074040516326020775185' is not facet-valid with respect to pattern '\d\d[a-zA-Z0-9]{21}\d[0-1]\d[0-3]\d{10}[a-zA-Z0-9]{31}' for type 'BK'&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
CODE - не указан код вида продукции egais_product_vcode&amp;lt;br&amp;gt; &lt;br /&gt;
скорее всего не заполнено поле EGAIS_PRODUCT_VCODE  - код вида продукции... значит товар был оприходован вручную, а не через ЕГАИС, надо заполнить соответсвенно справочника - в интернете легко найти - искать код вида продукции алкоголь&lt;br /&gt;
&lt;br /&gt;
* достаточно часто стала вылезать при продаже ошибка - не удалось отправить данные в ЕГАИС - скорее всего подвис модуль УТМ - лучший вариант перезагрузить компьютер с УТМ, либо попробовать службу рестартануть, но както не всегда она поднимается&lt;br /&gt;
* для заполнения кодов вида продукции удобно воспользоватся фильтром в менеджере&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
((wb.mmbsh like ('%-21=%')) or (wb.mmbsh like ('%-20=%')) ) and (trim(wb.egais_product_vcode) = '' or (wb.egais_product_vcode is null))&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
* если не отправляются запросы в егаис, и в ЕГАИС менеджере есть только отправка запроса, но нет ответов - надо перезапустить службу УТМ, подвисла, или перезагрузить компьютер с УТМ либо если не помогает можно посмотретьнастройки брэндмауэра на компьютере с УТМ&lt;br /&gt;
* если попросят добавить дату розлива в алкогольных магазинах, используем колонку DATESERT&lt;br /&gt;
&lt;br /&gt;
*если при проведении документа прихода алкоголя выходит ошибка &amp;quot;Conversion error from string &amp;quot;несколько цифр через запятую&amp;quot; At procedure 'PR_DOC_PRIHOD_COMMIT_RECURSE'...&amp;quot;&lt;br /&gt;
изменяем в процедурах PR_NEW_PART и PR_DOC_PRIHOD_COMMIT_RECURSE тип переменной egais_id на DM_TEXT&lt;br /&gt;
&lt;br /&gt;
*если в отчёт продажи алкоголя попадают товары не алкоголя&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
в процедуре PR_DOC_COMMIT&lt;br /&gt;
заменить строки после exception EX_WRONGDOC_BASE_TYPE на &lt;br /&gt;
/* nicky edit */&lt;br /&gt;
if (exists (select * from docs d where d.id = :doc_id and d.doc_type in (3, 9))) then&lt;br /&gt;
  begin&lt;br /&gt;
    insert into egais_detail (doc_detail_id, egais_barcode, producer_inn, producer_kpp) select dd.id, dda.egais_barcode, dda.producer_inn, dda.producer_kpp&lt;br /&gt;
      from doc_detail dd join doc_detail_active dda on dd.doc_id = dda.doc_id and dd.part_id = dda.part_id&lt;br /&gt;
      join vw_warebase wb on dd.part_id = wb.part_id&lt;br /&gt;
      where dd.doc_id = :doc_id and (char_length(dda.EGAIS_BARCODE) &amp;gt; 0 or (wb.MMBSH containing '-21={') );&lt;br /&gt;
  end&lt;br /&gt;
/* nicky edit end*/&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и выполнить скрипт очистки уже попавших товаров&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
delete from egais_detail ed1&lt;br /&gt;
where ed1.doc_detail_id in&lt;br /&gt;
(select dd.id&lt;br /&gt;
from egais_detail ed&lt;br /&gt;
left join vw_doc_detail dd on dd.id = ed.doc_detail_id&lt;br /&gt;
left join vw_docs d on d.id = dd.doc_id&lt;br /&gt;
left join vw_warebase wb on wb.part_id = dd.part_id&lt;br /&gt;
      where not(char_Length(ed.egais_barcode) &amp;gt; 1)&lt;br /&gt;
      and not ((dd.mmbsh like '%-21={%') or (dd.mmbsh like '%-20={%'))&lt;br /&gt;
      )&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Частые вопросы по ЕГАИС=&lt;br /&gt;
&lt;br /&gt;
==При отбитии чека выходит сообщение с ошибкой на английском==&lt;br /&gt;
В новых версиях кассира сделаны необходимые проверки при добавлении товара в чек, но на всякий случай приводим примеры ошибок от УТМ и что они означают. &lt;br /&gt;
* IN - ругается на ИНН, указанный в реквизитах предприятия&lt;br /&gt;
* KPP - ругается на КПП, указанный в реквизитах предприятия&lt;br /&gt;
* BK - ругается на двумерный штрихкод акциза&lt;br /&gt;
* CODE - у какой то позиции не проставлен код вида продукции&lt;br /&gt;
* EAN - проблема со штрихкодом производителя&lt;br /&gt;
* duplicate - каким то образом в чеке две позиции с одинаковым акцизом&lt;br /&gt;
* 50 или 51 - проблема в ккм с печатью qr кода&lt;br /&gt;
* ошибка отправки данных - утм не включен&lt;br /&gt;
&lt;br /&gt;
==Алкоголь при добавлении в чек не запрашивает акциз==&lt;br /&gt;
Проверьте, что на данной позиции стоит группа 20 Алкоголь. &lt;br /&gt;
&lt;br /&gt;
==При добавлении пива запрашивает акциз, а его нет==&lt;br /&gt;
Проверьте, что на данной позиции стоит группа 21 Алкоголь / Пиво, а не группа 20.&lt;br /&gt;
&lt;br /&gt;
==Нужно продать старую бутылку в обход ЕГАИС==&lt;br /&gt;
Нужно снять с нее группы 20 и 21.&lt;br /&gt;
&lt;br /&gt;
==У клиента в одной базе два предприятия: ИП и ООО. Какие реквизиты заполнять в реквизитах организации==&lt;br /&gt;
В параметрах нужно указывать реквизиты того предприятия, которое торгует алкоголем. Обычно это ООО. &lt;br /&gt;
&lt;br /&gt;
==Что делать если кассир выдает ошибку отправки данных в ЕГАИС без каких либо подробностей==&lt;br /&gt;
Скорей всего УТМ не включен. Проверьте УТМ набрав путь к нему в адресной строке браузера или нажмите проверить ттн в менеджере.&lt;br /&gt;
&lt;br /&gt;
==Что делать пытались пробить бутылку но не получилось и бутылку отдали не пробив по программе==&lt;br /&gt;
Чтобы выровнять остатки по прорамме, пусть пробивают чек, а акциз сканируют с другой такойже бутылки. если такой бутылки нет, пусть сканируют акциз с другой бутылки. &lt;br /&gt;
Адекватным клиентам, можно показать как сохранять акцизы в блокнот (но таких единицы). Конечно, сама ситуация неправильная, но это это лучший выход из нее. &lt;br /&gt;
Чтобы таких случаев не было, в есть различные проверки.&lt;br /&gt;
&lt;br /&gt;
==Что делать если на сайте ЕГАИС не совсем корректные остатки==&lt;br /&gt;
РАР будет использовать информацию об остатках при проверке деятельности магазинов только с 1.01.2017.&lt;br /&gt;
&lt;br /&gt;
==Будет ли работать ЕГАИС если нет интернета==&lt;br /&gt;
Если в точке нет интернета, егаис всеравно будет работать, данные будут сохраняться в утм, qr коды будут печататься, но если их отсканировать и перейти на сайт - там будет пусто. Главное чтобы утм была включена и работала. Когда интернет появится, утм сама синхронизируется с РАР. После этого данные появятся на сайте егаис. Без интернета можно работать 3 дня.&lt;br /&gt;
&lt;br /&gt;
==Что делать если в чеке над qr кодом пишется неверное название магазина==&lt;br /&gt;
В егаис при продаже нужно передавать название магазина. Кассир берет его из параметров системы, реквизиты организации, название торговой точки там может стоять ИП какое нибудь (их первое предприятие). Клиентов пугает, что у них выходит ИП вместо ООО. В качестве временного решения предлагаю менять реквизиты, перезапускаем кассира и печатает в чеках нормально, но потом у клиента эти реквизиты выходят в печатных формах и ценниках.&lt;br /&gt;
&lt;br /&gt;
==При продаже алкоголя ругается на штрихкода изготовителя==&lt;br /&gt;
Проверьте правильность штрихкода (с бутылки сканируется именно те цифры, какие записаны в программе). Если штрихкода в программе не забит и на бутылке его нет, вставьте локальный штрихкод.&lt;br /&gt;
&lt;br /&gt;
==Ошибка 50 или 51==&lt;br /&gt;
Если при продаже алкоголя выходит незавершенка и пишет ошибку 50 или 51 некорретные данные - это значит проблема не в отправке данных, а непосредственно при печати qr кода кассовым аппаратом. &lt;br /&gt;
Делаем проверку - в настройках оставляем галочку отправлять данные в егаис, но при этом ставим еще галочку не печатать qr код. Если чек выходит, значит проблема или с тем, что ккм не поддерживает печатать кодов или нужно объяснить прошивку. В крайнем случае оставляем все как есть и объясняем клиенту, что РАР разрешил на время переходного периода не печатать qr код если печатается ссылка, говорим что в ближайшее время исправим эту ситуацию и сообщаем о таких клиентах отделу внедрения.&amp;lt;br&amp;gt;&lt;br /&gt;
Ещё данная ошибка может быть с следующем случае - ККМ старая, перепрошита под ЕГАИС&amp;lt;br&amp;gt;&lt;br /&gt;
старые аппараты не могут печатать большие изображения&amp;lt;br&amp;gt;&lt;br /&gt;
в options.ini под нужным предприятием добавляем строки&amp;lt;br&amp;gt;&lt;br /&gt;
атол (быстро):&amp;lt;br&amp;gt;&lt;br /&gt;
1_QR_Height (100)&amp;lt;br&amp;gt;&lt;br /&gt;
1_QR_Scale (300)&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
атол (медленно):&amp;lt;br&amp;gt;&lt;br /&gt;
1_QRSlow_BmpScale (7)&amp;lt;br&amp;gt;&lt;br /&gt;
1_QRSlow_Scale (7)&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
штрих (быстро):&amp;lt;br&amp;gt;&lt;br /&gt;
2_QR_DotSize (7)&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
штрих (медленно):&amp;lt;br&amp;gt;&lt;br /&gt;
2_QRSlow_BmpScale (7)&amp;lt;br&amp;gt;&lt;br /&gt;
быстро - средствами ККМ, медленно - как графический объект&lt;br /&gt;
&lt;br /&gt;
==Почему в чеке несколько бутылок с алкоголем, а qr код распечатался один==&lt;br /&gt;
1 чек - 1 qr код. Если перейти по ссылке, то отобразится информация по всем позициям в чеке.&lt;br /&gt;
&lt;br /&gt;
==Должны ли печататься qr коды при продаже пива==&lt;br /&gt;
РАР отменил пивные чеки, т.е. непосредственно при продаже информация в егаис не уходит. В конце дня нужно делать &amp;quot;акт списания из торгового зала со второго регистра&amp;quot; из менеджера, в котором будут все эти продажи.&lt;br /&gt;
&lt;br /&gt;
==Как отпускать алкоголь в общепитах==&lt;br /&gt;
От общепита РАР требует только данные по приходу ТТН. Непосредственно при продаже в ЕГАИС ничего отправлять не нужно. Нужно только вести журнал по алкоголю.&lt;br /&gt;
&lt;br /&gt;
==Как сделать возврат поставщику по ЕГАИС==&lt;br /&gt;
Открыть журнал документов, встать на проведеннный приход по ттн, нажать на кнопку &amp;quot;сделать возврат&amp;quot; на панели, где находятся и другие кнопки, относящиеся к ЕГАИС. Затем проставить нужное количество и отправить. Не пытайтесь вручную создать расходный документ &amp;quot;возврат по ЕГАИС&amp;quot;, добавить в него позиции и провести - это неправильно. &lt;br /&gt;
&lt;br /&gt;
==Где можно посмотреть какой запрос был отправлен в ЕГАИС==&lt;br /&gt;
Таблица EGAIS_REQUESTS. Тело запроса будет в колонке QUERY_DATA, а ответ в REPLY_DATA.&lt;br /&gt;
&lt;br /&gt;
==Почему клиент сканирует QR код, переходит на сайт, а там пусто==&lt;br /&gt;
Обычно данные появляются на сайте в течении 5 минут после продажи, но могут быть задержки. Я лично был свидетелем, когда после покупки в Красном и Белом данные появились только через полчаса.&lt;br /&gt;
&lt;br /&gt;
==Почему на сайте в информации о чеке неверно отображается дата чека==&lt;br /&gt;
Проблема решается обновлением версии кассира.&lt;br /&gt;
&lt;br /&gt;
==Что делать если акт на самом деле принят, но в журнале документов отображается, что не принят?==&lt;br /&gt;
В начальных версиях егаис-менеджера была ошибка, что если по ТТН отправляют повторный акт по уже принятой накладной и УТМ по этому запросу возвращает отрицательный ответ (т.к. ттн уже подтверждена), то менеджер меняет в базе статус с принятого на отклонён. Это можно исправить спомощью процедуры: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SET TERM ^ ;&lt;br /&gt;
&lt;br /&gt;
create or alter procedure PR_CHECK_TTN_ACCEPTED&lt;br /&gt;
returns (&lt;br /&gt;
    DOC_ID_OUT bigint)&lt;br /&gt;
as&lt;br /&gt;
declare variable DOC_ID DM_ID;&lt;br /&gt;
declare variable EGAIS_ID DM_UUID;&lt;br /&gt;
declare variable C DM_STATUS;&lt;br /&gt;
begin&lt;br /&gt;
 for select D.ID,&lt;br /&gt;
            D.EGAIS_ID&lt;br /&gt;
     from DOCS D&lt;br /&gt;
     where D.DOC_TYPE = 40&lt;br /&gt;
           and D.EGAIS_STATUS = 2&lt;br /&gt;
     into :DOC_ID,&lt;br /&gt;
          :EGAIS_ID&lt;br /&gt;
 do&lt;br /&gt;
 begin&lt;br /&gt;
  C = 0;&lt;br /&gt;
  select first 1 count(*)&lt;br /&gt;
  from EGAIS_REQUESTS R&lt;br /&gt;
  where 1 = 1&lt;br /&gt;
        and R.EGAIS_ID = :EGAIS_ID&lt;br /&gt;
        and R.REPLY_DATA containing '&amp;lt;tc:Conclusion&amp;gt;Accepted&amp;lt;/tc:Conclusion&amp;gt;'&lt;br /&gt;
  into C;&lt;br /&gt;
  if (C &amp;gt; 0) then&lt;br /&gt;
  begin&lt;br /&gt;
   select :DOC_ID&lt;br /&gt;
   from RDB$DATABASE&lt;br /&gt;
   into :DOC_ID_OUT;&lt;br /&gt;
   update DOCS D&lt;br /&gt;
   set D.EGAIS_STATUS = 1&lt;br /&gt;
   where D.ID = :DOC_ID;&lt;br /&gt;
   suspend;&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
end^&lt;br /&gt;
&lt;br /&gt;
SET TERM ; ^&lt;br /&gt;
&lt;br /&gt;
/* Following GRANT statetements are generated automatically */&lt;br /&gt;
&lt;br /&gt;
GRANT SELECT,UPDATE ON DOCS TO PROCEDURE PR_CHECK_TTN_ACCEPTED;&lt;br /&gt;
GRANT SELECT ON EGAIS_REQUESTS TO PROCEDURE PR_CHECK_TTN_ACCEPTED;&lt;br /&gt;
&lt;br /&gt;
/* Existing privileges on this procedure */&lt;br /&gt;
&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_CHECK_TTN_ACCEPTED TO SYSDBA;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Если каким то образом получилось, что в егаис накладная принята, но в базе нет данных запросов и она там неподтверждена, то ее можно подтвердить вручную спомощью запроса: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
update docs d set d.egais_status=1 where d.doc_id=:doc_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Ошибка при принятии накладной: &amp;quot;Не удалось найти ЕГАИС идентификатор ТТН. Принятие отменено.&amp;quot;==&lt;br /&gt;
[[Файл:ЕГАИС_ошибка_при_принятии_накладной.png]]&lt;br /&gt;
&lt;br /&gt;
Заходим во входящие запросы, выполняем &amp;quot;запросить данные&amp;quot;. Находим строку, на которую ругается ЕГАИС, например, с нужным нам [[Waybill/2701]], и удаляем эту строку. &lt;br /&gt;
После чего заходим в личный кабинет ЕГАИС и заново запрашиваем накладную&lt;br /&gt;
&lt;br /&gt;
==Что делать с зависшими накладными==&lt;br /&gt;
Если на ТТН уже пришел акт подтверждения, а в модуле ЕГАИС они по прежнему висят, то нужно сделать следующее. В таблице EGAIS_REQUESTS нужно отфильтровать ТТН по статусу. У зависших накладных статус будет 0 или null. Далее у этих ТТН нужно поменять статус на 1.&lt;/div&gt;</summary>
		<author><name>Ilsiya</name></author>	</entry>

	<entry>
		<id>http://wiki.standart-n.ru/index.php/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%95%D0%93%D0%90%D0%98%D0%A1</id>
		<title>Установка ЕГАИС</title>
		<link rel="alternate" type="text/html" href="http://wiki.standart-n.ru/index.php/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%95%D0%93%D0%90%D0%98%D0%A1"/>
				<updated>2017-02-09T06:17:15Z</updated>
		
		<summary type="html">&lt;p&gt;Ilsiya: /* установка журнала продажи алкоголя */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Настройка jacarta-ключа=&lt;br /&gt;
Предварительно нужно установить Единый клиент джакарты&lt;br /&gt;
[[Медиа:Получение_КЭП_для_ЕГАИС.docx]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Установка Этап 1 (выполняется для '''ВСЕХ''' клиентов)=&lt;br /&gt;
&lt;br /&gt;
==Установить процедуру PR_ALTER_VIEW==&lt;br /&gt;
[[Изменения представления| '''PR_ALTER_VIEW''']]&lt;br /&gt;
&lt;br /&gt;
==Заменить версию Менеджера==&lt;br /&gt;
Для скриптов ниже актуальная версия Менеджера ManagerXP2_272_62(20160321_155233)&lt;br /&gt;
кассира zkassa 2.2.1.22.exe&lt;br /&gt;
&lt;br /&gt;
==Выполнить скрипт==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SET TERM ^ ;&lt;br /&gt;
/*создание доменов если их нет*/&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DM_ID_NULL','','BIGINT','DOMAIN');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DM_ID','','BIGINT NOT NULL','DOMAIN');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DM_STATUS','','INTEGER','DOMAIN');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DM_DATETIME','','TIMESTAMP','DOMAIN');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DM_TEXT1024','','VARCHAR(1024) CHARACTER SET WIN1251 COLLATE WIN1251','DOMAIN');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DM_DOUBLE','','DOUBLE PRECISION','DOMAIN');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DM_ID_NULL','','BIGINT','DOMAIN');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DM_ID_NULL','','BIGINT','DOMAIN');^&lt;br /&gt;
&lt;br /&gt;
/*не относится к ЕГАИС*/&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL','FIO_ID','DM_ID_NULL','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL','FIO_BOLNOY_ID','DM_ID_NULL','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL','TYPE_LGOTA','DM_ID_NULL','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL','RECEPT','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','SUM_NDSR','DM_DOUBLE','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL','SUM_NDSR','DM_DOUBLE','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOCS','FIO_ID','DM_ID_NULL','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOCS','SUM_NDSR','DM_DOUBLE','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL','SUM_NDSR','DM_DOUBLE','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','MOTHERPART_UUID','DM_UUID_NULL','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','MOTHERPART_UUID','DM_UUID_NULL','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VALS','D$UUID','DM_UUID_NULL','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VALS','L_ID','DM_ID_NULL','TABLE');^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('AGENTS','EGAIS_ID','DM_UUID_NULL','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOCS','EGAIS_NUM','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOCS','EGAIS_ID','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOCS','EGAIS_UNITTYPE','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOCS','EGAIS_STATUS','DM_STATUS','TABLE');^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','EGAIS_ID','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','EGAIS_REGID','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','EGAIS_BREGID','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','EGAIS_ALCCODE','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','EGAIS_QUANT','DM_DOUBLE','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','CAPACITY','DM_DOUBLE','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','ALC_VOLUME','DM_DOUBLE','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','EGAIS_PRODUCER_ID','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','EGAIS_BARCODE','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','EGAIS_TYPE','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','PRODUCER_INN','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','PRODUCER_KPP','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','BOTTLINGDATE','DM_DATETIME','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('PARTS','EGAIS_PRODUCT_VCODE','DM_TEXT','TABLE');^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','EGAIS_ID','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','EGAIS_BREGID','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','EGAIS_REGID','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','EGAIS_ALCCODE','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','EGAIS_PRODUCT_VCODE','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','CAPACITY','DM_DOUBLE','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','ALC_VOLUME','DM_DOUBLE','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','EGAIS_PRODUCER_ID','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','EGAIS_QUANT','DM_DOUBLE','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','EGAIS_BARCODE','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','EGAIS_TYPE','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','PRODUCER_INN','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','PRODUCER_KPP','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('DOC_DETAIL_ACTIVE','BOTTLINGDATE','DM_DATETIME','TABLE');^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('','','GEN_EGAIS_REQUESTS_ID','generator');^&lt;br /&gt;
&lt;br /&gt;
/*таблица EGAIS_PRODUCERS*/&lt;br /&gt;
EXECUTE BLOCK AS BEGIN&lt;br /&gt;
if (not exists(select 1 from rdb$relations where rdb$relation_name = 'EGAIS_PRODUCERS')) then&lt;br /&gt;
execute statement 'CREATE TABLE EGAIS_PRODUCERS(ID DM_ID NOT NULL);';&lt;br /&gt;
END^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_PRODUCERS','INN','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_PRODUCERS','KPP','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_PRODUCERS','FULLNAME','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_PRODUCERS','SHORTNAME','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_PRODUCERS','COUNTRY','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_PRODUCERS','POSTINDEX','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_PRODUCERS','REGIONCODE','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_PRODUCERS','DESCRIPTION','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_PRODUCERS','CITY','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_PRODUCERS','STREET','DM_TEXT','TABLE');^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_PRODUCERS','ID','EGAIS_PRODUCERS_IDX1','INDEX');^&lt;br /&gt;
&lt;br /&gt;
/* таблица EGAIS_REQUESTS*/&lt;br /&gt;
EXECUTE BLOCK AS BEGIN&lt;br /&gt;
if (not exists(select 1 from rdb$relations where rdb$relation_name = 'EGAIS_REQUESTS')) then&lt;br /&gt;
execute statement 'CREATE TABLE EGAIS_REQUESTS (ID  DM_ID NOT NULL);';&lt;br /&gt;
END^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','REPLY_ID','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','REPLY_URL','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','QUERY_TYPE','DM_STATUS','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','QUERY_URL','DM_TEXT','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','QUERY_DATA','DM_BLOBBIN','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','REPLY_DATA','DM_BLOBBIN','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','STATUS','DM_STATUS','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','INSERT_DATE','DM_DATETIME','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','REPLY_DATE','DM_DATETIME','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','EGAIS_ID','DM_TEXT1024','TABLE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','QUERY_OUT','DM_TEXT1024','TABLE');^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','ID','','PRIMARY KEY');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('EGAIS_REQUESTS','REPLY_ID','EGAIS_REQUESTS_IDX1','index');^&lt;br /&gt;
&lt;br /&gt;
/* Trigger: EGAIS_REQUESTS_BI */&lt;br /&gt;
CREATE OR ALTER TRIGGER EGAIS_REQUESTS_BI FOR EGAIS_REQUESTS&lt;br /&gt;
ACTIVE BEFORE INSERT POSITION 0&lt;br /&gt;
as&lt;br /&gt;
begin&lt;br /&gt;
  if (new.id is null) then&lt;br /&gt;
    new.id = gen_id(gen_egais_REQUESTS_id,1);&lt;br /&gt;
  if (new.insert_date is null) then&lt;br /&gt;
    new.insert_date = 'now';&lt;br /&gt;
end;^&lt;br /&gt;
&lt;br /&gt;
/* Trigger: EGAIS_REQUESTS_BU0 */&lt;br /&gt;
CREATE OR ALTER TRIGGER EGAIS_REQUESTS_BU0 FOR EGAIS_REQUESTS&lt;br /&gt;
ACTIVE BEFORE UPDATE POSITION 0&lt;br /&gt;
AS&lt;br /&gt;
begin&lt;br /&gt;
  if (new.reply_url &amp;lt;&amp;gt; '') then&lt;br /&gt;
    new.reply_date = 'now';&lt;br /&gt;
end;^&lt;br /&gt;
&lt;br /&gt;
create or alter procedure PR_NEW_PART (&lt;br /&gt;
    DOC_ID type of DM_ID,&lt;br /&gt;
    PARENT_ID type of DM_ID,&lt;br /&gt;
    WARE_ID type of DM_UUID_NULL,&lt;br /&gt;
    PRICE type of DM_DOUBLE,&lt;br /&gt;
    PRICE_O type of DM_DOUBLE,&lt;br /&gt;
    PRICE_Z type of DM_DOUBLE,&lt;br /&gt;
    PRICE_R type of DM_DOUBLE,&lt;br /&gt;
    QUANT type of DM_DOUBLE,&lt;br /&gt;
    BARCODE type of DM_TEXT,&lt;br /&gt;
    BARCODE1 type of DM_TEXT,&lt;br /&gt;
    DEP type of DM_ID,&lt;br /&gt;
    GODENDO type of DM_DATETIME,&lt;br /&gt;
    SERIA type of DM_TEXT,&lt;br /&gt;
    NDS type of DM_DOUBLE,&lt;br /&gt;
    SUM_NDSO type of DM_DOUBLE,&lt;br /&gt;
    SERT type of DM_TEXT,&lt;br /&gt;
    DATESERT type of DM_DATETIME,&lt;br /&gt;
    KEMVSERT type of DM_TEXT,&lt;br /&gt;
    SDSERT type of DM_DATETIME,&lt;br /&gt;
    REGN type of DM_TEXT,&lt;br /&gt;
    NGTD type of DM_TEXT,&lt;br /&gt;
    EDIZM type of DM_TEXT,&lt;br /&gt;
    NAC type of DM_DOUBLE,&lt;br /&gt;
    MOTHERPART_ID type of DM_ID,&lt;br /&gt;
    PART_TYPE DM_STATUS,&lt;br /&gt;
    BASE_AGENT_ID DM_ID,&lt;br /&gt;
    SKLAD_ID type of DM_TEXT,&lt;br /&gt;
    CONTRACT_ID DM_ID,&lt;br /&gt;
    DOC_DETAIL_ACTIVE_ID DM_ID,&lt;br /&gt;
    GROUP_ID DM_ID,&lt;br /&gt;
    MOTHERPART_UUID DM_UUID_NULL = 0,&lt;br /&gt;
    EGAIS_ID DM_TEXT = null,&lt;br /&gt;
    EGAIS_REGID DM_TEXT1024 = null,&lt;br /&gt;
    EGAIS_BREGID DM_TEXT1024 = null,&lt;br /&gt;
    EGAIS_ALCCODE DM_TEXT1024 = null,&lt;br /&gt;
    EGAIS_QUANT DM_DOUBLE = 0,&lt;br /&gt;
    CAPACITY DM_DOUBLE = 0,&lt;br /&gt;
    ALC_VOLUME DM_DOUBLE = 0,&lt;br /&gt;
    EGAIS_PRODUCER_ID DM_TEXT1024 = null,&lt;br /&gt;
    EGAIS_BARCODE DM_TEXT1024 = null,&lt;br /&gt;
    EGAIS_TYPE DM_TEXT = null,&lt;br /&gt;
    PRODUCER_INN DM_TEXT1024 = null,&lt;br /&gt;
    PRODUCER_KPP DM_TEXT1024 = null,&lt;br /&gt;
    BOTTLINGDATE DM_DATETIME = null,&lt;br /&gt;
    EGAIS_PRODUCT_VCODE DM_TEXT = null)&lt;br /&gt;
returns (&lt;br /&gt;
    P_ID type of DM_ID)&lt;br /&gt;
as&lt;br /&gt;
begin&lt;br /&gt;
  p_id=gen_id(gen_parts_id,1);&lt;br /&gt;
  insert into parts&lt;br /&gt;
    (ID,parent_id,doc_id,WARE_ID,PRICE,PRICE_O,PRICE_Z,PRICE_R,QUANT,BARCODE,BARCODE1,DEP,/*KRITK,*/GODENDO,SERIA,NDS,SUM_NDSO,SERT,DATESERT,KEMVSERT,SDSERT,REGN,NGTD,&lt;br /&gt;
    EDIZM,NAC,motherpart_id,sklad_id,part_type,BASE_AGENT_ID,contract_id, doc_detail_active_id, group_id, motherpart_uuid,&lt;br /&gt;
    EGAIS_ID, EGAIS_BREGID, EGAIS_REGID, EGAIS_ALCCODE, EGAIS_QUANT, CAPACITY, ALC_VOLUME, EGAIS_PRODUCER_ID, EGAIS_BARCODE,&lt;br /&gt;
    EGAIS_TYPE, PRODUCER_INN, PRODUCER_KPP, BOTTLINGDATE, EGAIS_PRODUCT_VCODE)&lt;br /&gt;
  values&lt;br /&gt;
    (:p_id,:parent_id,:doc_id,:WARE_ID,:PRICE,:PRICE_O,:PRICE_Z,:PRICE_R,:QUANT,:BARCODE,:BARCODE1,:DEP,/*:KRITK,*/:GODENDO,:SERIA,:NDS,:SUM_NDSO,:SERT,:DATESERT,:KEMVSERT,&lt;br /&gt;
    :SDSERT,:REGN,:NGTD,:EDIZM,:NAC,:motherpart_id,:sklad_id,:part_type,:BASE_AGENT_ID,:contract_id,:doc_detail_active_id, :group_id, :motherpart_uuid,&lt;br /&gt;
    :EGAIS_ID, :EGAIS_BREGID, :EGAIS_REGID, :EGAIS_ALCCODE, :EGAIS_QUANT, :CAPACITY, :ALC_VOLUME, :EGAIS_PRODUCER_ID, :EGAIS_BARCODE,&lt;br /&gt;
    :EGAIS_TYPE, :PRODUCER_INN, :PRODUCER_KPP, :BOTTLINGDATE, :EGAIS_PRODUCT_VCODE);&lt;br /&gt;
  suspend;&lt;br /&gt;
end;^&lt;br /&gt;
&lt;br /&gt;
GRANT INSERT ON PARTS TO PROCEDURE PR_NEW_PART;^&lt;br /&gt;
&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_NEW_PART TO PROCEDURE PR_DOC_PRIHOD_COMMIT_RECURSE;^&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_NEW_PART TO &amp;quot;PUBLIC&amp;quot;;^&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_NEW_PART TO STANDART;^&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_NEW_PART TO SYSDBA;^&lt;br /&gt;
&lt;br /&gt;
create or alter procedure PR_GET_EGAIS_STATUS (&lt;br /&gt;
    ID DM_STATUS)&lt;br /&gt;
returns (&lt;br /&gt;
    OUT_TEXT DM_TEXT1024)&lt;br /&gt;
as&lt;br /&gt;
begin&lt;br /&gt;
  if ( (id is null) or (id = 0) )  then out_text = 'Не установлен';&lt;br /&gt;
  else if (id = 1) then out_text = 'Акт принятия принят';&lt;br /&gt;
  else if (id = 2) then out_text = 'Акт принятия отклонен';&lt;br /&gt;
  else if (id = 3) then out_text = 'Акт отказа принят';&lt;br /&gt;
  else if (id = 4) then out_text = 'Акт отказа отклонен';&lt;br /&gt;
  else if (id = 5) then out_text = 'Акт расхождений принят';&lt;br /&gt;
  else if (id = 6) then out_text = 'Акт расхождений отклонен';&lt;br /&gt;
  else out_text = 'Неизвестный статус';&lt;br /&gt;
&lt;br /&gt;
  suspend;&lt;br /&gt;
end;^&lt;br /&gt;
&lt;br /&gt;
create or alter procedure PR_INSTALL_COMMIT_RECURSE&lt;br /&gt;
as&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
  if ((select&lt;br /&gt;
    count(1)&lt;br /&gt;
    from rdb$procedure_parameters pp&lt;br /&gt;
    where 1=1&lt;br /&gt;
    and pp.rdb$procedure_name='PR_DOC_DETAIL_INSERT'&lt;br /&gt;
    and pp.rdb$parameter_name='SUM_NDSR')=0 ) then&lt;br /&gt;
  EXECUTE STATEMENT ('&lt;br /&gt;
   create or alter procedure PR_DOC_PRIHOD_COMMIT_RECURSE (&lt;br /&gt;
        DOC_ID type of DM_ID,&lt;br /&gt;
        DOC_PARENT_ID type of DM_ID,&lt;br /&gt;
        PART_PARENT_ID type of DM_ID,&lt;br /&gt;
        DOC_COMMITDATE type of DM_DATE,&lt;br /&gt;
        CONTRACT_ID DM_ID)&lt;br /&gt;
    as&lt;br /&gt;
    declare variable PART_ID type of DM_ID;&lt;br /&gt;
    declare variable WARE_ID type of DM_UUID_NULL;&lt;br /&gt;
    declare variable SNAME type of DM_TEXT;&lt;br /&gt;
    declare variable SIZG type of DM_TEXT;&lt;br /&gt;
    declare variable SCOUNTRY type of DM_TEXT;&lt;br /&gt;
    declare variable ORIG_CODE type of DM_TEXT;&lt;br /&gt;
    declare variable SORIG_NAME type of DM_TEXT;&lt;br /&gt;
    declare variable SORIG_IZG type of DM_TEXT;&lt;br /&gt;
    declare variable SORIG_COUNTRY type of DM_TEXT;&lt;br /&gt;
    declare variable BARCODE type of DM_TEXT;&lt;br /&gt;
    declare variable Z_ID type of DM_ID;&lt;br /&gt;
    declare variable SKLAD_ID DM_TEXT;&lt;br /&gt;
    declare variable PRICE type of DM_DOUBLE;&lt;br /&gt;
    declare variable PRICE_O type of DM_DOUBLE;&lt;br /&gt;
    declare variable PRICE_Z type of DM_DOUBLE;&lt;br /&gt;
    declare variable PRICE_R type of DM_DOUBLE;&lt;br /&gt;
    declare variable QUANT type of DM_DOUBLE;&lt;br /&gt;
    declare variable BARCODE1 type of DM_TEXT;&lt;br /&gt;
    declare variable DEP type of DM_ID;&lt;br /&gt;
    declare variable KRITK type of DM_DOUBLE;&lt;br /&gt;
    declare variable GODENDO type of DM_DATETIME;&lt;br /&gt;
    declare variable SERIA type of DM_TEXT;&lt;br /&gt;
    declare variable NDS type of DM_DOUBLE;&lt;br /&gt;
    declare variable SUM_NDSO type of DM_DOUBLE;&lt;br /&gt;
    declare variable SERT type of DM_TEXT;&lt;br /&gt;
    declare variable DATESERT type of DM_DATETIME;&lt;br /&gt;
    declare variable KEMVSERT type of DM_TEXT;&lt;br /&gt;
    declare variable SDSERT type of DM_DATETIME;&lt;br /&gt;
    declare variable REGN type of DM_TEXT;&lt;br /&gt;
    declare variable NGTD type of DM_TEXT;&lt;br /&gt;
    declare variable EDIZM type of DM_TEXT;&lt;br /&gt;
    declare variable PARENT_ID type of DM_ID;&lt;br /&gt;
    declare variable SUMMA type of DM_DOUBLE;&lt;br /&gt;
    declare variable SUMMA_O type of DM_DOUBLE;&lt;br /&gt;
    declare variable DISCOUNT type of DM_DOUBLE;&lt;br /&gt;
    declare variable ACTIVE_ID type of DM_ID;&lt;br /&gt;
    declare variable NAC type of DM_DOUBLE;&lt;br /&gt;
    declare variable DOC_DETAIL_ID type of DM_ID;&lt;br /&gt;
    declare variable MOTHERPART_ID type of DM_ID;&lt;br /&gt;
    declare variable BCODE_IZG type of DM_TEXT;&lt;br /&gt;
    declare variable HUMAN_QUANT type of DM_TEXT;&lt;br /&gt;
    declare variable SUM_DSC type of DM_DOUBLE;&lt;br /&gt;
    declare variable DCARD type of DM_TEXT;&lt;br /&gt;
    declare variable PART_TYPE DM_STATUS;&lt;br /&gt;
    declare variable BASE_AGENT_ID DM_ID;&lt;br /&gt;
    declare variable GROUP_ID DM_ID;&lt;br /&gt;
    declare variable MAKE_ID DM_ID_NULL;&lt;br /&gt;
    declare variable MNN DM_TEXT;&lt;br /&gt;
    declare variable MOTHERPART_UUID DM_UUID_NULL;&lt;br /&gt;
    declare variable EGAIS_ID DM_TEXT;&lt;br /&gt;
    declare variable EGAIS_BREGID DM_TEXT1024;&lt;br /&gt;
    declare variable EGAIS_REGID DM_TEXT1024;&lt;br /&gt;
    declare variable EGAIS_ALCCODE DM_TEXT1024;&lt;br /&gt;
    declare variable CAPACITY DM_DOUBLE;&lt;br /&gt;
    declare variable ALC_VOLUME DM_DOUBLE;&lt;br /&gt;
    declare variable EGAIS_PRODUCER_ID DM_TEXT1024;&lt;br /&gt;
    declare variable EGAIS_QUANT DM_DOUBLE;&lt;br /&gt;
    declare variable EGAIS_BARCODE DM_TEXT1024;&lt;br /&gt;
    declare variable EGAIS_TYPE DM_TEXT;&lt;br /&gt;
    declare variable PRODUCER_INN DM_TEXT1024;&lt;br /&gt;
    declare variable PRODUCER_KPP DM_TEXT1024;&lt;br /&gt;
    declare variable BOTTLINGDATE DM_DATETIME;&lt;br /&gt;
    declare variable EGAIS_PRODUCT_VCODE DM_TEXT;&lt;br /&gt;
    begin&lt;br /&gt;
    --whithout SUM_NDSR&lt;br /&gt;
    for&lt;br /&gt;
    select&lt;br /&gt;
    /*ware_id*/  sname,sizg,scountry,orig_code,sorig_name,sorig_izg,sorig_country,barcode,z_id,sklad_id,&lt;br /&gt;
    /*part_id*/  PRICE,PRICE_O,PRICE_Z,PRICE_R,QUANT,BARCODE1,/*KRITK,*/GODENDO,SERIA,NDS,SUM_NDSO,SERT,DATESERT,KEMVSERT,SDSERT,REGN,NGTD,EDIZM,&lt;br /&gt;
    PARENT_ID,DISCOUNT,SUMMA,summa_o, id, part_id, nac, doc_detail_id, motherpart_id, dep, bcode_izg, human_quant, SUM_DSC, dcard,&lt;br /&gt;
    part_type, BASE_AGENT_ID, group_id, make_id, mnn, motherpart_uuid,&lt;br /&gt;
    EGAIS_ID, EGAIS_BREGID, EGAIS_REGID, EGAIS_ALCCODE, CAPACITY, ALC_VOLUME, EGAIS_PRODUCER_ID, EGAIS_QUANT, EGAIS_BARCODE,&lt;br /&gt;
    EGAIS_TYPE, PRODUCER_INN, PRODUCER_KPP, BOTTLINGDATE, EGAIS_PRODUCT_VCODE&lt;br /&gt;
    from doc_detail_active where doc_id=:doc_id and part_parent_id=:doc_parent_id&lt;br /&gt;
    into&lt;br /&gt;
    :sname,:sizg,:scountry,:orig_code,:sorig_name,:sorig_izg,:sorig_country,:barcode,:z_id,:sklad_id,&lt;br /&gt;
    :PRICE,:PRICE_O,:PRICE_Z,:PRICE_R,:QUANT,:BARCODE1,/*:KRITK,*/:GODENDO,:SERIA,:NDS,:SUM_NDSO,:SERT,:DATESERT,:KEMVSERT,:SDSERT,:REGN,:NGTD,:EDIZM,&lt;br /&gt;
    :PARENT_ID,:DISCOUNT,:SUMMA,:summa_o, :active_id, :part_id, :nac, :doc_detail_id, :motherpart_id, :dep, :bcode_izg, :human_quant, :SUM_DSC, :dcard,&lt;br /&gt;
    :part_type, :BASE_AGENT_ID, :group_id,:make_id, :mnn, :motherpart_uuid,&lt;br /&gt;
    :EGAIS_ID, :EGAIS_BREGID, :EGAIS_REGID, :EGAIS_ALCCODE, :CAPACITY, :ALC_VOLUME, :EGAIS_PRODUCER_ID, :EGAIS_QUANT, :EGAIS_BARCODE,&lt;br /&gt;
    :EGAIS_TYPE, :PRODUCER_INN, :PRODUCER_KPP, :BOTTLINGDATE, :EGAIS_PRODUCT_VCODE&lt;br /&gt;
    do&lt;br /&gt;
    begin&lt;br /&gt;
    --    if ((price&amp;lt;0.001) or (price is null)) then exception EX_PRICE;&lt;br /&gt;
    if ((price&amp;lt;0) or (price is null)) then exception EX_PRICE;&lt;br /&gt;
    if (/*(price_o&amp;lt;0.001) or */(price_o is null)) then exception EX_PRICE_O;&lt;br /&gt;
    if (/*(quant&amp;lt;0.00001) or */(quant is null)) then exception EX_QUANT;&lt;br /&gt;
    if (/*(summa&amp;lt;0.00001) or */(summa is null)) then exception EX_SUMMA;&lt;br /&gt;
    if (/*(summa_o&amp;lt;0.00001) or */(summa_o is null)) then exception EX_SUMMA_O;&lt;br /&gt;
    --    if ((NDS&amp;lt;0.00001) or (NDS is null)) then exception EX_NDS;&lt;br /&gt;
    if (/*(SUM_NDSO&amp;lt;0) or */(SUM_NDSO is null)) then exception EX_SUM_NDSO;&lt;br /&gt;
    select w_id from pr_get_ware(:sname,:sizg,:scountry,:orig_code,:sorig_name,:sorig_izg,:sorig_country,:bcode_izg,:z_id,:sklad_id,:part_type,:mnn)&lt;br /&gt;
    into :ware_id;&lt;br /&gt;
    if ((part_id=0) or (part_id is NULL)) then&lt;br /&gt;
    select p_id from pr_new_part(:DOC_ID,:part_parent_id,:WARE_ID,:PRICE,:PRICE_O,:PRICE_Z,:PRICE_R,:QUANT,:BARCODE,:BARCODE1,:DEP,/*:KRITK,*/:GODENDO,:SERIA,:NDS,&lt;br /&gt;
    :SUM_NDSO,:SERT,:DATESERT,:KEMVSERT,:SDSERT,:REGN,:NGTD,:EDIZM,:NAC,:motherpart_id, :part_type,:BASE_AGENT_ID, :sklad_id, :contract_id, :active_id, :group_id,&lt;br /&gt;
    :motherpart_uuid, :EGAIS_ID, :EGAIS_REGID, :EGAIS_BREGID, :EGAIS_ALCCODE, :EGAIS_QUANT, :CAPACITY, :ALC_VOLUME, :EGAIS_PRODUCER_ID, :EGAIS_BARCODE,&lt;br /&gt;
    :EGAIS_TYPE, :PRODUCER_INN, :PRODUCER_KPP, :BOTTLINGDATE, :EGAIS_PRODUCT_VCODE) into :part_id;&lt;br /&gt;
    execute procedure PR_DOC_DETAIL_INSERT(:doc_detail_id,:DOC_ID,:PART_ID,:QUANT,:DISCOUNT,:SUMMA,:summa_o,:price,:sum_ndso,:nac,:doc_commitdate,:human_quant,:SUM_DSC,:dcard,:active_id,:part_type,:make_id);&lt;br /&gt;
    -- обновляем членство в группах&lt;br /&gt;
    execute procedure PR_UPDGROUPDETAIL_ACTIVE2PARTS(:active_id,:part_id);&lt;br /&gt;
    -- присваиваем ценам партии&lt;br /&gt;
    update prices set part_id=:part_id where dda_id=:active_id;&lt;br /&gt;
    update or insert into prices (part_id,price_type,currency_id, price,dda_id) values (:part_id,0,0,:price,:active_id) matching (PART_ID,PRICE_TYPE);&lt;br /&gt;
    execute procedure PR_DOC_PRIHOD_COMMIT_RECURSE(:doc_id,:active_id,:part_id,:doc_commitdate,:contract_id);&lt;br /&gt;
    end&lt;br /&gt;
    end;&lt;br /&gt;
&lt;br /&gt;
  ');&lt;br /&gt;
&lt;br /&gt;
else&lt;br /&gt;
&lt;br /&gt;
  EXECUTE STATEMENT ('&lt;br /&gt;
    create or alter procedure PR_DOC_PRIHOD_COMMIT_RECURSE (&lt;br /&gt;
        DOC_ID type of DM_ID,&lt;br /&gt;
        DOC_PARENT_ID type of DM_ID,&lt;br /&gt;
        PART_PARENT_ID type of DM_ID,&lt;br /&gt;
        DOC_COMMITDATE type of DM_DATE,&lt;br /&gt;
        CONTRACT_ID DM_ID)&lt;br /&gt;
    as&lt;br /&gt;
    declare variable PART_ID type of DM_ID;&lt;br /&gt;
    declare variable WARE_ID type of DM_UUID_NULL;&lt;br /&gt;
    declare variable SNAME type of DM_TEXT;&lt;br /&gt;
    declare variable SIZG type of DM_TEXT;&lt;br /&gt;
    declare variable SCOUNTRY type of DM_TEXT;&lt;br /&gt;
    declare variable ORIG_CODE type of DM_TEXT;&lt;br /&gt;
    declare variable SORIG_NAME type of DM_TEXT;&lt;br /&gt;
    declare variable SORIG_IZG type of DM_TEXT;&lt;br /&gt;
    declare variable SORIG_COUNTRY type of DM_TEXT;&lt;br /&gt;
    declare variable BARCODE type of DM_TEXT;&lt;br /&gt;
    declare variable Z_ID type of DM_ID;&lt;br /&gt;
    declare variable SKLAD_ID DM_TEXT;&lt;br /&gt;
    declare variable PRICE type of DM_DOUBLE;&lt;br /&gt;
    declare variable PRICE_O type of DM_DOUBLE;&lt;br /&gt;
    declare variable PRICE_Z type of DM_DOUBLE;&lt;br /&gt;
    declare variable PRICE_R type of DM_DOUBLE;&lt;br /&gt;
    declare variable QUANT type of DM_DOUBLE;&lt;br /&gt;
    declare variable BARCODE1 type of DM_TEXT;&lt;br /&gt;
    declare variable DEP type of DM_ID;&lt;br /&gt;
    declare variable KRITK type of DM_DOUBLE;&lt;br /&gt;
    declare variable GODENDO type of DM_DATETIME;&lt;br /&gt;
    declare variable SERIA type of DM_TEXT;&lt;br /&gt;
    declare variable NDS type of DM_DOUBLE;&lt;br /&gt;
    declare variable SUM_NDSO type of DM_DOUBLE;&lt;br /&gt;
    declare variable SUM_NDSR DM_DOUBLE;&lt;br /&gt;
    declare variable SERT type of DM_TEXT;&lt;br /&gt;
    declare variable DATESERT type of DM_DATETIME;&lt;br /&gt;
    declare variable KEMVSERT type of DM_TEXT;&lt;br /&gt;
    declare variable SDSERT type of DM_DATETIME;&lt;br /&gt;
    declare variable REGN type of DM_TEXT;&lt;br /&gt;
    declare variable NGTD type of DM_TEXT;&lt;br /&gt;
    declare variable EDIZM type of DM_TEXT;&lt;br /&gt;
    declare variable PARENT_ID type of DM_ID;&lt;br /&gt;
    declare variable SUMMA type of DM_DOUBLE;&lt;br /&gt;
    declare variable SUMMA_O type of DM_DOUBLE;&lt;br /&gt;
    declare variable DISCOUNT type of DM_DOUBLE;&lt;br /&gt;
    declare variable ACTIVE_ID type of DM_ID;&lt;br /&gt;
    declare variable NAC type of DM_DOUBLE;&lt;br /&gt;
    declare variable DOC_DETAIL_ID type of DM_ID;&lt;br /&gt;
    declare variable MOTHERPART_ID type of DM_ID;&lt;br /&gt;
    declare variable BCODE_IZG type of DM_TEXT;&lt;br /&gt;
    declare variable HUMAN_QUANT type of DM_TEXT;&lt;br /&gt;
    declare variable SUM_DSC type of DM_DOUBLE;&lt;br /&gt;
    declare variable DCARD type of DM_TEXT;&lt;br /&gt;
    declare variable PART_TYPE DM_STATUS;&lt;br /&gt;
    declare variable BASE_AGENT_ID DM_ID;&lt;br /&gt;
    declare variable GROUP_ID DM_ID;&lt;br /&gt;
    declare variable MAKE_ID DM_ID_NULL;&lt;br /&gt;
    declare variable MNN DM_TEXT;&lt;br /&gt;
    declare variable MOTHERPART_UUID DM_UUID_NULL;&lt;br /&gt;
    declare variable EGAIS_ID DM_TEXT;&lt;br /&gt;
    declare variable EGAIS_BREGID DM_TEXT1024;&lt;br /&gt;
    declare variable EGAIS_REGID DM_TEXT1024;&lt;br /&gt;
    declare variable EGAIS_ALCCODE DM_TEXT1024;&lt;br /&gt;
    declare variable CAPACITY DM_DOUBLE;&lt;br /&gt;
    declare variable ALC_VOLUME DM_DOUBLE;&lt;br /&gt;
    declare variable EGAIS_PRODUCER_ID DM_TEXT1024;&lt;br /&gt;
    declare variable EGAIS_QUANT DM_DOUBLE;&lt;br /&gt;
    declare variable EGAIS_BARCODE DM_TEXT1024;&lt;br /&gt;
    declare variable EGAIS_TYPE DM_TEXT;&lt;br /&gt;
    declare variable PRODUCER_INN DM_TEXT1024;&lt;br /&gt;
    declare variable PRODUCER_KPP DM_TEXT1024;&lt;br /&gt;
    declare variable BOTTLINGDATE DM_DATETIME;&lt;br /&gt;
    declare variable EGAIS_PRODUCT_VCODE DM_TEXT;&lt;br /&gt;
    begin&lt;br /&gt;
    --whith SUM_NDSR&lt;br /&gt;
    for&lt;br /&gt;
    select&lt;br /&gt;
    /*ware_id*/  sname,sizg,scountry,orig_code,sorig_name,sorig_izg,sorig_country,barcode,z_id,sklad_id,&lt;br /&gt;
    /*part_id*/  PRICE,PRICE_O,PRICE_Z,PRICE_R,QUANT,BARCODE1,/*KRITK,*/GODENDO,SERIA,NDS,SUM_NDSO,SUM_NDSR,SERT,DATESERT,KEMVSERT,SDSERT,REGN,NGTD,EDIZM,&lt;br /&gt;
    PARENT_ID,DISCOUNT,SUMMA,summa_o, id, part_id, nac, doc_detail_id, motherpart_id, dep, bcode_izg, human_quant, SUM_DSC, dcard,&lt;br /&gt;
    part_type, BASE_AGENT_ID, group_id, make_id, mnn, motherpart_uuid,&lt;br /&gt;
    EGAIS_ID, EGAIS_BREGID, EGAIS_REGID, EGAIS_ALCCODE, CAPACITY, ALC_VOLUME, EGAIS_PRODUCER_ID, EGAIS_QUANT, EGAIS_BARCODE,&lt;br /&gt;
    EGAIS_TYPE, PRODUCER_INN, PRODUCER_KPP, BOTTLINGDATE, EGAIS_PRODUCT_VCODE&lt;br /&gt;
    from doc_detail_active where doc_id=:doc_id and part_parent_id=:doc_parent_id&lt;br /&gt;
    into&lt;br /&gt;
    :sname,:sizg,:scountry,:orig_code,:sorig_name,:sorig_izg,:sorig_country,:barcode,:z_id,:sklad_id,&lt;br /&gt;
    :PRICE,:PRICE_O,:PRICE_Z,:PRICE_R,:QUANT,:BARCODE1,/*:KRITK,*/:GODENDO,:SERIA,:NDS,:SUM_NDSO,:SUM_NDSR,:SERT,:DATESERT,:KEMVSERT,:SDSERT,:REGN,:NGTD,:EDIZM,&lt;br /&gt;
    :PARENT_ID,:DISCOUNT,:SUMMA,:summa_o, :active_id, :part_id, :nac, :doc_detail_id, :motherpart_id, :dep, :bcode_izg, :human_quant, :SUM_DSC, :dcard,&lt;br /&gt;
    :part_type, :BASE_AGENT_ID, :group_id,:make_id, :mnn, :motherpart_uuid,&lt;br /&gt;
    :EGAIS_ID, :EGAIS_BREGID, :EGAIS_REGID, :EGAIS_ALCCODE, :CAPACITY, :ALC_VOLUME, :EGAIS_PRODUCER_ID, :EGAIS_QUANT, :EGAIS_BARCODE,&lt;br /&gt;
    :EGAIS_TYPE, :PRODUCER_INN, :PRODUCER_KPP, :BOTTLINGDATE, :EGAIS_PRODUCT_VCODE&lt;br /&gt;
    do&lt;br /&gt;
    begin&lt;br /&gt;
    --    if ((price&amp;lt;0.001) or (price is null)) then exception EX_PRICE;&lt;br /&gt;
    if ((price&amp;lt;0) or (price is null)) then exception EX_PRICE;&lt;br /&gt;
    if (/*(price_o&amp;lt;0.001) or */(price_o is null)) then exception EX_PRICE_O;&lt;br /&gt;
    if (/*(quant&amp;lt;0.00001) or */(quant is null)) then exception EX_QUANT;&lt;br /&gt;
    if (/*(summa&amp;lt;0.00001) or */(summa is null)) then exception EX_SUMMA;&lt;br /&gt;
    if (/*(summa_o&amp;lt;0.00001) or */(summa_o is null)) then exception EX_SUMMA_O;&lt;br /&gt;
    --    if ((NDS&amp;lt;0.00001) or (NDS is null)) then exception EX_NDS;&lt;br /&gt;
    if (/*(SUM_NDSO&amp;lt;0) or */(SUM_NDSO is null or SUM_NDSR is null )) then exception EX_SUM_NDSO;&lt;br /&gt;
    select w_id from pr_get_ware(:sname,:sizg,:scountry,:orig_code,:sorig_name,:sorig_izg,:sorig_country,:bcode_izg,:z_id,:sklad_id,:part_type,:mnn)&lt;br /&gt;
    into :ware_id;&lt;br /&gt;
    if ((part_id=0) or (part_id is NULL)) then&lt;br /&gt;
    select p_id from pr_new_part(:DOC_ID,:part_parent_id,:WARE_ID,:PRICE,:PRICE_O,:PRICE_Z,:PRICE_R,:QUANT,:BARCODE,:BARCODE1,:DEP,/*:KRITK,*/:GODENDO,:SERIA,:NDS,&lt;br /&gt;
    :SUM_NDSO,:SERT,:DATESERT,:KEMVSERT,:SDSERT,:REGN,:NGTD,:EDIZM,:NAC,:motherpart_id, :part_type,:BASE_AGENT_ID, :sklad_id, :contract_id, :active_id, :group_id,&lt;br /&gt;
    :motherpart_uuid, :EGAIS_ID, :EGAIS_REGID, :EGAIS_BREGID, :EGAIS_ALCCODE, :EGAIS_QUANT, :CAPACITY, :ALC_VOLUME, :EGAIS_PRODUCER_ID, :EGAIS_BARCODE,&lt;br /&gt;
    :EGAIS_TYPE, :PRODUCER_INN, :PRODUCER_KPP, :BOTTLINGDATE, :EGAIS_PRODUCT_VCODE) into :part_id;&lt;br /&gt;
    execute procedure PR_DOC_DETAIL_INSERT(:doc_detail_id,:DOC_ID,:PART_ID,:QUANT,:DISCOUNT,:SUMMA,:summa_o,:price,:sum_ndso,:sum_ndsr,:nac,:doc_commitdate,:human_quant,:SUM_DSC,:dcard,:active_id,:part_type,:make_id);&lt;br /&gt;
    -- обновляем членство в группах&lt;br /&gt;
    execute procedure PR_UPDGROUPDETAIL_ACTIVE2PARTS(:active_id,:part_id);&lt;br /&gt;
    -- присваиваем ценам партии&lt;br /&gt;
    update prices set part_id=:part_id where dda_id=:active_id;&lt;br /&gt;
    update or insert into prices (part_id,price_type,currency_id, price,dda_id) values (:part_id,0,0,:price,:active_id) matching (PART_ID,PRICE_TYPE);&lt;br /&gt;
    execute procedure PR_DOC_PRIHOD_COMMIT_RECURSE(:doc_id,:active_id,:part_id,:doc_commitdate,:contract_id);&lt;br /&gt;
    end&lt;br /&gt;
    end;&lt;br /&gt;
  ');&lt;br /&gt;
&lt;br /&gt;
end^&lt;br /&gt;
&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_INSTALL_COMMIT_RECURSE TO SYSDBA;^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_INSTALL_COMMIT_RECURSE;^&lt;br /&gt;
&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_GET_EGAIS_STATUS TO SYSDBA;^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','MOTHERPART_UUID','da.motherpart_uuid');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','EGAIS_ID','EGAIS_ID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','EGAIS_BREGID','EGAIS_BREGID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','EGAIS_REGID','EGAIS_REGID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','EGAIS_ALCCODE','EGAIS_ALCCODE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','CAPACITY','CAPACITY');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','ALC_VOLUME','ALC_VOLUME');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','EGAIS_PRODUCER_ID','EGAIS_PRODUCER_ID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','EGAIS_QUANT','EGAIS_QUANT');^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','MOTHERPART_UUID','p.motherpart_uuid');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','EGAIS_ID','p.EGAIS_ID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','EGAIS_BREGID','p.EGAIS_BREGID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','EGAIS_REGID','p.EGAIS_REGID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','EGAIS_ALCCODE','p.EGAIS_ALCCODE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','CAPACITY','p.CAPACITY');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','ALC_VOLUME','p.ALC_VOLUME');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','EGAIS_TTNID','d.EGAIS_ID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','EGAIS_QUANT','p.EGAIS_QUANT');^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_PARTS','EGAIS_ID','p.EGAIS_ID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_PARTS','EGAIS_BREGID','p.EGAIS_BREGID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_PARTS','EGAIS_REGID','p.EGAIS_REGID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_PARTS','EGAIS_ALCCODE','p.EGAIS_ALCCODE');^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOCS','EGAIS_NUM','docs.EGAIS_NUM');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOCS','EGAIS_ID','docs.EGAIS_ID');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOCS','EGAIS_UNITTYPE','docs.EGAIS_UNITTYPE');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOCS','EGAIS_STATUS','docs.EGAIS_STATUS');^&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_DOCS','EGAIS_STATUS_TEXT','(select out_text from PR_GET_EGAIS_STATUS(docs.EGAIS_STATUS))');^&lt;br /&gt;
&lt;br /&gt;
execute procedure PR_ALTER_VIEW('VW_AGENTS','EGAIS_ID','EGAIS_ID');^&lt;br /&gt;
&lt;br /&gt;
create or alter procedure PR_GET_ADDRESS_ID (&lt;br /&gt;
    COUNTRY_ID DM_ID_NULL,&lt;br /&gt;
    REGION_ID DM_ID_NULL,&lt;br /&gt;
    DESCRIPTION DM_TEXT_BIG)&lt;br /&gt;
returns (&lt;br /&gt;
    ID DM_ID_NULL)&lt;br /&gt;
as&lt;br /&gt;
begin&lt;br /&gt;
  if ((select id from addr_vals where id = :country_id) is null) then&lt;br /&gt;
    insert into addr_vals (id, vtype, svalue) values (:country_id, 0, :country_id);&lt;br /&gt;
  if ((select id from addr_vals where id = :region_id) is null) then&lt;br /&gt;
    insert into addr_vals (id, vtype, svalue) values (:region_id, 1, :region_id);&lt;br /&gt;
&lt;br /&gt;
  select id from addrs where country_id = :country_id and region_id = :region_id and addresstext = :description into :id;&lt;br /&gt;
  if (id is null) then&lt;br /&gt;
    insert into addrs (country_id, region_id, addresstext) values (:country_id, :region_id, :description) returning id into :id;&lt;br /&gt;
&lt;br /&gt;
  suspend;&lt;br /&gt;
end;^&lt;br /&gt;
&lt;br /&gt;
GRANT SELECT,INSERT ON ADDR_VALS TO PROCEDURE PR_GET_ADDRESS_ID;^&lt;br /&gt;
GRANT SELECT,INSERT ON ADDRS TO PROCEDURE PR_GET_ADDRESS_ID;^&lt;br /&gt;
&lt;br /&gt;
EXECUTE BLOCK AS BEGIN&lt;br /&gt;
if (not exists(select 1 from DOC_TYPES where ID = 40)) then&lt;br /&gt;
execute statement '&lt;br /&gt;
INSERT INTO DOC_TYPES (ID, CAPTION, INSERTDT, BASE_TYPE, STATINI, REPORTS, VTYPE)&lt;br /&gt;
               VALUES (40, ''ТТН ЕГАИС'', null, 1, ''[XML]&lt;br /&gt;
enabled=1&lt;br /&gt;
caption=Печать пакета документов прихода&lt;br /&gt;
tmplpath=prihod.xml&lt;br /&gt;
askbefore=1&lt;br /&gt;
&lt;br /&gt;
[freereport]&lt;br /&gt;
enabled=1&lt;br /&gt;
caption=Печать пакета документов прихода&lt;br /&gt;
tmplpath=prihod.cffr3&lt;br /&gt;
&lt;br /&gt;
[dbf]&lt;br /&gt;
inipath=dbf.ini&lt;br /&gt;
&lt;br /&gt;
[CSV]&lt;br /&gt;
inipath=dbf.ini&lt;br /&gt;
quotestrings=1&lt;br /&gt;
separator=#9&lt;br /&gt;
headers=1'', '' [XML]&lt;br /&gt;
enabled=1&lt;br /&gt;
caption=Печать пакета документов прихода&lt;br /&gt;
tmplpath=prihod.xml&lt;br /&gt;
askbefore=1&lt;br /&gt;
&lt;br /&gt;
[freereport]&lt;br /&gt;
enabled=1&lt;br /&gt;
caption=Печать пакета документов прихода&lt;br /&gt;
tmplpath=prihod.cffr&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;''''doc_id=:doc_id:'''';''''doc_detail=:doc_detail:'''''', 1);';&lt;br /&gt;
END^&lt;br /&gt;
&lt;br /&gt;
EXECUTE BLOCK AS BEGIN&lt;br /&gt;
if (not exists(select 1 from GROUPS where ID = -10)) then&lt;br /&gt;
execute statement '&lt;br /&gt;
INSERT INTO GROUPS (ID, PARENT_ID, CAPTION, GROUPTABLE, STATUS, INSERTDT, SYSTEMFLAG, DESCRIPTION, IMAGEINDEX, DATA, COLOR, SORTING, BASE_AGENT_ID)&lt;br /&gt;
            VALUES (-10, -4, ''ЕГАИС оптовики'', ''AGENTS'', 0, null, 1, NULL, -1, NULL, NULL, NULL, 0);&lt;br /&gt;
';&lt;br /&gt;
END^&lt;br /&gt;
&lt;br /&gt;
create or alter procedure PR_EDITCUSTOMDOC (&lt;br /&gt;
    DOC_ID type of DM_ID,&lt;br /&gt;
    SESSION_ID type of DM_ID,&lt;br /&gt;
    RGUID type of DM_RGUID)&lt;br /&gt;
returns (&lt;br /&gt;
    CUR_DOC_ID type of DM_ID)&lt;br /&gt;
as&lt;br /&gt;
declare variable VNUM type of DM_ID_NULL;&lt;br /&gt;
declare variable DOC_TYPE type of DM_ID;&lt;br /&gt;
declare variable DOC_BASE_TYPE type of DM_ID;&lt;br /&gt;
declare variable DOC_STATUS type of DM_STATUS;&lt;br /&gt;
declare variable DOC_AGENT_ID type of DM_ID;&lt;br /&gt;
declare variable DOCNUM type of DM_TEXT;&lt;br /&gt;
declare variable DOC_CAPTION type of DM_TEXT;&lt;br /&gt;
declare variable BASE_AGENT_ID integer;&lt;br /&gt;
declare variable DOCDATE type of DM_DATETIME;&lt;br /&gt;
declare variable EGAIS_NUM DM_TEXT;&lt;br /&gt;
declare variable EGAIS_ID DM_TEXT;&lt;br /&gt;
declare variable EGAIS_UNITTYPE DM_TEXT;&lt;br /&gt;
declare variable EGAIS_STATUS DM_STATUS;&lt;br /&gt;
begin&lt;br /&gt;
  select d.doc_type, d.status, dt.base_type, dt.caption, d.docnum, d.docdate, d.agent_id, d.vnum, d.base_agent_id, EGAIS_NUM, EGAIS_ID, EGAIS_UNITTYPE, EGAIS_STATUS from docs d left join doc_types dt on d.doc_type=dt.id where d.id=:doc_id&lt;br /&gt;
    into :doc_type, :doc_status, :doc_base_type, :doc_caption, :docnum, :docdate, :doc_AGENT_ID,:vnum, :BASE_AGENT_ID, :EGAIS_NUM, :EGAIS_ID, :EGAIS_UNITTYPE, :EGAIS_STATUS;&lt;br /&gt;
&lt;br /&gt;
  if (doc_type is null) then exception EX_CANTFINDDOC_ID;&lt;br /&gt;
  if (doc_status in (0,-2,2)) then exception EX_WRONGDOCSTATUS;&lt;br /&gt;
  if (doc_base_type=3) then exception EX_WRONGDOC_BASE_TYPE;&lt;br /&gt;
--  if (doc_agent_id &amp;lt;= 0) then exception EX_WRONG_AGENT;&lt;br /&gt;
  cur_doc_id=gen_id(gen_docs_id,1);&lt;br /&gt;
  insert into docs (ID,PARENT_ID,DOC_TYPE,STATUS,AGENT_ID,RGUID,AUDIT_ID,DOCNUM,DOCDATE,DELETED_DOC_ID, BASE_AGENT_ID, EGAIS_NUM, EGAIS_ID, EGAIS_UNITTYPE, EGAIS_STATUS)&lt;br /&gt;
    values (:cur_doc_id,0,:DOC_TYPE,0,:doc_AGENT_ID,:RGUID,:session_ID,:DOCNUM,:DOCDATE,:DOC_ID, :BASE_AGENT_ID, :EGAIS_NUM, :EGAIS_ID, :EGAIS_UNITTYPE, :EGAIS_STATUS);&lt;br /&gt;
  -- Обновление номера документа на старое значение&lt;br /&gt;
  UPDATE docs set vnum = :vnum, caption=:doc_caption || ' №' || :vnum  where id = :cur_doc_id;&lt;br /&gt;
&lt;br /&gt;
  if (doc_base_type=1) then --приход&lt;br /&gt;
  begin&lt;br /&gt;
   if (doc_status=1) then --&lt;br /&gt;
   begin&lt;br /&gt;
     insert into DOC_DETAIL_ACTIVE (doc_id,part_id,quant,summa,discount,koef,sum_dsc,sum_ndso,sum_ndsr)&lt;br /&gt;
       select :cur_doc_id,part_id,quant,summa,discount,0,sum_dsc,sum_ndso,sum_ndsr from doc_detail where doc_id=:doc_id;&lt;br /&gt;
     update DOC_DETAIL_ACTIVE dda set dda.part_id=iif((select count(*) from doc_detail where part_id = dda.part_id) &amp;gt; 1,dda.part_id,0) where dda.doc_id=:cur_doc_id;&lt;br /&gt;
   end&lt;br /&gt;
   else&lt;br /&gt;
   begin&lt;br /&gt;
     if (doc_status=-1) then&lt;br /&gt;
     begin&lt;br /&gt;
       insert into DOC_DETAIL_ACTIVE (doc_id,part_id,quant,summa,discount,koef,sum_dsc)&lt;br /&gt;
         select :cur_doc_id,part_id,quant,summa,discount,0,sum_dsc from doc_detail_deleted where doc_id=:doc_id;&lt;br /&gt;
       --update DOC_DETAIL_ACTIVE set part_id=0 where doc_id=:cur_doc_id;&lt;br /&gt;
       update DOC_DETAIL_ACTIVE dda set dda.part_id=iif((select count(*) from doc_detail where part_id = dda.part_id) &amp;gt; 1,dda.part_id,0) where dda.doc_id=:cur_doc_id;&lt;br /&gt;
     end &lt;br /&gt;
   end&lt;br /&gt;
  end&lt;br /&gt;
  else if ((doc_base_type=2) or (doc_base_type=7)) then  --расход&lt;br /&gt;
  begin&lt;br /&gt;
    if (doc_status=1) then&lt;br /&gt;
    begin&lt;br /&gt;
      insert into doc_detail_active (doc_id,part_id,quant,dcard,summa,summa_o,nac,discount,sum_ndso,sum_ndsr,koef,sum_dsc)&lt;br /&gt;
        select :cur_doc_id,part_id,quant,dcard,summa,summa_o,nac,discount,sum_ndso,sum_ndsr,1,sum_dsc from doc_detail where doc_id=:doc_id;&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
    begin&lt;br /&gt;
      if (doc_status=-1) then&lt;br /&gt;
      begin&lt;br /&gt;
        insert into doc_detail_active (doc_id,part_id,quant,dcard,summa,summa_o,nac,discount,sum_ndso,sum_ndsr,koef,sum_dsc)&lt;br /&gt;
          select :cur_doc_id,part_id,quant,dcard,summa,summa_o,nac,discount,sum_ndso,sum_ndsr,1,sum_dsc from doc_detail_deleted where doc_id=:doc_id;&lt;br /&gt;
      end&lt;br /&gt;
    end &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  suspend;&lt;br /&gt;
end;^&lt;br /&gt;
&lt;br /&gt;
set term ; ^&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Дополнения к ЕГАИС==&lt;br /&gt;
Если вы ставите версию менеджера 68 и выше, то нужно еще установить [[Скрипт дополнений к ЕГАИС]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Установка Этап 2 (выполняется для '''ПРОДУКТОВЫХ''' клиентов)=&lt;br /&gt;
&lt;br /&gt;
==В процедуре PR_DOC_COMMIT==&lt;br /&gt;
вставить строки после exception EX_WRONGDOC_BASE_TYPE на &lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
/* nicky edit */&lt;br /&gt;
if (exists (select * from docs d where d.id = :doc_id and d.doc_type in (3, 9))) then&lt;br /&gt;
  begin&lt;br /&gt;
    insert into egais_detail (doc_detail_id, egais_barcode, producer_inn, producer_kpp) select dd.id, dda.egais_barcode, dda.producer_inn, dda.producer_kpp&lt;br /&gt;
      from doc_detail dd join doc_detail_active dda on dd.doc_id = dda.doc_id and dd.part_id = dda.part_id&lt;br /&gt;
      join vw_warebase wb on dd.part_id = wb.part_id&lt;br /&gt;
      where dd.doc_id = :doc_id and (char_length(dda.EGAIS_BARCODE) &amp;gt; 0 or (wb.MMBSH containing '-21={') );&lt;br /&gt;
  end&lt;br /&gt;
/* nicky edit end*/&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==во VW_WAREBASE==&lt;br /&gt;
добавить EGAIS_PRODUCT_VCODE где источник p.EGAIS_PRODUCT_VCODE и в конце добавить left join parts p on wb.part_id = p.id&lt;br /&gt;
&lt;br /&gt;
==Исправить триггер DOC_DETAIL_ACTIVE_BI==&lt;br /&gt;
1) Комментируем строки стандартного приведения&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
/*if (new.ware_id&amp;lt;0) then&lt;br /&gt;
begin&lt;br /&gt;
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)&lt;br /&gt;
into new.sname, new.sizg,new.scountry;&lt;br /&gt;
end&lt;br /&gt;
*/&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) После условия &amp;lt;nowiki&amp;gt; if (new.part_id&amp;gt;0) then -- заполняем значения партии &amp;lt;/nowiki&amp;gt;, &lt;br /&gt;
дополняем выборку из таблицы PARTS полями&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
.....&lt;br /&gt;
motherpart_uuid,&lt;br /&gt;
EGAIS_ID,&lt;br /&gt;
EGAIS_REGID,&lt;br /&gt;
EGAIS_BREGID,&lt;br /&gt;
EGAIS_ALCCODE,&lt;br /&gt;
EGAIS_QUANT,&lt;br /&gt;
CAPACITY,&lt;br /&gt;
ALC_VOLUME,&lt;br /&gt;
EGAIS_BARCODE,&lt;br /&gt;
EGAIS_TYPE,&lt;br /&gt;
PRODUCER_INN,&lt;br /&gt;
PRODUCER_KPP,&lt;br /&gt;
BOTTLINGDATE,&lt;br /&gt;
EGAIS_PRODUCT_VCODE&lt;br /&gt;
from parts where id=new.part_id into&lt;br /&gt;
......&lt;br /&gt;
new.motherpart_uuid,&lt;br /&gt;
new.EGAIS_ID,&lt;br /&gt;
new.EGAIS_REGID,&lt;br /&gt;
new.EGAIS_BREGID,&lt;br /&gt;
new.EGAIS_ALCCODE,&lt;br /&gt;
new.EGAIS_QUANT,&lt;br /&gt;
new.CAPACITY,&lt;br /&gt;
new.ALC_VOLUME,&lt;br /&gt;
new.EGAIS_BARCODE,&lt;br /&gt;
new.EGAIS_TYPE,&lt;br /&gt;
new.PRODUCER_INN,&lt;br /&gt;
new.PRODUCER_KPP,&lt;br /&gt;
new.BOTTLINGDATE,&lt;br /&gt;
new.EGAIS_PRODUCT_VCODE;&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) В конце триггера пишем&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
--20160212 Приведение наименований для ЕГАИС, стандартное д.б. отключено&lt;br /&gt;
if ((select doc_type from docs where id = new.doc_id)=40) then&lt;br /&gt;
if ( (new.capacity is not null) and&lt;br /&gt;
     (new.bcode_izg is null or trim(new.bcode_izg) = '') and&lt;br /&gt;
     (select first 1 count(1) from warebase w left join parts p on p.id = w.part_id&lt;br /&gt;
          where (sname = new.sname or sorig_name = new.sname or sname = new.sorig_name or sorig_name = new.sorig_name) and&lt;br /&gt;
                (bcode_izg is not null and trim(bcode_izg) &amp;lt;&amp;gt; '') and&lt;br /&gt;
                (coalesce(p.capacity,0) = new.capacity) and&lt;br /&gt;
                (coalesce(p.egais_alccode,0) = coalesce(new.egais_alccode,0)) ) &amp;gt; 0&lt;br /&gt;
   )&lt;br /&gt;
  then&lt;br /&gt;
  begin&lt;br /&gt;
    select first 1 sname, name_id, bcode_izg, w.price from warebase w left join parts p on p.id = w.part_id&lt;br /&gt;
           where ( (sname = new.sname or sorig_name = new.sname or sname = new.sorig_name or sorig_name = new.sorig_name) and&lt;br /&gt;
                   (bcode_izg is not null and trim(bcode_izg) &amp;lt;&amp;gt; '') and&lt;br /&gt;
                   (coalesce(p.capacity,0) = new.capacity) and&lt;br /&gt;
                   (coalesce(p.egais_alccode,0) = coalesce(new.egais_alccode,0)) )&lt;br /&gt;
     into new.sname, new.name_id, new.bcode_izg, new.price;&lt;br /&gt;
     new.summa = new.price*new.quant;&lt;br /&gt;
     if (new.price_o&amp;lt;&amp;gt;0) then new.nac=(new.price-new.price_o)*100/new.price_o;&lt;br /&gt;
  End&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Новый метод редактирования штрихкодов==&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
CREATE UNIQUE INDEX WARES_IDX1 ON WARES (NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID,BARCODE);&lt;br /&gt;
CREATE INDEX WARES_LOG_IDX_INSERTDT ON WARES_LOG (INSERTDT);&lt;br /&gt;
&lt;br /&gt;
SET TERM ^ ;&lt;br /&gt;
&lt;br /&gt;
create or alter procedure PR_GET_WARE (&lt;br /&gt;
    SNAME type of DM_TEXT,&lt;br /&gt;
    SIZG type of DM_TEXT,&lt;br /&gt;
    SCOUNTRY type of DM_TEXT,&lt;br /&gt;
    ORIG_CODE type of DM_TEXT,&lt;br /&gt;
    SORIG_NAME type of DM_TEXT,&lt;br /&gt;
    SORIG_IZG type of DM_TEXT,&lt;br /&gt;
    SORIG_COUNTRY type of DM_TEXT,&lt;br /&gt;
    BARCODE type of DM_TEXT,&lt;br /&gt;
    Z_ID type of DM_ID,&lt;br /&gt;
    SKLAD_ID DM_TEXT,&lt;br /&gt;
    ALTTYPE DM_STATUS,&lt;br /&gt;
    MNN DM_TEXT = '')&lt;br /&gt;
returns (&lt;br /&gt;
    W_ID type of DM_ID)&lt;br /&gt;
as&lt;br /&gt;
declare variable OLD_BARCODE DM_TEXT1024;&lt;br /&gt;
declare variable NAME_ID type of DM_ID;&lt;br /&gt;
declare variable IZG_ID type of DM_ID;&lt;br /&gt;
declare variable COUNTRY_ID type of DM_ID;&lt;br /&gt;
declare variable ORIG_NAME_ID type of DM_ID;&lt;br /&gt;
declare variable ORIG_IZG_ID type of DM_ID;&lt;br /&gt;
declare variable ORIG_COUNTRY_ID type of DM_ID;&lt;br /&gt;
begin&lt;br /&gt;
if (orig_code is null) then orig_code='';&lt;br /&gt;
if (barcode is null) then barcode='';&lt;br /&gt;
select val_id from pr_getval_id(:sname,0,:alttype,:mnn) into :name_id;&lt;br /&gt;
select val_id from pr_getval_id(:sizg,3,:alttype) into :izg_id;&lt;br /&gt;
select val_id from pr_getval_id(:scountry,2,:alttype) into :country_id;&lt;br /&gt;
select val_id from pr_getval_id(:sorig_name,1,:alttype) into :orig_name_id;&lt;br /&gt;
select val_id from pr_getval_id(:sorig_izg,6,:alttype) into :orig_izg_id;&lt;br /&gt;
select val_id from pr_getval_id(:sorig_country,5,:alttype) into :orig_country_id;&lt;br /&gt;
select id from wares where NAME_ID=:name_id and IZG_ID=:izg_id and COUNTRY_ID=:country_id and&lt;br /&gt;
ORIG_CODE=:orig_code and ORIG_NAME_ID=:orig_name_id and&lt;br /&gt;
ORIG_IZG_ID=:orig_izg_id and ORIG_COUNTRY_ID=:orig_country_id and barcode=:barcode into :w_id;&lt;br /&gt;
if (w_id is null) then&lt;br /&gt;
begin&lt;br /&gt;
--    exception EX_WRONG_OPER;&lt;br /&gt;
w_id=gen_id(gen_wares_id,1);&lt;br /&gt;
--w_id=UUID_TO_CHAR(GEN_UUID());&lt;br /&gt;
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)&lt;br /&gt;
values&lt;br /&gt;
(:W_ID,:NAME_ID,:IZG_ID,:COUNTRY_ID,:ORIG_CODE,:ORIG_NAME_ID,:ORIG_IZG_ID,:ORIG_COUNTRY_ID,:BARCODE,:Z_ID,:SKLAD_ID);&lt;br /&gt;
end&lt;br /&gt;
--else if (old_barcode &amp;lt;&amp;gt; barcode) then update wares set barcode = :barcode where id = :w_id;&lt;br /&gt;
suspend;&lt;br /&gt;
end^&lt;br /&gt;
&lt;br /&gt;
SET TERM ; ^&lt;br /&gt;
&lt;br /&gt;
/* Following GRANT statetements are generated automatically */&lt;br /&gt;
&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_GETVAL_ID TO PROCEDURE PR_GET_WARE;&lt;br /&gt;
GRANT SELECT,INSERT ON WARES TO PROCEDURE PR_GET_WARE;&lt;br /&gt;
&lt;br /&gt;
/* Existing privileges on this procedure */&lt;br /&gt;
&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_GET_WARE TO PROCEDURE PR_DOC_PRIHOD_COMMIT_RECURSE;&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_GET_WARE TO &amp;quot;PUBLIC&amp;quot;;&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_GET_WARE TO STANDART;&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_GET_WARE TO SYSDBA;&lt;br /&gt;
&lt;br /&gt;
SET TERM ^ ;&lt;br /&gt;
&lt;br /&gt;
create or alter procedure PR_GETWARE_BY_IDS (&lt;br /&gt;
    NAME_ID type of DM_ID,&lt;br /&gt;
    IZG_ID type of DM_ID,&lt;br /&gt;
    COUNTRY_ID type of DM_ID,&lt;br /&gt;
    ORIG_CODE type of DM_TEXT,&lt;br /&gt;
    ORIG_NAME_ID type of DM_ID,&lt;br /&gt;
    ORIG_IZG_ID type of DM_ID,&lt;br /&gt;
    ORIG_COUNTRY_ID type of DM_ID,&lt;br /&gt;
    DOINSERT type of DM_STATUS,&lt;br /&gt;
    SEARCHINLOGS type of DM_STATUS,&lt;br /&gt;
    BARCODE DM_TEXT)&lt;br /&gt;
returns (&lt;br /&gt;
    WARE_ID type of DM_ID)&lt;br /&gt;
as&lt;br /&gt;
begin&lt;br /&gt;
  if (orig_code is null) then orig_code='';&lt;br /&gt;
  if (searchinlogs is null) then searchinlogs=0;&lt;br /&gt;
  if (searchinlogs=1) then&lt;br /&gt;
  begin &lt;br /&gt;
    select first 1 id from wares_log where name_id=:name_id and izg_id=:izg_id and country_id=:country_id and&lt;br /&gt;
      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&lt;br /&gt;
      and barcode=:barcode order by insertdt desc&lt;br /&gt;
      into :ware_id;&lt;br /&gt;
      if ((select id from wares where id = :ware_id) is null) then ware_id = null;&lt;br /&gt;
  end&lt;br /&gt;
  else&lt;br /&gt;
  begin&lt;br /&gt;
    select id from wares where name_id=:name_id and izg_id=:izg_id and country_id=:country_id and&lt;br /&gt;
      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&lt;br /&gt;
      and barcode=:barcode&lt;br /&gt;
      into :ware_id;&lt;br /&gt;
  end&lt;br /&gt;
  if ((ware_id is null) and (DOINSERT=1) and (searchinlogs&amp;lt;&amp;gt;1)) then&lt;br /&gt;
  begin&lt;br /&gt;
    ware_id=gen_id(gen_wares_id,1);&lt;br /&gt;
--    ware_id=UUID_TO_CHAR(GEN_UUID());&lt;br /&gt;
    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)&lt;br /&gt;
     values&lt;br /&gt;
       (:ware_id,:NAME_ID,:IZG_ID,:COUNTRY_ID,:ORIG_CODE,:ORIG_NAME_ID,:ORIG_IZG_ID,:ORIG_COUNTRY_ID,0,'',:barcode);&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  suspend;&lt;br /&gt;
end^&lt;br /&gt;
&lt;br /&gt;
SET TERM ; ^&lt;br /&gt;
&lt;br /&gt;
/* Following GRANT statetements are generated automatically */&lt;br /&gt;
&lt;br /&gt;
GRANT SELECT ON WARES_LOG TO PROCEDURE PR_GETWARE_BY_IDS;&lt;br /&gt;
GRANT SELECT,INSERT ON WARES TO PROCEDURE PR_GETWARE_BY_IDS;&lt;br /&gt;
&lt;br /&gt;
/* Existing privileges on this procedure */&lt;br /&gt;
&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_GETWARE_BY_IDS TO PROCEDURE PR_MAKEGOODWAREVALUES;&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_GETWARE_BY_IDS TO PROCEDURE PR_UPDATEWARE;&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_GETWARE_BY_IDS TO PROCEDURE PR_UPDATEWARE4PART;&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_GETWARE_BY_IDS TO STANDART;&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_GETWARE_BY_IDS TO SYSDBA;&lt;br /&gt;
&lt;br /&gt;
Update params p set p.param_value = '1' where p.param_id ='BCODE_IZG_EDIT_MODE';&lt;br /&gt;
&lt;br /&gt;
Update params p set p.param_value = 'Нет' where p.param_id ='ELNAKL_MAKE_LOCAL_GN';&lt;br /&gt;
Update params p set p.param_value = 'Нет' where p.param_id ='ELNAKL_MAKE_GLOBAL_GN';&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==установка журнала продажи алкоголя==&lt;br /&gt;
после выполнения скрипта расположенного ниже - поместить&lt;br /&gt;
в таблице REPORTS в отчёт - журнал продажи алкоголя в поле data содержимое файла otch_alko.txt из архива [[Медиа:Alko.zip]]&lt;br /&gt;
также в таблице groups поместить в поле data в строку Пиво содержимое файла groups_pivo.TXT из того же архива&lt;br /&gt;
и в строку Алкоголь файл groups_alko.TXT&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
CREATE OR ALTER VIEW VW_ALKO(&lt;br /&gt;
    ID,&lt;br /&gt;
    DOC_TYPE,&lt;br /&gt;
    CAPTION,&lt;br /&gt;
    DOCDATE,&lt;br /&gt;
    EGAIS_BARCODE,&lt;br /&gt;
    SNAME,&lt;br /&gt;
    ORIG_CODE,&lt;br /&gt;
    CAPACITY,&lt;br /&gt;
    QUANT)&lt;br /&gt;
AS&lt;br /&gt;
select d.id, d.doc_type, d.caption, d.docdate, ed.egais_barcode as egais_barcode, dd.sname, p.EGAIS_PRODUCT_VCODE, dd.capacity, iif(ed.egais_barcode='-',dd.quant,-1)&lt;br /&gt;
from egais_detail ed&lt;br /&gt;
left join vw_doc_detail dd on dd.id = ed.doc_detail_id&lt;br /&gt;
left join vw_docs d on d.id = dd.doc_id&lt;br /&gt;
left join parts p on dd.part_id = p.id&lt;br /&gt;
where d.doc_type = 3 or d.doc_type = 9&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
INSERT INTO REPORTS ( PARENT_ID, STATUS, REPORTTYPE, SORTING, CAPTION, PARAMS, WDICT_ID, DATA) VALUES ( 0, 0, 0, 0, 'Журнал продажи алкоголя', '', 25, NULL);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
INSERT INTO GROUPS (ID, PARENT_ID, CAPTION, GROUPTABLE, STATUS, INSERTDT, SYSTEMFLAG, DESCRIPTION, IMAGEINDEX, DATA, COLOR, SORTING, BASE_AGENT_ID, PACKET, SID) VALUES (-20, -8, 'Алкоголь', 'PARTS.NAME_ID', 0, '30-DEC-2015 14:41:25.011', 1, NULL, -1, NULL, 16777088, 8, 0, 6379, NULL);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
INSERT INTO GROUPS (ID, PARENT_ID, CAPTION, GROUPTABLE, STATUS, INSERTDT, SYSTEMFLAG, DESCRIPTION, IMAGEINDEX, DATA, COLOR, SORTING, BASE_AGENT_ID, PACKET, SID) VALUES (-21, -20, 'Пиво', 'PARTS.NAME_ID', 0, '30-DEC-2015 14:41:43.135', 1, NULL, -1, NULL, 516088, 8, 0, 6393, NULL);&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Склейка партий==&lt;br /&gt;
в менеджере ТМС перед авторизвацией пользователя изменить запрос ищущий партии для склейки на подобный(или добавить нужные поля вручную - объём, содержание спирта...)&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
Select  count(part_id),sname,base_agent_id,price, docagent,capacity, sum(quant) as quant&lt;br /&gt;
from VW_WAREBASE&lt;br /&gt;
      where quant &amp;lt;&amp;gt; 0&lt;br /&gt;
      group by sname,base_agent_id,price, docagent,capacity&lt;br /&gt;
      having count(part_id)&amp;gt;1&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ТМС проверки новых накладных от ЕГАИС==&lt;br /&gt;
ТМС - вспомогательные - добавить новую ТМС &amp;quot;Проверить накладные&amp;quot;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
uses                                                                                                            &lt;br /&gt;
  Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, Messages, SysUtils,&lt;br /&gt;
  ToolWin, ImgList, dxExEdtr, dxCntner, dxTL, dxDBCtrl, dxDBGrid, StdCtrls,&lt;br /&gt;
  unMain,DB, IBQuery, IBDatabase, unDM, DBTables, cfdxUtils, Menus, System,&lt;br /&gt;
  Buttons, ExtCtrls, StdCtrls, cfSelectEdit,need,&lt;br /&gt;
  gb_table, Grids, ClipBrd, DBGrids, unFrameCustomDict, cfWindows;&lt;br /&gt;
&lt;br /&gt;
var qWork: TIBQuery;&lt;br /&gt;
    tmRefresh: TTimer;&lt;br /&gt;
    m: TMemo;                                       &lt;br /&gt;
                                         &lt;br /&gt;
procedure ShowData;                                     &lt;br /&gt;
var docnum: string;&lt;br /&gt;
begin&lt;br /&gt;
  try&lt;br /&gt;
  qWork:=dm.TempQuery(nil);                    &lt;br /&gt;
  try&lt;br /&gt;
    //m.Clear;&lt;br /&gt;
    if qWork.Transaction.Active then qWork.Transaction.Rollback;&lt;br /&gt;
    qWork.Transaction.StartTransaction;&lt;br /&gt;
    qWork.Active:=false;&lt;br /&gt;
    qWork.SQL.Text:='select list(docnum) as docnum from docs where status=2 and doc_type = 40';&lt;br /&gt;
    qWork.Active:=true;&lt;br /&gt;
    docnum:=qWork.FieldByName('docnum').AsString;&lt;br /&gt;
    if trim(docnum)&amp;lt;&amp;gt;'' then&lt;br /&gt;
    begin&lt;br /&gt;
      m.Color:=$008080FF;&lt;br /&gt;
      frmManagerXP2.LogIt('Внимание, новые накладные ЕГАИС № '+trim(docnum)+#13#10+'Откройте отложенные документы из журнала.');&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
      m.Color:=clWhite;&lt;br /&gt;
  except                                                                                                        &lt;br /&gt;
  //  ShowMessage(GLEM);&lt;br /&gt;
  end;&lt;br /&gt;
  finally&lt;br /&gt;
    qWork.Free;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure tmRefreshTimer;&lt;br /&gt;
begin&lt;br /&gt;
   ShowData;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
 m:=frmManagerXP2.FindComponent('mmLog');&lt;br /&gt;
 //m.Font.Name:='Verdana';&lt;br /&gt;
 //m.Font.Color:=clBlack;&lt;br /&gt;
 //m.Color:=$008080FF;&lt;br /&gt;
 ShowData;&lt;br /&gt;
 tmRefresh:=TTimer.Create(application);&lt;br /&gt;
 tmRefresh.Interval:=10000;&lt;br /&gt;
 tmRefresh.OnTimer:='tmRefreshTimer';&lt;br /&gt;
end;&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Вызов ТМС проверки накладных==&lt;br /&gt;
ТМС - События - После авторизации пользователя. В коде ХХХ это номер ТМС, созданной в предыдущем пункте&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
uses&lt;br /&gt;
  Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, Messages, SysUtils,&lt;br /&gt;
  ToolWin, ImgList, dxExEdtr, dxCntner, dxTL, dxDBCtrl, dxDBGrid, StdCtrls,&lt;br /&gt;
  unMain,DB, IBQuery, IBDatabase, unDM, DBTables, cfdxUtils, Menus, System,&lt;br /&gt;
  Buttons, ExtCtrls, StdCtrls, cfSelectEdit,need,&lt;br /&gt;
  gb_table, Grids, ClipBrd, DBGrids, unFrameCustomDict, cfWindows, Unit1;  &lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  mainForm: TForm1;&lt;br /&gt;
begin&lt;br /&gt;
  frmManagerXp2.RunTms(ХХХ,application);&lt;br /&gt;
  if dm.IsReg = false then&lt;br /&gt;
   begin&lt;br /&gt;
    MainForm := TForm1.Create(Application);&lt;br /&gt;
    MainForm.ShowModal;&lt;br /&gt;
   end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Менеджера==&lt;br /&gt;
Перезапустить Менеджер:&lt;br /&gt;
 1. в сервис - параметры системы - Настройка ЕГАИС указать адрес сервера ЕГАИС и идентификатор;&lt;br /&gt;
 2. в сервис - параметры системы - автоматизация отключить &amp;quot;Приводить наименования к существующим&amp;quot; и &amp;quot;Приводить наименования через глобальный справочник&amp;quot; (!!!ТОЛЬКО ДЛЯ ПРОДУКТОВ!!!).&lt;br /&gt;
&lt;br /&gt;
==Сетки==&lt;br /&gt;
Прикрепленный файл  [[Файл:Сетки_ЕГАИС.zip]]&lt;br /&gt;
&lt;br /&gt;
==Проверить УТМ (универсальный транспортный модуль)==&lt;br /&gt;
Переходим по ссылке на web страницу УТМ, например http://egais:8080/, смотрим версию модуля, версия должна быть '''не ниже 2.0.1''', если ниже, это значит, что УТМ тестовый.&lt;br /&gt;
&lt;br /&gt;
[[Файл:ЕГАИС_версия_УТМ.png|Версия УТМ]]&lt;br /&gt;
&lt;br /&gt;
==Проверка==&lt;br /&gt;
Запустить Менеджер - Инструменты - ЕГАИС Менеджер - Настройки - Перепроверить идентификаторы всех ТТН. После этого нажать &amp;quot;Проверить ТТН&amp;quot;. Ошибок быть не должно&lt;br /&gt;
&lt;br /&gt;
[[Файл:Проверка_ИД_ТТН_ЕГАИС.png|Проверка существующих ТТН]]&lt;br /&gt;
&lt;br /&gt;
 Теги: ЕГАИС, УТМ, универсальный транспортный модуль&lt;br /&gt;
&lt;br /&gt;
=Модификация ЕГАИС для общепита=&lt;br /&gt;
Для организаций, реализующих алкоголь &amp;quot;на разлив&amp;quot;, по требованию законодательства, необходимо в журнале продажи алкоголя фиксировать факт вскрытия упаковки.&lt;br /&gt;
Данные отправлять в ЕГАИС не нужно, поэтому у таких клиентов на алкогольную продукцию стоит системная группа -21 &amp;quot;Пиво&amp;quot;.&lt;br /&gt;
Особенности заполнения журнала реализованы через процедуру PR_EGAIS_DETAIL_OBSHEPIT, которая вызывается при проведении документа, &lt;br /&gt;
полный скрипт [[Файл:Модификация_ЕГАИС_для_общепита.txt]] обновления прилагается.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Проблемы при продаже алкоголя=&lt;br /&gt;
при отбитии пивного чека бывает ошибка, где написано java и регулярное выражение, например {d+\10} ... и т.п.&amp;lt;br&amp;gt; &lt;br /&gt;
в конце этого сообщения пишется поле, которое не прошло проверку правильности данных. варианты:&amp;lt;br&amp;gt; &lt;br /&gt;
KP - неправильно указан КПП в параметрах системы &amp;lt;br&amp;gt; &lt;br /&gt;
IN - неправильно указан ИНН в параметрах системы&amp;lt;br&amp;gt; &lt;br /&gt;
EAN - неправильно указан шк изготовителя&amp;lt;br&amp;gt; &lt;br /&gt;
BK - неправильно просканирован акциз (скорей всего маленький квадратик вместо основного)&amp;lt;br&amp;gt;&lt;br /&gt;
значение Value  состоит только из цифр - не тот штрихкод отсканировали, на акцизе два штрихкода, один маленький, другой большой, пусть закроют пальцем маленький и сканируют большой, в нём должны быть цифры и латинские буквы!!! &amp;lt;br&amp;gt; пример ошибки&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
java.lang.IllegalArgumentException: org.xml.sax.SAXParseException; cvc-pattern-valid: Value '133-103995646074040516326020775185' is not facet-valid with respect to pattern '\d\d[a-zA-Z0-9]{21}\d[0-1]\d[0-3]\d{10}[a-zA-Z0-9]{31}' for type 'BK'&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
CODE - не указан код вида продукции egais_product_vcode&amp;lt;br&amp;gt; &lt;br /&gt;
скорее всего не заполнено поле EGAIS_PRODUCT_VCODE  - код вида продукции... значит товар был оприходован вручную, а не через ЕГАИС, надо заполнить соответсвенно справочника - в интернете легко найти - искать код вида продукции алкоголь&lt;br /&gt;
&lt;br /&gt;
* достаточно часто стала вылезать при продаже ошибка - не удалось отправить данные в ЕГАИС - скорее всего подвис модуль УТМ - лучший вариант перезагрузить компьютер с УТМ, либо попробовать службу рестартануть, но както не всегда она поднимается&lt;br /&gt;
* для заполнения кодов вида продукции удобно воспользоватся фильтром в менеджере&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
((wb.mmbsh like ('%-21=%')) or (wb.mmbsh like ('%-20=%')) ) and (trim(wb.egais_product_vcode) = '' or (wb.egais_product_vcode is null))&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
* если не отправляются запросы в егаис, и в ЕГАИС менеджере есть только отправка запроса, но нет ответов - надо перезапустить службу УТМ, подвисла, или перезагрузить компьютер с УТМ либо если не помогает можно посмотретьнастройки брэндмауэра на компьютере с УТМ&lt;br /&gt;
* если попросят добавить дату розлива в алкогольных магазинах, используем колонку DATESERT&lt;br /&gt;
&lt;br /&gt;
*если при проведении документа прихода алкоголя выходит ошибка &amp;quot;Conversion error from string &amp;quot;несколько цифр через запятую&amp;quot; At procedure 'PR_DOC_PRIHOD_COMMIT_RECURSE'...&amp;quot;&lt;br /&gt;
изменяем в процедурах PR_NEW_PART и PR_DOC_PRIHOD_COMMIT_RECURSE тип переменной egais_id на DM_TEXT&lt;br /&gt;
&lt;br /&gt;
*если в отчёт продажи алкоголя попадают товары не алкоголя&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
в процедуре PR_DOC_COMMIT&lt;br /&gt;
заменить строки после exception EX_WRONGDOC_BASE_TYPE на &lt;br /&gt;
/* nicky edit */&lt;br /&gt;
if (exists (select * from docs d where d.id = :doc_id and d.doc_type in (3, 9))) then&lt;br /&gt;
  begin&lt;br /&gt;
    insert into egais_detail (doc_detail_id, egais_barcode, producer_inn, producer_kpp) select dd.id, dda.egais_barcode, dda.producer_inn, dda.producer_kpp&lt;br /&gt;
      from doc_detail dd join doc_detail_active dda on dd.doc_id = dda.doc_id and dd.part_id = dda.part_id&lt;br /&gt;
      join vw_warebase wb on dd.part_id = wb.part_id&lt;br /&gt;
      where dd.doc_id = :doc_id and (char_length(dda.EGAIS_BARCODE) &amp;gt; 0 or (wb.MMBSH containing '-21={') );&lt;br /&gt;
  end&lt;br /&gt;
/* nicky edit end*/&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и выполнить скрипт очистки уже попавших товаров&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
delete from egais_detail ed1&lt;br /&gt;
where ed1.doc_detail_id in&lt;br /&gt;
(select dd.id&lt;br /&gt;
from egais_detail ed&lt;br /&gt;
left join vw_doc_detail dd on dd.id = ed.doc_detail_id&lt;br /&gt;
left join vw_docs d on d.id = dd.doc_id&lt;br /&gt;
left join vw_warebase wb on wb.part_id = dd.part_id&lt;br /&gt;
      where not(char_Length(ed.egais_barcode) &amp;gt; 1)&lt;br /&gt;
      and not ((dd.mmbsh like '%-21={%') or (dd.mmbsh like '%-20={%'))&lt;br /&gt;
      )&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Частые вопросы по ЕГАИС=&lt;br /&gt;
&lt;br /&gt;
==При отбитии чека выходит сообщение с ошибкой на английском==&lt;br /&gt;
В новых версиях кассира сделаны необходимые проверки при добавлении товара в чек, но на всякий случай приводим примеры ошибок от УТМ и что они означают. &lt;br /&gt;
* IN - ругается на ИНН, указанный в реквизитах предприятия&lt;br /&gt;
* KPP - ругается на КПП, указанный в реквизитах предприятия&lt;br /&gt;
* BK - ругается на двумерный штрихкод акциза&lt;br /&gt;
* CODE - у какой то позиции не проставлен код вида продукции&lt;br /&gt;
* EAN - проблема со штрихкодом производителя&lt;br /&gt;
* duplicate - каким то образом в чеке две позиции с одинаковым акцизом&lt;br /&gt;
* 50 или 51 - проблема в ккм с печатью qr кода&lt;br /&gt;
* ошибка отправки данных - утм не включен&lt;br /&gt;
&lt;br /&gt;
==Алкоголь при добавлении в чек не запрашивает акциз==&lt;br /&gt;
Проверьте, что на данной позиции стоит группа 20 Алкоголь. &lt;br /&gt;
&lt;br /&gt;
==При добавлении пива запрашивает акциз, а его нет==&lt;br /&gt;
Проверьте, что на данной позиции стоит группа 21 Алкоголь / Пиво, а не группа 20.&lt;br /&gt;
&lt;br /&gt;
==Нужно продать старую бутылку в обход ЕГАИС==&lt;br /&gt;
Нужно снять с нее группы 20 и 21.&lt;br /&gt;
&lt;br /&gt;
==У клиента в одной базе два предприятия: ИП и ООО. Какие реквизиты заполнять в реквизитах организации==&lt;br /&gt;
В параметрах нужно указывать реквизиты того предприятия, которое торгует алкоголем. Обычно это ООО. &lt;br /&gt;
&lt;br /&gt;
==Что делать если кассир выдает ошибку отправки данных в ЕГАИС без каких либо подробностей==&lt;br /&gt;
Скорей всего УТМ не включен. Проверьте УТМ набрав путь к нему в адресной строке браузера или нажмите проверить ттн в менеджере.&lt;br /&gt;
&lt;br /&gt;
==Что делать пытались пробить бутылку но не получилось и бутылку отдали не пробив по программе==&lt;br /&gt;
Чтобы выровнять остатки по прорамме, пусть пробивают чек, а акциз сканируют с другой такойже бутылки. если такой бутылки нет, пусть сканируют акциз с другой бутылки. &lt;br /&gt;
Адекватным клиентам, можно показать как сохранять акцизы в блокнот (но таких единицы). Конечно, сама ситуация неправильная, но это это лучший выход из нее. &lt;br /&gt;
Чтобы таких случаев не было, в есть различные проверки.&lt;br /&gt;
&lt;br /&gt;
==Что делать если на сайте ЕГАИС не совсем корректные остатки==&lt;br /&gt;
РАР будет использовать информацию об остатках при проверке деятельности магазинов только с 1.01.2017.&lt;br /&gt;
&lt;br /&gt;
==Будет ли работать ЕГАИС если нет интернета==&lt;br /&gt;
Если в точке нет интернета, егаис всеравно будет работать, данные будут сохраняться в утм, qr коды будут печататься, но если их отсканировать и перейти на сайт - там будет пусто. Главное чтобы утм была включена и работала. Когда интернет появится, утм сама синхронизируется с РАР. После этого данные появятся на сайте егаис. Без интернета можно работать 3 дня.&lt;br /&gt;
&lt;br /&gt;
==Что делать если в чеке над qr кодом пишется неверное название магазина==&lt;br /&gt;
В егаис при продаже нужно передавать название магазина. Кассир берет его из параметров системы, реквизиты организации, название торговой точки там может стоять ИП какое нибудь (их первое предприятие). Клиентов пугает, что у них выходит ИП вместо ООО. В качестве временного решения предлагаю менять реквизиты, перезапускаем кассира и печатает в чеках нормально, но потом у клиента эти реквизиты выходят в печатных формах и ценниках.&lt;br /&gt;
&lt;br /&gt;
==При продаже алкоголя ругается на штрихкода изготовителя==&lt;br /&gt;
Проверьте правильность штрихкода (с бутылки сканируется именно те цифры, какие записаны в программе). Если штрихкода в программе не забит и на бутылке его нет, вставьте локальный штрихкод.&lt;br /&gt;
&lt;br /&gt;
==Ошибка 50 или 51==&lt;br /&gt;
Если при продаже алкоголя выходит незавершенка и пишет ошибку 50 или 51 некорретные данные - это значит проблема не в отправке данных, а непосредственно при печати qr кода кассовым аппаратом. &lt;br /&gt;
Делаем проверку - в настройках оставляем галочку отправлять данные в егаис, но при этом ставим еще галочку не печатать qr код. Если чек выходит, значит проблема или с тем, что ккм не поддерживает печатать кодов или нужно объяснить прошивку. В крайнем случае оставляем все как есть и объясняем клиенту, что РАР разрешил на время переходного периода не печатать qr код если печатается ссылка, говорим что в ближайшее время исправим эту ситуацию и сообщаем о таких клиентах отделу внедрения.&amp;lt;br&amp;gt;&lt;br /&gt;
Ещё данная ошибка может быть с следующем случае - ККМ старая, перепрошита под ЕГАИС&amp;lt;br&amp;gt;&lt;br /&gt;
старые аппараты не могут печатать большие изображения&amp;lt;br&amp;gt;&lt;br /&gt;
в options.ini под нужным предприятием добавляем строки&amp;lt;br&amp;gt;&lt;br /&gt;
атол (быстро):&amp;lt;br&amp;gt;&lt;br /&gt;
1_QR_Height (100)&amp;lt;br&amp;gt;&lt;br /&gt;
1_QR_Scale (300)&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
атол (медленно):&amp;lt;br&amp;gt;&lt;br /&gt;
1_QRSlow_BmpScale (7)&amp;lt;br&amp;gt;&lt;br /&gt;
1_QRSlow_Scale (7)&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
штрих (быстро):&amp;lt;br&amp;gt;&lt;br /&gt;
2_QR_DotSize (7)&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
штрих (медленно):&amp;lt;br&amp;gt;&lt;br /&gt;
2_QRSlow_BmpScale (7)&amp;lt;br&amp;gt;&lt;br /&gt;
быстро - средствами ККМ, медленно - как графический объект&lt;br /&gt;
&lt;br /&gt;
==Почему в чеке несколько бутылок с алкоголем, а qr код распечатался один==&lt;br /&gt;
1 чек - 1 qr код. Если перейти по ссылке, то отобразится информация по всем позициям в чеке.&lt;br /&gt;
&lt;br /&gt;
==Должны ли печататься qr коды при продаже пива==&lt;br /&gt;
РАР отменил пивные чеки, т.е. непосредственно при продаже информация в егаис не уходит. В конце дня нужно делать &amp;quot;акт списания из торгового зала со второго регистра&amp;quot; из менеджера, в котором будут все эти продажи.&lt;br /&gt;
&lt;br /&gt;
==Как отпускать алкоголь в общепитах==&lt;br /&gt;
От общепита РАР требует только данные по приходу ТТН. Непосредственно при продаже в ЕГАИС ничего отправлять не нужно. Нужно только вести журнал по алкоголю.&lt;br /&gt;
&lt;br /&gt;
==Как сделать возврат поставщику по ЕГАИС==&lt;br /&gt;
Открыть журнал документов, встать на проведеннный приход по ттн, нажать на кнопку &amp;quot;сделать возврат&amp;quot; на панели, где находятся и другие кнопки, относящиеся к ЕГАИС. Затем проставить нужное количество и отправить. Не пытайтесь вручную создать расходный документ &amp;quot;возврат по ЕГАИС&amp;quot;, добавить в него позиции и провести - это неправильно. &lt;br /&gt;
&lt;br /&gt;
==Где можно посмотреть какой запрос был отправлен в ЕГАИС==&lt;br /&gt;
Таблица EGAIS_REQUESTS. Тело запроса будет в колонке QUERY_DATA, а ответ в REPLY_DATA.&lt;br /&gt;
&lt;br /&gt;
==Почему клиент сканирует QR код, переходит на сайт, а там пусто==&lt;br /&gt;
Обычно данные появляются на сайте в течении 5 минут после продажи, но могут быть задержки. Я лично был свидетелем, когда после покупки в Красном и Белом данные появились только через полчаса.&lt;br /&gt;
&lt;br /&gt;
==Почему на сайте в информации о чеке неверно отображается дата чека==&lt;br /&gt;
Проблема решается обновлением версии кассира.&lt;br /&gt;
&lt;br /&gt;
==Что делать если акт на самом деле принят, но в журнале документов отображается, что не принят?==&lt;br /&gt;
В начальных версиях егаис-менеджера была ошибка, что если по ТТН отправляют повторный акт по уже принятой накладной и УТМ по этому запросу возвращает отрицательный ответ (т.к. ттн уже подтверждена), то менеджер меняет в базе статус с принятого на отклонён. Это можно исправить спомощью процедуры: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SET TERM ^ ;&lt;br /&gt;
&lt;br /&gt;
create or alter procedure PR_CHECK_TTN_ACCEPTED&lt;br /&gt;
returns (&lt;br /&gt;
    DOC_ID_OUT bigint)&lt;br /&gt;
as&lt;br /&gt;
declare variable DOC_ID DM_ID;&lt;br /&gt;
declare variable EGAIS_ID DM_UUID;&lt;br /&gt;
declare variable C DM_STATUS;&lt;br /&gt;
begin&lt;br /&gt;
 for select D.ID,&lt;br /&gt;
            D.EGAIS_ID&lt;br /&gt;
     from DOCS D&lt;br /&gt;
     where D.DOC_TYPE = 40&lt;br /&gt;
           and D.EGAIS_STATUS = 2&lt;br /&gt;
     into :DOC_ID,&lt;br /&gt;
          :EGAIS_ID&lt;br /&gt;
 do&lt;br /&gt;
 begin&lt;br /&gt;
  C = 0;&lt;br /&gt;
  select first 1 count(*)&lt;br /&gt;
  from EGAIS_REQUESTS R&lt;br /&gt;
  where 1 = 1&lt;br /&gt;
        and R.EGAIS_ID = :EGAIS_ID&lt;br /&gt;
        and R.REPLY_DATA containing '&amp;lt;tc:Conclusion&amp;gt;Accepted&amp;lt;/tc:Conclusion&amp;gt;'&lt;br /&gt;
  into C;&lt;br /&gt;
  if (C &amp;gt; 0) then&lt;br /&gt;
  begin&lt;br /&gt;
   select :DOC_ID&lt;br /&gt;
   from RDB$DATABASE&lt;br /&gt;
   into :DOC_ID_OUT;&lt;br /&gt;
   update DOCS D&lt;br /&gt;
   set D.EGAIS_STATUS = 1&lt;br /&gt;
   where D.ID = :DOC_ID;&lt;br /&gt;
   suspend;&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
end^&lt;br /&gt;
&lt;br /&gt;
SET TERM ; ^&lt;br /&gt;
&lt;br /&gt;
/* Following GRANT statetements are generated automatically */&lt;br /&gt;
&lt;br /&gt;
GRANT SELECT,UPDATE ON DOCS TO PROCEDURE PR_CHECK_TTN_ACCEPTED;&lt;br /&gt;
GRANT SELECT ON EGAIS_REQUESTS TO PROCEDURE PR_CHECK_TTN_ACCEPTED;&lt;br /&gt;
&lt;br /&gt;
/* Existing privileges on this procedure */&lt;br /&gt;
&lt;br /&gt;
GRANT EXECUTE ON PROCEDURE PR_CHECK_TTN_ACCEPTED TO SYSDBA;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Если каким то образом получилось, что в егаис накладная принята, но в базе нет данных запросов и она там неподтверждена, то ее можно подтвердить вручную спомощью запроса: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
update docs d set d.egais_status=1 where d.doc_id=:doc_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Ошибка при принятии накладной: &amp;quot;Не удалось найти ЕГАИС идентификатор ТТН. Принятие отменено.&amp;quot;==&lt;br /&gt;
[[Файл:ЕГАИС_ошибка_при_принятии_накладной.png]]&lt;br /&gt;
&lt;br /&gt;
Заходим во входящие запросы, выполняем &amp;quot;запросить данные&amp;quot;. Находим строку, на которую ругается ЕГАИС, например, с нужным нам [[Waybill/2701]], и удаляем эту строку. &lt;br /&gt;
После чего заходим в личный кабинет ЕГАИС и заново запрашиваем накладную&lt;br /&gt;
&lt;br /&gt;
==Что делать с зависшими накладными==&lt;br /&gt;
Если на ТТН уже пришел акт подтверждения, а в модуле ЕГАИС они по прежнему висят, то нужно сделать следующее. В таблице EGAIS_REQUESTS нужно отфильтровать ТТН по статусу. У зависших накладных статус будет 0 или null. Далее у этих ТТН нужно поменять статус на 1.&lt;/div&gt;</summary>
		<author><name>Ilsiya</name></author>	</entry>

	<entry>
		<id>http://wiki.standart-n.ru/index.php/%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85</id>
		<title>Оптимизация базы данных</title>
		<link rel="alternate" type="text/html" href="http://wiki.standart-n.ru/index.php/%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85"/>
				<updated>2017-01-20T05:18:15Z</updated>
		
		<summary type="html">&lt;p&gt;Ilsiya: /* Резервирование\Восстановление базы данных */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В случае, когда база значительно увеличилась в размерах и превысила 1,5-2 Гб, следует провести оптимизацию данных.&lt;br /&gt;
&lt;br /&gt;
==Создаем файловую копию базы данных==&lt;br /&gt;
&lt;br /&gt;
Просим всех пользователей выйти из программы!&lt;br /&gt;
&lt;br /&gt;
*Отключаем службу '''Firebird Server Manager''': Пуск/Панель управления, режим просмотра: &amp;quot;Мелкие значки&amp;quot;.&lt;br /&gt;
[[Файл:Оптимизация_бд_отключение_firebird.jpg|center|Отключение Firebird]]&lt;br /&gt;
&lt;br /&gt;
*Создаем файловую копию базы данных ZTRADE.FBD. ZTRADE.FDB переименовываем в ZTRADE_orig, и работаем с файловой копией. Для удобства работы с ней переименуем, добавив в название дату:&lt;br /&gt;
[[Файл:Оптимизация_бд_файловая_копия_бд.jpg|center|Файловая копия бд]]&lt;br /&gt;
&lt;br /&gt;
*Включаем службу '''Firebird Server Manager''':&lt;br /&gt;
[[Файл:Оптимизация_бд_включение_firebird.jpg|center|Включение Firebird]]&lt;br /&gt;
&lt;br /&gt;
==Заходим в программу IBExpert, создаем подключение к копии базы данных==&lt;br /&gt;
* Заходим в меню «База данных»(Database) - «Зарегистрировать базу»(Register Database), &lt;br /&gt;
* В  открывшемся окне  указываем Имя Сервера(Server name)   на котором лежит база данных,  &lt;br /&gt;
* В окне Версия сервера(Server Version) выбираем  Firebird 2.5,&lt;br /&gt;
* Файл базы данных(Database File) по иконке с папкой выбираем путь к нашей базой данных,&lt;br /&gt;
* Пользователь(User name) - прописываем SYSDBA,&lt;br /&gt;
* Пароль(Password) – masterkey,&lt;br /&gt;
* Кодировка(Charset) выставляем WIN1251.&lt;br /&gt;
[[Файл:Оптимизация_бд_регистрация_базы_данных.jpg|center|Регистрация бд]]&lt;br /&gt;
&lt;br /&gt;
==Создаем бэкап базы данных==&lt;br /&gt;
Для создания бэкапа выбираем '''«Службы»(Services)''' - '''«Резервирование базы данных»(Backup Database'''):&lt;br /&gt;
[[Файл:Оптимизация_бд_бэкап_базы_данных.jpg|center|Бэкап бд]]&lt;br /&gt;
*В появившемся окне, в поле ''Имя файла(File Name)'', встает путь к базе по умолчанию , например: «С:\Standart-N\base\ztrade_20150106.fbk».&lt;br /&gt;
*Отключите галочку Сборка мусора(Garbage Collection)  и нажимайте кнопку «Начать резервное копирование»(Start Backup).&lt;br /&gt;
&lt;br /&gt;
При успешном завершении бэкапа окно будет выглядеть следующим образом:&lt;br /&gt;
[[Файл:Оптимизация_бд_успешное_завершение_бэкапа.jpg|center|Бэкап бд]]&lt;br /&gt;
&lt;br /&gt;
==Просмотр системных таблиц==&lt;br /&gt;
*Заходим в меню «База данных»(Databas) - «Регистрационная информация базы …»(Database Registration Info …). &lt;br /&gt;
*В открывшемся окне «Параметры базы данных»  в левой панели выбираем в пункте «Дополнительно»(Additional) подменю «Эксплорер БД»(DB Explorer).&lt;br /&gt;
*Справа отобразится несколько пунктов и нам нужно будет выбрать и установить галку  «Показывать системные  таблицы»(Show System Tables), после чего нажимаем кнопку «Ок».&lt;br /&gt;
[[Файл:Оптимизация_бд_показывать_системные_таблицы.jpg|center|Системные таблицы]]&lt;br /&gt;
*Дальше нам необходимо в левой панели «Database Explorer» два раза кликнуть по нашей базе, так чтобы мы увидели дерево данных в следующем виде: &lt;br /&gt;
[[Файл:Оптимизация_бд_дерево_данных.jpg|center|Дерево данных]]&lt;br /&gt;
&lt;br /&gt;
==Отключение логирования==&lt;br /&gt;
Заходим  в меню  '''«Инструменты»(Tools)''' - '''«Менеджер протоколов данных»(Log Manager)''',&lt;br /&gt;
Должно открыться окно, но может выйти окно с ошибкой:&lt;br /&gt;
[[Файл:Оптимизация_бд_ошибка_при_открытии_менеджере_протоколов_данных.jpg|center|Ошибка]] &lt;br /&gt;
Не пугайтесь, просто нажимайте кнопку «Ок» , она ни на что не влияет.Если  она у Вас появилась, то заодно закройте окно «Менеджер протоколов данных» и заново откройте.&lt;br /&gt;
&lt;br /&gt;
В этом окне находим одноименную кнопку '''«Менеджер протоколов данных» (Log Manager)''' и выбираем пункт '''«Отменить протоколирование для всех таблиц»(Unprepare all tables)'''. У нас должны сняться все отметки, после чего мы нажимаем кнопку с молнией  [[Файл:Оптимизация_бд_кнопка_компиляции.jpg|Компиляция]] или  F9.. После чего должно появиться окно '''«Updating  logging triggers…»''' , в котором необходимо нажать кнопку '''«Подтвердить»(Commit)'''. Таким образом мы отключили с вами логирование базы данных.&lt;br /&gt;
&lt;br /&gt;
==Очистка и удаление таблиц==&lt;br /&gt;
Слева в окне мы видим дерево данных, самой нижней строкой стоит пункт «Системные таблицы», подсвеченный красным цветом. &lt;br /&gt;
&lt;br /&gt;
Раскрываем плюсик и видим первые четыре таблицы, их нам с Вами нужно удалить, последовательно встаем на них мышью и правой кнопкой мыши выбираем пункт '''«Удалить таблицу …»(Drop table …).''' :&lt;br /&gt;
*IBE$LOG_BLOB_FIELDS;&lt;br /&gt;
*IBE$LOG_FIELDS; &lt;br /&gt;
*IBE$LOG_KEYS&lt;br /&gt;
*IBE$LOG_TABLES.&lt;br /&gt;
&lt;br /&gt;
После того как мы удалили все четыре таблицы, в этом же дереве раскрываем пункт «Генераторы»  и удаляем последнюю строку в этом пункте, также выделенную красным цветом:&lt;br /&gt;
*IBE$LOG_TABLES_GEN&lt;br /&gt;
&lt;br /&gt;
Удаляем также правой кнопкой мыши.&lt;br /&gt;
&lt;br /&gt;
Мы удали все необходимые системные таблицы , теперь нам необходимо '''очистить''' таблицы с логами .Также по плюсу раскрываем пункт «Таблицы», и последовательно чистим следующие таблицы:&lt;br /&gt;
*ANALYTIC_DOC_DETAIL_1&lt;br /&gt;
*ANALYTIC_DOC_DETAIL_2&lt;br /&gt;
*ANALYTIC_DOC_DETAIL_3&lt;br /&gt;
...&lt;br /&gt;
Т.е все таблицы имеющие в своем название «ANALYTIC_DOC_DETAIL»&lt;br /&gt;
*ANALYTIC_FALSIFICAT&lt;br /&gt;
*ANALYTIC_GNVLS&lt;br /&gt;
*ANALYTIC_MIN_ASSORT&lt;br /&gt;
*ANALYTIC_PRICE&lt;br /&gt;
*DOCS_LOG&lt;br /&gt;
*DOC_DETAIL_ACTIVE_LOG&lt;br /&gt;
*DOC_DETAIL_LOG&lt;br /&gt;
*PARTS_LOG&lt;br /&gt;
*TMP_LOG&lt;br /&gt;
'''Ни в коем случае НЕ трогаем таблицу WARES_LOG'''&lt;br /&gt;
&lt;br /&gt;
Очистку этих таблиц будем осуществлять следующим образом:&lt;br /&gt;
Двойным щелчком мыши по вышеперечисленной таблице, так чтобы она у нас открылась . Затем ищем меню «Таблица»(Table) и выбираем пункт «Очистить таблицу»(Empty table) .&lt;br /&gt;
[[Файл: Оптимизация_бд_очистка_таблицы.jpg|center| Очистка таблицы]]&lt;br /&gt;
Затем у Нас появляется окно «Подтверждение» , и мы подтверждаем свои намерения:&lt;br /&gt;
[[Файл: Оптимизация_бд_подтверждение_очистки_таблицы.jpg|center|Подтверждение очистки таблицы]]&lt;br /&gt;
&lt;br /&gt;
==Резервирование\Восстановление базы данных==&lt;br /&gt;
&lt;br /&gt;
После того как очистили таблицы, необходимо снова сделать резервирование данных, а потом восстановление, для этого идем в меню «Службы»(Services) и создаем резервную копию нашей почищенной базы данных ( «Резервирование базы данных»(Backup database)), при этом не забываем отключить флажок  Сборка мусора(Garbage Collection)  и нажимаем кнопку «Начать резервное копирование»(Start Backup).&lt;br /&gt;
&lt;br /&gt;
Ждем окончание процесса создания бэкапа, затем нам необходимо восстановить нашу базу данных из этой резервной копии, для этого в том же меню «Службы» (Services)  выбираем пункт «Восстановление базы данных»(Restore Database).&lt;br /&gt;
&lt;br /&gt;
В открывшемся окне с помощью кнопки [[Файл: Оптимизация_бд_кнопка_выбрать_бэкап_для_восстановления.jpg|Кнопка выбрать бэкап]]  нам нужно выбрать бэкап , который мы только что создали. &lt;br /&gt;
Окно должно выглядеть  следующим образом:&lt;br /&gt;
[[Файл: Оптимизация_восстановление_базы_данных.jpg|center|Восстановление базы данных]]&lt;br /&gt;
После окончания процесса создастся новая база ZTRADE_NEW.FDB, переименовываем ее в ZTRADE.FDB.&lt;br /&gt;
&lt;br /&gt;
В общем все, готово! Проверьте размер базы данных, она должна значительно уменьшиться в размерах. После чего можете сообщить пользователям,  что уже можно работать в программе!&lt;/div&gt;</summary>
		<author><name>Ilsiya</name></author>	</entry>

	</feed>