Обновление базы для маркировки ЛС — различия между версиями
Материал из wiki.standart-n.ru
Avo (обсуждение | вклад) (→Дополнительно обновить процедуры) |
Agk (обсуждение | вклад) (→Инструкции) |
||
| (не показаны 44 промежуточные версии 4 участников) | |||
| Строка 1: | Строка 1: | ||
==Заменить версию Менеджера== | ==Заменить версию Менеджера== | ||
Заменить '''ManagerXP2.exe''' на версию '''274_47_8''' от июля 2020 г. или более новую. | Заменить '''ManagerXP2.exe''' на версию '''274_47_8''' от июля 2020 г. или более новую. | ||
| + | |||
| + | НЕ ОБНОВЛЯТЬ ТРИГГЕРЫ, ЕСЛИ 2 ПРЕДПРИЯТИЯ!!! | ||
==Выполняем скрипт== | ==Выполняем скрипт== | ||
<pre> | <pre> | ||
| + | |||
| + | ALTER TABLE DOCS ADD DOC_TREB_ID DM_ID_NULL; | ||
| + | ALTER TABLE DOCS ADD FIRST_AGENT_ID DM_ID_NULL; | ||
| + | ALTER TABLE PARAMS ADD CONSTRAINT UNQ1_PARAMS UNIQUE (PARAM_ID); | ||
| + | ALTER TABLE DOCS_TREB ADD G$PROFILE_ID DM_ID; | ||
| + | ALTER TABLE DOCS_TREB ADD FIRST_AGENT DM_ID; | ||
| + | ALTER TABLE PARTS ADD D$UUID DM_UUID_NULL; | ||
| + | ALTER TABLE DOC_DETAIL_ACTIVE_TREB ADD TO_PROFILE_ID DM_ID; | ||
| + | ALTER TABLE DOC_DETAIL_ACTIVE_TREB ADD MOTHERPART_UUID DM_UUID_NULL; | ||
| + | ALTER TABLE DOCS_CANCELED ADD D$UUID DM_UUID_NULL; | ||
| + | ALTER TABLE DOCS_CANCELED ADD D$SRVUPDDT DM_DATETIME; | ||
| + | ALTER TABLE DOCS ADD D$UUID DM_UUID_NULL; | ||
| + | ALTER TABLE DOCS ADD D$SRVUPDDT DM_DATETIME; | ||
| + | ALTER TABLE DOC_DETAIL_ACTIVE_CANCELED ADD MOTHERPART_UUID DM_UUID_NULL; | ||
| + | ALTER TABLE DOCS_TREB ADD AGENT_PLACE DM_TEXT | ||
| + | |||
| + | |||
SET TERM ^ ; | SET TERM ^ ; | ||
| − | create or alter procedure | + | |
| − | + | create or alter procedure GM$PR_PRIHOD_DOC_TREB ( | |
| − | + | DOC_ID integer) | |
as | as | ||
| + | declare variable DOC_TYPE DM_STATUS; | ||
| + | declare variable AGENT_ID DM_ID_NULL; | ||
| + | declare variable G$PROFILE_ID DM_ID_NULL; | ||
| + | declare variable DOC_COMMITDATE DM_DATE; | ||
| + | declare variable DOC_UUID DM_ID_NULL; | ||
| + | declare variable TO_PROFILE_ID DM_ID_NULL; | ||
| + | declare variable FIRST_AGENT_ID DM_ID_NULL; | ||
| + | declare variable CODE_PROFILE DM_TEXT; | ||
begin | begin | ||
| − | INSERT INTO | + | select doc_type, agent_id, cast(commitdate as dm_date) |
| − | + | from docs where id=:doc_id into :doc_type, :agent_id, :doc_commitdate; | |
| − | + | if (doc_type not in (6,11)) then exit; | |
| − | + | ||
| − | from | + | --select gp.id from G$PROFILES gp where gp.agent_id=:agent_id into :g$profile_id; |
| + | select (select N from GET_INTEGER(email)) from agents where id=:agent_id into :to_profile_id; | ||
| + | select (select N from GET_INTEGER(p.param_value)) from params p where p.param_id='CODE_PROFILE' into :g$profile_id; | ||
| + | if (g$profile_id is null or to_profile_id is null) then exit; | ||
| + | |||
| + | DOC_TYPE=40; -- приход поставщика будет документ на точке | ||
| + | |||
| + | --Сохраняем контрагента в переменной FIRST_AGENT_ID если есть необходимо расскомментировтаь | ||
| + | select FIRST_AGENT_ID from docs where id=:doc_id into :FIRST_AGENT_ID; | ||
| + | if (FIRST_AGENT_ID is null) then FIRST_AGENT_ID = (select id from agents where email=(select p.param_value from params p where p.param_id='CODE_PROFILE')); | ||
| + | |||
| + | --Если нужно получить на конечной точке приход перемещеним раскомментировать данный функционал | ||
| + | /* Берем код профиля у контрагента, если он наш, то меняем тип документа отправляемого на точку*/ | ||
| + | /*select coalesce(a.email,0) from agents a where a.id=:FIRST_AGENT_ID into :CODE_PROFILE; | ||
| + | if (((CHARACTER_LENGTH(CODE_PROFILE)=1) or (CHARACTER_LENGTH(CODE_PROFILE)=2) or (CHARACTER_LENGTH(CODE_PROFILE)=3)) and (CODE_PROFILE<>'0')) then | ||
| + | DOC_TYPE=41;-- приход перемещением будет документ на точке*/ | ||
| + | |||
| + | --27/05/2020 AVO Добавлено полуение ID первоначального контрагента | ||
| + | INSERT INTO DOCS_TREB (ID,PARENT_ID, DOC_TYPE, STATUS, AGENT_ID, DOCNUM, DOCDATE, | ||
| + | RGUID, INSERTDT, POSTDT, AUDIT_ID, VNUM, VSHIFT, CREATER, OWNER, COMMITDATE, | ||
| + | DEVICE_NUM, SUMMA, SUMMA_O, SUM_NDSO, CALCSUMMA, COMMENTS, SUMM1, SUMM2, SUMM3, SUMM4, | ||
| + | CHECKDATA, COMMITSESSION_ID, SUM_DSC, CASHDATA, PRICE_TYPE, CURRENCY_ID, BASE_AGENT_ID, | ||
| + | CONTRACT_ID, G$PROFILE_ID, LINK_ID, DELETED_DOC_ID,TO_PROFILE_ID,/*27/05/2020 add AVO*/FIRST_AGENT, | ||
| + | /*04/09/2020 add AVO*/AGENT_PLACE) | ||
| + | select ID,PARENT_ID,:doc_type, 1 as STATUS, AGENT_ID, DOCNUM, DOCDATE, | ||
| + | RGUID, INSERTDT, POSTDT, AUDIT_ID, VNUM, VSHIFT, CREATER, OWNER, COMMITDATE, | ||
| + | DEVICE_NUM, SUMMA, SUMMA_O, SUM_NDSO, CALCSUMMA, COMMENTS, SUMM1, SUMM2, SUMM3, SUMM4, | ||
| + | CHECKDATA, COMMITSESSION_ID, SUM_DSC, CASHDATA, PRICE_TYPE, CURRENCY_ID, BASE_AGENT_ID, | ||
| + | CONTRACT_ID, :g$profile_id as G$PROFILE_ID, LINK_ID, DELETED_DOC_ID,:to_profile_id as TO_PROFILE_ID, | ||
| + | /*27/05/2020 add AVO*/:first_agent_id as first_agent_id,/*04/09/2020 add AVO*/AGENT_PLACE | ||
| + | from docs where id=:doc_id | ||
| + | returning id into :doc_uuid; | ||
| + | |||
| + | INSERT INTO DOC_DETAIL_ACTIVE_TREB | ||
| + | (ID,PARENT_ID, PART_ID, PRICE,PRICE_O, QUANT, DISCOUNT, SUMMA, | ||
| + | SUMMA_O, DCARD, INSERTDT, SUM_NDSO, NAC, HUMAN_QUANT, SUM_DSC, | ||
| + | PART_TYPE, BASE_AGENT_ID, G$PROFILE_ID, TO_PROFILE_ID, | ||
| + | STATUS, DOC_ID, SNAME, SUM_NDSR, ORIG_CODE, SKLAD_ID, | ||
| + | BARCODE1, BCODE_IZG,BARCODE, PRICE_Z, PRICE_R, SERIA, NDS, SERT, DATESERT, KEMVSERT,SDSERT, | ||
| + | GODENDO, REGN, NGTD, EDIZM, SIZG, SCOUNTRY, DEP, GNVLS, SORIG_NAME,SORIG_IZG,SORIG_COUNTRY,MNN, | ||
| + | WARE_ID,NAME_ID,IZG_ID,COUNTRY_ID,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID,MOTHERPART_UUID, | ||
| + | -- 23/07/2020 AVO Добавлены поля для передачи по маркировке | ||
| + | MARKING,GTIN_SUBJ,ACCEPTTYPE,DATEPROD) | ||
| + | select | ||
| + | dd.ID,0, 0, p.PRICE,p.PRICE_O, -1*(dd.QUANT), dd.DISCOUNT, -1*(dd.SUMMA), | ||
| + | -1*(dd.SUMMA_O),dd.DCARD, dd.INSERTDT, -1*(dd.SUM_NDSO), p.NAC, dd.HUMAN_QUANT, | ||
| + | dd.SUM_DSC,p.PART_TYPE, 0, :g$profile_id, :to_profile_id, | ||
| + | 0, :doc_uuid, vn.svalue, dd.SUM_NDSR, w.ORIG_CODE, p.SKLAD_ID, | ||
| + | p.BARCODE1, w.barcode,p.BARCODE, p.PRICE_Z, p.PRICE_R, p.SERIA, p.NDS, p.SERT, p.DATESERT, p.KEMVSERT, | ||
| + | p.SDSERT, p.GODENDO, p.REGN, p.NGTD, p.EDIZM, vi.svalue, vc.svalue,p.DEP, | ||
| + | '',--AVO 04/12/2020 отключил, слишком много групп и падало на них, группы ходят по синхронизации | ||
| + | --(select membership from PR_MEMBERSHIPS('PARTS=' || part_id || ';PARTS.NAME_ID=' || name_id ||';',ascii_char(13)||ascii_char(10),1)), | ||
| + | '','','','',p.WARE_ID,w.NAME_ID,w.IZG_ID,w.COUNTRY_ID, | ||
| + | w.ORIG_NAME_ID,w.ORIG_IZG_ID,w.ORIG_COUNTRY_ID,p.d$uuid,MARKING,GTIN_SUBJ,ACCEPTTYPE,DATEPROD | ||
| + | from doc_detail dd | ||
| + | left join parts p on p.id=dd.part_id | ||
| + | left join wares w on w.id=p.ware_id | ||
| + | left join vals vn on vn.id=w.name_id | ||
| + | left join vals vi on vi.id=w.izg_id | ||
| + | left join vals vc on vc.id=w.country_id | ||
| + | where dd.doc_id=:doc_id; | ||
end^ | end^ | ||
SET TERM ; ^ | SET TERM ; ^ | ||
| + | |||
| + | /* Следующие операторы GRANT сгенерированы автоматически */ | ||
| + | |||
| + | GRANT SELECT ON DOCS TO PROCEDURE GM$PR_PRIHOD_DOC_TREB; | ||
| + | GRANT EXECUTE ON PROCEDURE GET_INTEGER TO PROCEDURE GM$PR_PRIHOD_DOC_TREB; | ||
| + | GRANT SELECT ON AGENTS TO PROCEDURE GM$PR_PRIHOD_DOC_TREB; | ||
| + | GRANT SELECT ON PARAMS TO PROCEDURE GM$PR_PRIHOD_DOC_TREB; | ||
| + | GRANT INSERT ON DOCS_TREB TO PROCEDURE GM$PR_PRIHOD_DOC_TREB; | ||
| + | GRANT INSERT ON DOC_DETAIL_ACTIVE_TREB TO PROCEDURE GM$PR_PRIHOD_DOC_TREB; | ||
| + | GRANT SELECT ON DOC_DETAIL TO PROCEDURE GM$PR_PRIHOD_DOC_TREB; | ||
| + | GRANT SELECT ON PARTS TO PROCEDURE GM$PR_PRIHOD_DOC_TREB; | ||
| + | GRANT SELECT ON WARES TO PROCEDURE GM$PR_PRIHOD_DOC_TREB; | ||
| + | GRANT SELECT ON VALS TO PROCEDURE GM$PR_PRIHOD_DOC_TREB; | ||
| + | |||
| + | /* Существующие привилегии на эту процедуру */ | ||
| + | |||
| + | GRANT EXECUTE ON PROCEDURE GM$PR_PRIHOD_DOC_TREB TO PROCEDURE PR_DOC_RASHOD_COMMIT; | ||
| + | GRANT EXECUTE ON PROCEDURE GM$PR_PRIHOD_DOC_TREB TO PROCEDURE PR_ENAKL_PRIHOD_DOC_TREB_RESEND; | ||
| + | GRANT EXECUTE ON PROCEDURE GM$PR_PRIHOD_DOC_TREB TO SYSDBA; | ||
SET TERM ^ ; | SET TERM ^ ; | ||
| − | create or alter procedure | + | |
| − | DOC_ID | + | create or alter procedure PR_UPDATEMARKBYPART ( |
| − | + | DOC_ID DM_ID, | |
| − | + | PART_ID DM_ID, | |
| − | + | ACTIVE_ID DM_ID) | |
| − | + | ||
| − | + | ||
as | as | ||
| − | |||
| − | |||
| − | |||
begin | begin | ||
| − | + | --Если не переоценка то | |
| − | + | --Обновляем партию привязанную к SGTIN | |
| − | + | if ((select D.DOC_TYPE | |
| − | + | from DOCS D | |
| − | + | where D.ID = :DOC_ID) not in (8,58)) then | |
| − | + | ||
| − | + | ||
| − | select | + | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
begin | begin | ||
| − | + | update MARK_DETAIL | |
| − | + | set PART_ID = :PART_ID | |
| − | update | + | where DDA_ID = :ACTIVE_ID; |
| − | set | + | |
| − | + | ||
| − | where | + | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
end | end | ||
else | else | ||
| − | + | -- При переоценки вставляем записи в mark_detail | |
| − | + | begin | |
| − | + | insert into MARK_DETAIL (DOC_ID, PART_ID, MARK_DATA, QUANT, DOCNUM, DOC_DATE, DDA_ID, PLACE_ID_IN, PLACE_ID_OUT, | |
| − | + | GTIN, SERIES_NUMBER, EXPIRATION_DATE, ACTIVEPOS, SERIA, KIZ, SSCC, ACCEPTED, MDLP_STATUS, | |
| − | + | ERRORTEXT) | |
| − | + | select :DOC_ID, :PART_ID, MARK_DATA, -QUANT, DOCNUM, DOC_DATE, DDA_ID, PLACE_ID_IN, PLACE_ID_OUT, GTIN, | |
| − | + | SERIES_NUMBER, EXPIRATION_DATE, 1, SERIA, KIZ, SSCC, ACCEPTED, 1, '' | |
| − | + | from MARK_DETAIL MD | |
| − | + | where MD.DDA_ID = :ACTIVE_ID; | |
| − | + | end | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
suspend; | suspend; | ||
end^ | end^ | ||
| + | |||
SET TERM ; ^ | SET TERM ; ^ | ||
| + | |||
| + | |||
| + | |||
| + | /* Следующие операторы GRANT сгенерированы автоматически */ | ||
| + | |||
| + | GRANT SELECT ON DOCS TO PROCEDURE PR_UPDATEMARKBYPART; | ||
| + | GRANT SELECT,INSERT,UPDATE ON MARK_DETAIL TO PROCEDURE PR_UPDATEMARKBYPART; | ||
| + | |||
| + | /* Существующие привилегии на эту процедуру */ | ||
| + | |||
| + | GRANT EXECUTE ON PROCEDURE PR_UPDATEMARKBYPART TO PROCEDURE PR_DOC_PRIHOD_COMMIT_RECURSE; | ||
| + | GRANT EXECUTE ON PROCEDURE PR_UPDATEMARKBYPART TO SYSDBA; | ||
| + | |||
| + | SET TERM ^ ; | ||
| + | create or alter procedure PR_COPY_MARK_DETAIL ( | ||
| + | DOC_ID_IN integer, | ||
| + | DOC_ID_OUT integer) | ||
| + | as | ||
| + | begin | ||
| + | INSERT INTO MARK_DETAIL (DOC_ID, PART_ID, MARK_DATA, QUANT, COMMITDATE, INSERTDT, DOCNUM, DOC_DATE, DDA_ID, | ||
| + | PLACE_ID_IN, PLACE_ID_OUT, GTIN, SERIES_NUMBER, EXPIRATION_DATE, ACTIVEPOS, SERIA, KIZ, SSCC, ACCEPTED) | ||
| + | select :DOC_ID_OUT, PART_ID, MARK_DATA, -QUANT, COMMITDATE, INSERTDT, DOCNUM, DOC_DATE,(select first 1 id from doc_detail_active dd where dd.doc_id=:doc_id_out and dd.part_id=md.part_id), | ||
| + | PLACE_ID_IN, PLACE_ID_OUT, GTIN, SERIES_NUMBER, EXPIRATION_DATE, 2, SERIA, KIZ, SSCC, ACCEPTED | ||
| + | from MARK_DETAIL md where doc_id = :DOC_ID_IN ; | ||
| + | end^ | ||
| + | |||
| + | SET TERM ; ^ | ||
| + | |||
| + | |||
SET TERM ^ ; | SET TERM ^ ; | ||
| Строка 188: | Строка 230: | ||
new.marking=0; | new.marking=0; | ||
| − | if (exists (select 1 from group_detail gd where gd.group_id=-43 and gd.grouptable='PARTS' and gd.grouptable_id=new.part_id)) then | + | if (exists (select 1 from group_detail gd where gd.group_id=-43 and gd.grouptable='PARTS' and gd.grouptable_id=cast(new.part_id as dm_text))) then |
new.marking=1; | new.marking=1; | ||
| Строка 198: | Строка 240: | ||
SET TERM ; ^ | SET TERM ; ^ | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
SET SQL DIALECT 3; | SET SQL DIALECT 3; | ||
| Строка 219: | Строка 253: | ||
AS | AS | ||
begin | begin | ||
| + | /*add avo 16/12/2020 and d.id>0*/ | ||
if ((new.grouptable='DOC_DETAIL_ACTIVE')) then | if ((new.grouptable='DOC_DETAIL_ACTIVE')) then | ||
begin | begin | ||
| Строка 228: | Строка 263: | ||
dd.marking=1, | dd.marking=1, | ||
dd.base_agent_id=-10, | dd.base_agent_id=-10, | ||
| − | dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) order by d.id desc ) | + | dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) and d.id>0 order by d.id desc ) |
where dd.id=new.grouptable_id; | where dd.id=new.grouptable_id; | ||
--03/09/2020 смотрим на параметр и в зависимости от него снимаем/ставим предприятие и ставку НДС новую | --03/09/2020 смотрим на параметр и в зависимости от него снимаем/ставим предприятие и ставку НДС новую | ||
| Строка 240: | Строка 275: | ||
update doc_detail_active dd set | update doc_detail_active dd set | ||
dd.marking=1, | dd.marking=1, | ||
| − | dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) order by d.id desc ) | + | dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) and d.id>0 order by d.id desc ) |
where dd.id=new.grouptable_id; | where dd.id=new.grouptable_id; | ||
else | else | ||
| Строка 255: | Строка 290: | ||
dd.marking=1, | dd.marking=1, | ||
dd.base_agent_id=-10, | dd.base_agent_id=-10, | ||
| − | dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) order by d.id desc ) | + | dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) and d.id>0 order by d.id desc ) |
where dd.part_id=new.grouptable_id; | where dd.part_id=new.grouptable_id; | ||
--03/09/2020 смотрим на параметр и в зависимости от него снимаем/ставим предприятие и ставку НДС новую | --03/09/2020 смотрим на параметр и в зависимости от него снимаем/ставим предприятие и ставку НДС новую | ||
| Строка 267: | Строка 302: | ||
update doc_detail_active dd set | update doc_detail_active dd set | ||
dd.marking=1, | dd.marking=1, | ||
| − | dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) order by d.id desc ) | + | dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) and d.id>0 order by d.id desc ) |
where dd.part_id=new.grouptable_id; | where dd.part_id=new.grouptable_id; | ||
else | else | ||
| Строка 279: | Строка 314: | ||
SET TERM ; ^ | SET TERM ; ^ | ||
| − | + | DROP TRIGGER GROUP_DETAIL_AIU0; | |
| + | DROP TRIGGER GROUP_DETAIL_AD0; | ||
SET TERM ^ ; | SET TERM ^ ; | ||
| Строка 289: | Строка 325: | ||
AS | AS | ||
begin | begin | ||
| + | /*add avo 16/12/2020 and d.id>0*/ | ||
if ((old.grouptable='DOC_DETAIL_ACTIVE')) then | if ((old.grouptable='DOC_DETAIL_ACTIVE')) then | ||
begin | begin | ||
| Строка 296: | Строка 333: | ||
if (((select PARAM_VALUE from PR_GETPARAMVALUE('NEW_MARK_TWOFIRM',0))=1) and ((select PARAM_VALUE from PR_GETPARAMVALUE('MARKING_NDS',0))=1)) then | if (((select PARAM_VALUE from PR_GETPARAMVALUE('NEW_MARK_TWOFIRM',0))=1) and ((select PARAM_VALUE from PR_GETPARAMVALUE('MARKING_NDS',0))=1)) then | ||
update doc_detail_active dd set | update doc_detail_active dd set | ||
| − | + | dd.marking=0, | |
dd.base_agent_id=0, | dd.base_agent_id=0, | ||
| − | dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) order by d.id ) | + | dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) and d.id>0 order by d.id ) |
where dd.id=old.grouptable_id; | where dd.id=old.grouptable_id; | ||
else if ((select PARAM_VALUE from PR_GETPARAMVALUE('NEW_MARK_TWOFIRM',0))=1) then | else if ((select PARAM_VALUE from PR_GETPARAMVALUE('NEW_MARK_TWOFIRM',0))=1) then | ||
update doc_detail_active dd set | update doc_detail_active dd set | ||
| − | + | dd.marking=0, | |
dd.base_agent_id=0 | dd.base_agent_id=0 | ||
where dd.id=old.grouptable_id; | where dd.id=old.grouptable_id; | ||
else if ((select PARAM_VALUE from PR_GETPARAMVALUE('MARKING_NDS',0))=1) then | else if ((select PARAM_VALUE from PR_GETPARAMVALUE('MARKING_NDS',0))=1) then | ||
update doc_detail_active dd set | update doc_detail_active dd set | ||
| − | + | dd.marking=0, | |
| − | dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) order by d.id ) | + | dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) and d.id>0 order by d.id ) |
where dd.id=old.grouptable_id; | where dd.id=old.grouptable_id; | ||
| − | + | else | |
| − | update doc_detail_active dd set dd.marking=0 where dd.id=old.grouptable_id and dd.marking<>0; | + | update doc_detail_active dd set dd.marking=0 where dd.id=old.grouptable_id and dd.marking<>0; |
end | end | ||
end | end | ||
| Строка 321: | Строка 358: | ||
if (((select PARAM_VALUE from PR_GETPARAMVALUE('NEW_MARK_TWOFIRM',0))=1) and ((select PARAM_VALUE from PR_GETPARAMVALUE('MARKING_NDS',0))=1)) then | if (((select PARAM_VALUE from PR_GETPARAMVALUE('NEW_MARK_TWOFIRM',0))=1) and ((select PARAM_VALUE from PR_GETPARAMVALUE('MARKING_NDS',0))=1)) then | ||
update doc_detail_active dd set | update doc_detail_active dd set | ||
| − | + | dd.marking=0, | |
dd.base_agent_id=0, | dd.base_agent_id=0, | ||
| − | dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) order by d.id ) | + | dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) and d.id>0 order by d.id ) |
| − | where dd. | + | where dd.part_id=old.grouptable_id; |
else if ((select PARAM_VALUE from PR_GETPARAMVALUE('NEW_MARK_TWOFIRM',0))=1) then | else if ((select PARAM_VALUE from PR_GETPARAMVALUE('NEW_MARK_TWOFIRM',0))=1) then | ||
update doc_detail_active dd set | update doc_detail_active dd set | ||
| − | + | dd.marking=0, | |
dd.base_agent_id=0 | dd.base_agent_id=0 | ||
| − | where dd. | + | where dd.part_id=old.grouptable_id; |
else if ((select PARAM_VALUE from PR_GETPARAMVALUE('MARKING_NDS',0))=1) then | else if ((select PARAM_VALUE from PR_GETPARAMVALUE('MARKING_NDS',0))=1) then | ||
update doc_detail_active dd set | update doc_detail_active dd set | ||
| − | + | dd.marking=0, | |
| − | dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) order by d.id ) | + | dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) and d.id>0 order by d.id ) |
| − | where dd. | + | where dd.part_id=old.grouptable_id; |
| − | + | else | |
| − | update doc_detail_active dd set dd.marking=0 where dd. | + | update doc_detail_active dd set dd.marking=0 where dd.part_id=old.grouptable_id and dd.marking<>0; |
end | end | ||
end | end | ||
| Строка 344: | Строка 381: | ||
SET TERM ; ^ | SET TERM ; ^ | ||
| + | |||
| + | |||
| + | SET SQL DIALECT 3; | ||
| + | |||
| Строка 363: | Строка 404: | ||
exit; | exit; | ||
--Проверяем есть ли группа, если есть уже - выходим | --Проверяем есть ли группа, если есть уже - выходим | ||
| − | if (((select count(id) from GROUP_DETAIL where GROUP_ID =-43 and GROUPTABLE='DOC_DETAIL_ACTIVE' and GROUPTABLE_ID=new.id)>0) OR | + | if (((select count(id) from GROUP_DETAIL where GROUP_ID =-43 and GROUPTABLE='DOC_DETAIL_ACTIVE' and GROUPTABLE_ID=cast(new.id as dm_text))>0) OR |
| − | ((select count(id) from GROUP_DETAIL where GROUP_ID =-43 and GROUPTABLE='PARTS' and GROUPTABLE_ID=new.part_id)>0)) then | + | ((select count(id) from GROUP_DETAIL where GROUP_ID =-43 and GROUPTABLE='PARTS' and GROUPTABLE_ID=cast(new.part_id as dm_text))>0)) then |
exit; | exit; | ||
| − | if ((not exists(select id from GROUP_DETAIL where GROUP_ID=-43 and GROUPTABLE_ID=new.id and GROUPTABLE='DOC_DETAIL_ACTIVE'))) then | + | if ((not exists(select id from GROUP_DETAIL where GROUP_ID=-43 and GROUPTABLE_ID=cast(new.id as dm_text) and GROUPTABLE='DOC_DETAIL_ACTIVE'))) then |
UPDATE OR INSERT INTO GROUP_DETAIL (GROUP_ID, PARENT_ID, GROUPTABLE_ID, GROUPTABLE) VALUES (-43, 0, new.id, 'DOC_DETAIL_ACTIVE') | UPDATE OR INSERT INTO GROUP_DETAIL (GROUP_ID, PARENT_ID, GROUPTABLE_ID, GROUPTABLE) VALUES (-43, 0, new.id, 'DOC_DETAIL_ACTIVE') | ||
MATCHING (GROUP_ID, PARENT_ID, GROUPTABLE_ID, GROUPTABLE); | MATCHING (GROUP_ID, PARENT_ID, GROUPTABLE_ID, GROUPTABLE); | ||
| Строка 375: | Строка 416: | ||
SET TERM ; ^ | SET TERM ; ^ | ||
| + | |||
/* Privileges of triggers */ | /* Privileges of triggers */ | ||
| Строка 380: | Строка 422: | ||
GRANT UPDATE, REFERENCES ON DOC_DETAIL_ACTIVE TO TRIGGER SET_MARKING_GROUP; | GRANT UPDATE, REFERENCES ON DOC_DETAIL_ACTIVE TO TRIGGER SET_MARKING_GROUP; | ||
GRANT SELECT, INSERT, UPDATE ON GROUP_DETAIL TO TRIGGER SET_MARKING_GROUP; | GRANT SELECT, INSERT, UPDATE ON GROUP_DETAIL TO TRIGGER SET_MARKING_GROUP; | ||
| − | |||
CREATE INDEX MARK_DETAIL_IDX4 ON MARK_DETAIL (DDA_ID); | CREATE INDEX MARK_DETAIL_IDX4 ON MARK_DETAIL (DDA_ID); | ||
CREATE INDEX MARK_REQUESTS_IDX1 ON MARK_REQUESTS (DOCNUM); | CREATE INDEX MARK_REQUESTS_IDX1 ON MARK_REQUESTS (DOCNUM); | ||
| + | |||
| + | |||
| + | SET TERM ^ ; | ||
| + | |||
| + | create or alter procedure PR_MARK_COUNT ( | ||
| + | DDA_ID DM_ID) | ||
| + | returns ( | ||
| + | CNT DM_TEXT, | ||
| + | CONCATENATION DM_TEXT) | ||
| + | as | ||
| + | declare variable DOC_TYPE DM_ID; | ||
| + | declare variable DOC_ID DM_ID; | ||
| + | declare variable Q1 DM_ID; | ||
| + | declare variable Q2 DM_ID; | ||
| + | declare variable QUANT DM_ID; | ||
| + | declare variable MARKING DM_STATUS; | ||
| + | begin | ||
| + | --В активном документе | ||
| + | select QUANT,doc_id, coalesce(marking,0) | ||
| + | from DOC_DETAIL_ACTIVE DD | ||
| + | where DD.ID = :DDA_ID | ||
| + | into QUANT,:doc_id,:marking; | ||
| + | |||
| + | if (marking is null) then marking=0; | ||
| + | if (marking=0) then | ||
| + | begin | ||
| + | CONCATENATION=''; CNT=''; | ||
| + | suspend; | ||
| + | exit; | ||
| + | end | ||
| + | |||
| + | select d.doc_type from docs d where d.id=:doc_id into :doc_type; | ||
| + | --на приход | ||
| + | select cast(count(M.MARK_DATA) as DM_ID) | ||
| + | from MARK_DETAIL M | ||
| + | where M.DDA_ID = :DDA_ID and | ||
| + | M.ACTIVEPOS = 1 | ||
| + | into Q1; | ||
| + | --на расход | ||
| + | select cast(count(M.MARK_DATA) as DM_ID) | ||
| + | from MARK_DETAIL M | ||
| + | where M.DDA_ID = :DDA_ID and | ||
| + | M.ACTIVEPOS = 2 | ||
| + | into Q2; | ||
| + | if (:doc_type not in (8,58)) then | ||
| + | begin | ||
| + | if (QUANT > 0) then | ||
| + | begin | ||
| + | select 'Кол-во: ' || :QUANT || ' / Неверных: ' ||(:QUANT - :Q1), :Q1 | ||
| + | from RDB$DATABASE | ||
| + | into :CONCATENATION, :CNT; | ||
| + | end | ||
| + | else | ||
| + | begin | ||
| + | select 'Кол-во: ' ||(:QUANT * -1) || ' / Неверных: ' ||((:QUANT * -1) - :Q2), :Q2 | ||
| + | from RDB$DATABASE | ||
| + | into :CONCATENATION, :CNT; | ||
| + | end | ||
| + | end | ||
| + | else | ||
| + | --Переоценка | ||
| + | begin | ||
| + | select 'Кол-во: ' ||(:QUANT ) || ' / Неверных: ' ||((:QUANT ) - :Q2), :Q2 | ||
| + | from RDB$DATABASE | ||
| + | into :CONCATENATION, :CNT; | ||
| + | end | ||
| + | suspend; | ||
| + | end^ | ||
| + | |||
| + | SET TERM ; ^ | ||
| + | |||
| + | /* Следующие операторы GRANT сгенерированы автоматически */ | ||
| + | |||
| + | GRANT SELECT ON DOC_DETAIL_ACTIVE TO PROCEDURE PR_MARK_COUNT; | ||
| + | GRANT SELECT ON DOCS TO PROCEDURE PR_MARK_COUNT; | ||
| + | GRANT SELECT ON MARK_DETAIL TO PROCEDURE PR_MARK_COUNT; | ||
| + | |||
| + | /* Существующие привилегии на эту процедуру */ | ||
| + | |||
| + | GRANT EXECUTE ON PROCEDURE PR_MARK_COUNT TO VIEW VW_DOC_DETAIL_ACTIVE; | ||
| + | GRANT EXECUTE ON PROCEDURE PR_MARK_COUNT TO SYSDBA; | ||
| + | |||
| + | SET TERM ^ ; | ||
| + | |||
| + | create or alter procedure PR_DOC_DETAIL_ACTIVE_MMBSH_COMM ( | ||
| + | DOC_ID type of DM_ID) | ||
| + | as | ||
| + | declare variable GROUPTABLE type of DM_METADATANAME; | ||
| + | declare variable GROUP_ID type of DM_ID; | ||
| + | declare variable TABLE_ID DM_ID_NULL; | ||
| + | declare variable NAME_ID type of DM_UUID_NULL; | ||
| + | declare variable IZG_ID type of DM_UUID_NULL; | ||
| + | declare variable COUNTRY_ID type of DM_UUID_NULL; | ||
| + | declare variable ORIG_NAME_ID type of DM_UUID_NULL; | ||
| + | declare variable ORIG_IZG_ID type of DM_UUID_NULL; | ||
| + | declare variable ORIG_COUNTRY_ID type of DM_UUID_NULL; | ||
| + | begin | ||
| + | for | ||
| + | select m.group_id, m.detail_id, g.grouptable, da.name_id, da.izg_id, da.country_id, da.orig_name_id, da.orig_izg_id, da.orig_country_id | ||
| + | from DOC_DETAIL_ACTIVE_MMBSH m left join groups g on m.group_id=g.id left join doc_detail_active da on m.detail_id=da.id | ||
| + | where m.doc_id=:doc_id and m.status=0 | ||
| + | into :group_id, :table_id, :grouptable, :name_id, :izg_id, :country_id, :orig_name_id, :orig_izg_id, :orig_country_id | ||
| + | do | ||
| + | begin | ||
| + | if (trim(grouptable)='PARTS') then | ||
| + | if (not exists (select 1 from group_detail where GROUPTABLE='DOC_DETAIL_ACTIVE' and group_id=:group_id and GROUPTABLE_ID=:table_id)) then | ||
| + | insert into group_detail (group_id,parent_id,GROUPTABLE_ID,GROUPTABLE) values (:group_id,0,:table_id,'DOC_DETAIL_ACTIVE'); | ||
| + | |||
| + | if (trim(grouptable)='PARTS.NAME_ID') then | ||
| + | begin | ||
| + | if ( (:name_id='0') or (:name_id='') ) then | ||
| + | insert into group_detail (group_id,parent_id,GROUPTABLE_ID,GROUPTABLE) values (:group_id,0,:table_id,'DOC_DETAIL_ACTIVE'); | ||
| + | else | ||
| + | begin | ||
| + | if ((select id from group_detail where group_id=:group_id and GROUPTABLE_ID = :name_id) is null) then | ||
| + | insert into group_detail (group_id,parent_id,GROUPTABLE_ID) values (:group_id,0,:name_id); | ||
| + | end | ||
| + | end | ||
| + | if (trim(grouptable)='PARTS.IZG_ID') then | ||
| + | begin | ||
| + | if ( (:izg_id='0') or (:izg_id='') ) then | ||
| + | insert into group_detail (group_id,parent_id,GROUPTABLE_ID,GROUPTABLE) values (:group_id,0,:table_id,'DOC_DETAIL_ACTIVE'); | ||
| + | else | ||
| + | begin | ||
| + | if ((select id from group_detail where group_id=:group_id and GROUPTABLE_ID = :izg_id) is null) then | ||
| + | insert into group_detail (group_id,parent_id,GROUPTABLE_ID) values (:group_id,0,:izg_id); | ||
| + | end | ||
| + | end | ||
| + | if (trim(grouptable)='PARTS.COUNTRY_ID') then | ||
| + | begin | ||
| + | if ( (:country_id=0) or (:country_id='') ) then | ||
| + | insert into group_detail (group_id,parent_id,GROUPTABLE_ID,GROUPTABLE) values (:group_id,0,:table_id,'DOC_DETAIL_ACTIVE'); | ||
| + | else | ||
| + | begin | ||
| + | if ((select id from group_detail where group_id=:group_id and GROUPTABLE_ID = :country_id) is null) then | ||
| + | insert into group_detail (group_id,parent_id,GROUPTABLE_ID) values (:group_id,0,:country_id); | ||
| + | end | ||
| + | end | ||
| + | if (trim(grouptable)='PARTS.ORIG_NAME_ID') then | ||
| + | begin | ||
| + | if ( (:orig_name_id=0) or (:orig_name_id='') ) then | ||
| + | insert into group_detail (group_id,parent_id,GROUPTABLE_ID,GROUPTABLE) values (:group_id,0,:table_id,'DOC_DETAIL_ACTIVE'); | ||
| + | else | ||
| + | begin | ||
| + | if ((select id from group_detail where group_id=:group_id and GROUPTABLE_ID = :orig_name_id) is null) then | ||
| + | insert into group_detail (group_id,parent_id,GROUPTABLE_ID) values (:group_id,0,:orig_name_id); | ||
| + | end | ||
| + | end | ||
| + | if (trim(grouptable)='PARTS.ORIG_IZG_ID') then | ||
| + | begin | ||
| + | if ( (:orig_izg_id=0) or (:orig_izg_id='') ) then | ||
| + | insert into group_detail (group_id,parent_id,GROUPTABLE_ID,GROUPTABLE) values (:group_id,0,:table_id,'DOC_DETAIL_ACTIVE'); | ||
| + | else | ||
| + | begin | ||
| + | if ((select id from group_detail where group_id=:group_id and GROUPTABLE_ID = :orig_izg_id) is null) then | ||
| + | insert into group_detail (group_id,parent_id,GROUPTABLE_ID) values (:group_id,0,:orig_izg_id); | ||
| + | end | ||
| + | end | ||
| + | if (trim(grouptable)='PARTS.ORIG_COUNTRY_ID') then | ||
| + | begin | ||
| + | if ( (:orig_country_id=0) or (:orig_country_id='') ) then | ||
| + | insert into group_detail (group_id,parent_id,GROUPTABLE_ID,GROUPTABLE) values (:group_id,0,:table_id,'DOC_DETAIL_ACTIVE'); | ||
| + | else | ||
| + | begin | ||
| + | if ((select id from group_detail where group_id=:group_id and GROUPTABLE_ID = :orig_country_id) is null) then | ||
| + | insert into group_detail (group_id,parent_id,GROUPTABLE_ID) values (:group_id,0,:orig_country_id); | ||
| + | end | ||
| + | end | ||
| + | end | ||
| + | end^ | ||
| + | |||
| + | SET TERM ; ^ | ||
| + | |||
| + | /* Следующие операторы GRANT сгенерированы автоматически */ | ||
| + | |||
| + | GRANT SELECT ON DOC_DETAIL_ACTIVE_MMBSH TO PROCEDURE PR_DOC_DETAIL_ACTIVE_MMBSH_COMM; | ||
| + | GRANT SELECT ON GROUPS TO PROCEDURE PR_DOC_DETAIL_ACTIVE_MMBSH_COMM; | ||
| + | GRANT SELECT ON DOC_DETAIL_ACTIVE TO PROCEDURE PR_DOC_DETAIL_ACTIVE_MMBSH_COMM; | ||
| + | GRANT SELECT,INSERT ON GROUP_DETAIL TO PROCEDURE PR_DOC_DETAIL_ACTIVE_MMBSH_COMM; | ||
| + | |||
| + | /* Существующие привилегии на эту процедуру */ | ||
| + | |||
| + | GRANT EXECUTE ON PROCEDURE PR_DOC_DETAIL_ACTIVE_MMBSH_COMM TO STANDART; | ||
| + | GRANT EXECUTE ON PROCEDURE PR_DOC_DETAIL_ACTIVE_MMBSH_COMM TO SYSDBA; | ||
| + | |||
| + | |||
| + | SET SQL DIALECT 3; | ||
| + | |||
| + | |||
| + | |||
| + | SET TERM ^ ; | ||
| + | |||
| + | |||
| + | |||
| + | CREATE OR ALTER TRIGGER GROUP_DETAIL_AD0 FOR GROUP_DETAIL | ||
| + | ACTIVE AFTER DELETE POSITION 0 | ||
| + | AS | ||
| + | begin | ||
| + | if ((old.group_id=-43) and (old.grouptable='DOC_DETAIL_ACTIVE')) then | ||
| + | begin | ||
| + | update doc_detail_active dd set dd.marking=0 where id=old.grouptable_id; | ||
| + | end | ||
| + | end | ||
| + | ^ | ||
| + | |||
| + | SET TERM ; ^ | ||
| Строка 402: | Строка 649: | ||
==Дополнительно обновить процедуры== | ==Дополнительно обновить процедуры== | ||
| − | !!![[Файл: | + | !!![[Файл:PR NEW PART 20210318.txt]] |
| + | !!![[Файл:PR DOC PRIHOD COMMIT RECURSE 20210402.txt]] | ||
| + | !!![[Файл:PR_EDITCUSTOMDOC_16032021.txt]] | ||
!!![[Файл:PR CORRECTPART типовая.txt]] | !!![[Файл:PR CORRECTPART типовая.txt]] | ||
| + | !!![[Файл:PR DOC CANCEL 20211025.txt]] | ||
<b>!!! аккуратнее, возможна остановка торговли</b> | <b>!!! аккуратнее, возможна остановка торговли</b> | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
после этого перекомпилировать процедуру PR_DOC_COMMIT | после этого перекомпилировать процедуру PR_DOC_COMMIT | ||
| Строка 470: | Строка 710: | ||
CREATE INDEX MARK_REQUESTS_IDX1 ON MARK_REQUESTS (DOCNUM); | CREATE INDEX MARK_REQUESTS_IDX1 ON MARK_REQUESTS (DOCNUM); | ||
</pre> | </pre> | ||
| + | *при переоценке datamatrix коды "не пересаживаются" на новую партию или продажи не было, но марка списалась | ||
| + | нужно обновить PR_DOC_PRIHOD_COMMIT_RECURSE, как на вики/дистрибах | ||
| + | + применить корректировочную процедуру [[Файл:PR REPAIR REPRICE MDLP 20220426.txt]] | ||
==Добавление предприятия -10 (МДЛП)== | ==Добавление предприятия -10 (МДЛП)== | ||
| Строка 479: | Строка 722: | ||
==Фильтр "Документы, отправленные в МДЛП" == | ==Фильтр "Документы, отправленные в МДЛП" == | ||
mark_status > 0 | mark_status > 0 | ||
| − | |||
| − | |||
| − | |||
==Старая схема отправки маркированной накладной по почте на примере подпрограммы "Переотправить документ"== | ==Старая схема отправки маркированной накладной по почте на примере подпрограммы "Переотправить документ"== | ||
| Строка 663: | Строка 903: | ||
end. | end. | ||
</pre> | </pre> | ||
| + | |||
| + | |||
| + | ==Настройка под работу с УСН (2 предприятия)== | ||
| + | |||
| + | ===Выполнить скрипт=== | ||
| + | [[Файл:МДЛП - настройка под УСН для точки-.txt]] | ||
| + | |||
| + | ===Настроить кассовое место=== | ||
| + | * перезапустить кассира | ||
| + | * для предприятия -10 скопировать настройки | ||
| + | * настроить режим работы с УСН | ||
| + | * скопировать настройки для всех пользователей | ||
| + | |||
| + | ==Подключение регистратора выбытия (РВ, регистратор выбытия)== | ||
| + | [[Файл:Подключение регистратора выбытия.doc]] | ||
| + | |||
| + | ==запрет на снятие группы МДЛП для остатков (не обязательно ставить)== | ||
| + | <pre> | ||
| + | SET SQL DIALECT 3; | ||
| + | |||
| + | SET TERM ^ ; | ||
| + | |||
| + | CREATE OR ALTER TRIGGER GROUP_DETAIL_982164_BD0 FOR GROUP_DETAIL | ||
| + | ACTIVE BEFORE DELETE POSITION 0 | ||
| + | AS | ||
| + | begin | ||
| + | --ставим запрет на снятие группы МДЛП, т.к. по непонятным причинам эта группа снимается | ||
| + | if ((old.group_id = -43) and (old.grouptable='PARTS')) then | ||
| + | if (exists(select id from mark_detail m where m.part_id = cast(old.grouptable_id as dm_id) )) then | ||
| + | exception EX_WRONG_OPER ' Позиция маркирована. Сброс группы запрещен. (Партия '||old.grouptable_id||')'; | ||
| + | end | ||
| + | ^ | ||
| + | |||
| + | SET TERM ; ^ | ||
| + | </pre> | ||
| + | |||
| + | ==Инструкции== | ||
| + | [[Маркировка лекарственных средств]] | ||
| + | |||
| + | [[Файл:Таблица соответствий документов менеджера и мдлп.pdf]] | ||
| + | |||
| + | [[Файл:Добавить корневой сертификат.pdf]] | ||
Текущая версия на 15:24, 17 августа 2022
Содержание
- 1 Заменить версию Менеджера
- 2 Выполняем скрипт
- 3 Поправить VW_DOCS и VW_DOC_DETAIL_ACTIVE
- 4 Дополнительно обновить процедуры
- 5 Проверить, что в "Менеджере групп" группа "ЖНВЛС" вверху списка по группам
- 6 Настроить сетки в активных документах и журнале документов
- 7 ТМС Проведение с авторасходом (пока не тестировалось, не накатывать пока)
- 8 конвертор
- 9 возможные проблемы
- 10 Добавление предприятия -10 (МДЛП)
- 11 Фильтр "Документы, отправленные в МДЛП"
- 12 Старая схема отправки маркированной накладной по почте на примере подпрограммы "Переотправить документ"
- 13 Настройка под работу с УСН (2 предприятия)
- 14 Подключение регистратора выбытия (РВ, регистратор выбытия)
- 15 запрет на снятие группы МДЛП для остатков (не обязательно ставить)
- 16 Инструкции
Заменить версию Менеджера
Заменить ManagerXP2.exe на версию 274_47_8 от июля 2020 г. или более новую.
НЕ ОБНОВЛЯТЬ ТРИГГЕРЫ, ЕСЛИ 2 ПРЕДПРИЯТИЯ!!!
Выполняем скрипт
ALTER TABLE DOCS ADD DOC_TREB_ID DM_ID_NULL;
ALTER TABLE DOCS ADD FIRST_AGENT_ID DM_ID_NULL;
ALTER TABLE PARAMS ADD CONSTRAINT UNQ1_PARAMS UNIQUE (PARAM_ID);
ALTER TABLE DOCS_TREB ADD G$PROFILE_ID DM_ID;
ALTER TABLE DOCS_TREB ADD FIRST_AGENT DM_ID;
ALTER TABLE PARTS ADD D$UUID DM_UUID_NULL;
ALTER TABLE DOC_DETAIL_ACTIVE_TREB ADD TO_PROFILE_ID DM_ID;
ALTER TABLE DOC_DETAIL_ACTIVE_TREB ADD MOTHERPART_UUID DM_UUID_NULL;
ALTER TABLE DOCS_CANCELED ADD D$UUID DM_UUID_NULL;
ALTER TABLE DOCS_CANCELED ADD D$SRVUPDDT DM_DATETIME;
ALTER TABLE DOCS ADD D$UUID DM_UUID_NULL;
ALTER TABLE DOCS ADD D$SRVUPDDT DM_DATETIME;
ALTER TABLE DOC_DETAIL_ACTIVE_CANCELED ADD MOTHERPART_UUID DM_UUID_NULL;
ALTER TABLE DOCS_TREB ADD AGENT_PLACE DM_TEXT
SET TERM ^ ;
create or alter procedure GM$PR_PRIHOD_DOC_TREB (
DOC_ID integer)
as
declare variable DOC_TYPE DM_STATUS;
declare variable AGENT_ID DM_ID_NULL;
declare variable G$PROFILE_ID DM_ID_NULL;
declare variable DOC_COMMITDATE DM_DATE;
declare variable DOC_UUID DM_ID_NULL;
declare variable TO_PROFILE_ID DM_ID_NULL;
declare variable FIRST_AGENT_ID DM_ID_NULL;
declare variable CODE_PROFILE DM_TEXT;
begin
select doc_type, agent_id, cast(commitdate as dm_date)
from docs where id=:doc_id into :doc_type, :agent_id, :doc_commitdate;
if (doc_type not in (6,11)) then exit;
--select gp.id from G$PROFILES gp where gp.agent_id=:agent_id into :g$profile_id;
select (select N from GET_INTEGER(email)) from agents where id=:agent_id into :to_profile_id;
select (select N from GET_INTEGER(p.param_value)) from params p where p.param_id='CODE_PROFILE' into :g$profile_id;
if (g$profile_id is null or to_profile_id is null) then exit;
DOC_TYPE=40; -- приход поставщика будет документ на точке
--Сохраняем контрагента в переменной FIRST_AGENT_ID если есть необходимо расскомментировтаь
select FIRST_AGENT_ID from docs where id=:doc_id into :FIRST_AGENT_ID;
if (FIRST_AGENT_ID is null) then FIRST_AGENT_ID = (select id from agents where email=(select p.param_value from params p where p.param_id='CODE_PROFILE'));
--Если нужно получить на конечной точке приход перемещеним раскомментировать данный функционал
/* Берем код профиля у контрагента, если он наш, то меняем тип документа отправляемого на точку*/
/*select coalesce(a.email,0) from agents a where a.id=:FIRST_AGENT_ID into :CODE_PROFILE;
if (((CHARACTER_LENGTH(CODE_PROFILE)=1) or (CHARACTER_LENGTH(CODE_PROFILE)=2) or (CHARACTER_LENGTH(CODE_PROFILE)=3)) and (CODE_PROFILE<>'0')) then
DOC_TYPE=41;-- приход перемещением будет документ на точке*/
--27/05/2020 AVO Добавлено полуение ID первоначального контрагента
INSERT INTO DOCS_TREB (ID,PARENT_ID, DOC_TYPE, STATUS, AGENT_ID, DOCNUM, DOCDATE,
RGUID, INSERTDT, POSTDT, AUDIT_ID, VNUM, VSHIFT, CREATER, OWNER, COMMITDATE,
DEVICE_NUM, SUMMA, SUMMA_O, SUM_NDSO, CALCSUMMA, COMMENTS, SUMM1, SUMM2, SUMM3, SUMM4,
CHECKDATA, COMMITSESSION_ID, SUM_DSC, CASHDATA, PRICE_TYPE, CURRENCY_ID, BASE_AGENT_ID,
CONTRACT_ID, G$PROFILE_ID, LINK_ID, DELETED_DOC_ID,TO_PROFILE_ID,/*27/05/2020 add AVO*/FIRST_AGENT,
/*04/09/2020 add AVO*/AGENT_PLACE)
select ID,PARENT_ID,:doc_type, 1 as STATUS, AGENT_ID, DOCNUM, DOCDATE,
RGUID, INSERTDT, POSTDT, AUDIT_ID, VNUM, VSHIFT, CREATER, OWNER, COMMITDATE,
DEVICE_NUM, SUMMA, SUMMA_O, SUM_NDSO, CALCSUMMA, COMMENTS, SUMM1, SUMM2, SUMM3, SUMM4,
CHECKDATA, COMMITSESSION_ID, SUM_DSC, CASHDATA, PRICE_TYPE, CURRENCY_ID, BASE_AGENT_ID,
CONTRACT_ID, :g$profile_id as G$PROFILE_ID, LINK_ID, DELETED_DOC_ID,:to_profile_id as TO_PROFILE_ID,
/*27/05/2020 add AVO*/:first_agent_id as first_agent_id,/*04/09/2020 add AVO*/AGENT_PLACE
from docs where id=:doc_id
returning id into :doc_uuid;
INSERT INTO DOC_DETAIL_ACTIVE_TREB
(ID,PARENT_ID, PART_ID, PRICE,PRICE_O, QUANT, DISCOUNT, SUMMA,
SUMMA_O, DCARD, INSERTDT, SUM_NDSO, NAC, HUMAN_QUANT, SUM_DSC,
PART_TYPE, BASE_AGENT_ID, G$PROFILE_ID, TO_PROFILE_ID,
STATUS, DOC_ID, SNAME, SUM_NDSR, ORIG_CODE, SKLAD_ID,
BARCODE1, BCODE_IZG,BARCODE, PRICE_Z, PRICE_R, SERIA, NDS, SERT, DATESERT, KEMVSERT,SDSERT,
GODENDO, REGN, NGTD, EDIZM, SIZG, SCOUNTRY, DEP, GNVLS, SORIG_NAME,SORIG_IZG,SORIG_COUNTRY,MNN,
WARE_ID,NAME_ID,IZG_ID,COUNTRY_ID,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID,MOTHERPART_UUID,
-- 23/07/2020 AVO Добавлены поля для передачи по маркировке
MARKING,GTIN_SUBJ,ACCEPTTYPE,DATEPROD)
select
dd.ID,0, 0, p.PRICE,p.PRICE_O, -1*(dd.QUANT), dd.DISCOUNT, -1*(dd.SUMMA),
-1*(dd.SUMMA_O),dd.DCARD, dd.INSERTDT, -1*(dd.SUM_NDSO), p.NAC, dd.HUMAN_QUANT,
dd.SUM_DSC,p.PART_TYPE, 0, :g$profile_id, :to_profile_id,
0, :doc_uuid, vn.svalue, dd.SUM_NDSR, w.ORIG_CODE, p.SKLAD_ID,
p.BARCODE1, w.barcode,p.BARCODE, p.PRICE_Z, p.PRICE_R, p.SERIA, p.NDS, p.SERT, p.DATESERT, p.KEMVSERT,
p.SDSERT, p.GODENDO, p.REGN, p.NGTD, p.EDIZM, vi.svalue, vc.svalue,p.DEP,
'',--AVO 04/12/2020 отключил, слишком много групп и падало на них, группы ходят по синхронизации
--(select membership from PR_MEMBERSHIPS('PARTS=' || part_id || ';PARTS.NAME_ID=' || name_id ||';',ascii_char(13)||ascii_char(10),1)),
'','','','',p.WARE_ID,w.NAME_ID,w.IZG_ID,w.COUNTRY_ID,
w.ORIG_NAME_ID,w.ORIG_IZG_ID,w.ORIG_COUNTRY_ID,p.d$uuid,MARKING,GTIN_SUBJ,ACCEPTTYPE,DATEPROD
from doc_detail dd
left join parts p on p.id=dd.part_id
left join wares w on w.id=p.ware_id
left join vals vn on vn.id=w.name_id
left join vals vi on vi.id=w.izg_id
left join vals vc on vc.id=w.country_id
where dd.doc_id=:doc_id;
end^
SET TERM ; ^
/* Следующие операторы GRANT сгенерированы автоматически */
GRANT SELECT ON DOCS TO PROCEDURE GM$PR_PRIHOD_DOC_TREB;
GRANT EXECUTE ON PROCEDURE GET_INTEGER TO PROCEDURE GM$PR_PRIHOD_DOC_TREB;
GRANT SELECT ON AGENTS TO PROCEDURE GM$PR_PRIHOD_DOC_TREB;
GRANT SELECT ON PARAMS TO PROCEDURE GM$PR_PRIHOD_DOC_TREB;
GRANT INSERT ON DOCS_TREB TO PROCEDURE GM$PR_PRIHOD_DOC_TREB;
GRANT INSERT ON DOC_DETAIL_ACTIVE_TREB TO PROCEDURE GM$PR_PRIHOD_DOC_TREB;
GRANT SELECT ON DOC_DETAIL TO PROCEDURE GM$PR_PRIHOD_DOC_TREB;
GRANT SELECT ON PARTS TO PROCEDURE GM$PR_PRIHOD_DOC_TREB;
GRANT SELECT ON WARES TO PROCEDURE GM$PR_PRIHOD_DOC_TREB;
GRANT SELECT ON VALS TO PROCEDURE GM$PR_PRIHOD_DOC_TREB;
/* Существующие привилегии на эту процедуру */
GRANT EXECUTE ON PROCEDURE GM$PR_PRIHOD_DOC_TREB TO PROCEDURE PR_DOC_RASHOD_COMMIT;
GRANT EXECUTE ON PROCEDURE GM$PR_PRIHOD_DOC_TREB TO PROCEDURE PR_ENAKL_PRIHOD_DOC_TREB_RESEND;
GRANT EXECUTE ON PROCEDURE GM$PR_PRIHOD_DOC_TREB TO SYSDBA;
SET TERM ^ ;
create or alter procedure PR_UPDATEMARKBYPART (
DOC_ID DM_ID,
PART_ID DM_ID,
ACTIVE_ID DM_ID)
as
begin
--Если не переоценка то
--Обновляем партию привязанную к SGTIN
if ((select D.DOC_TYPE
from DOCS D
where D.ID = :DOC_ID) not in (8,58)) then
begin
update MARK_DETAIL
set PART_ID = :PART_ID
where DDA_ID = :ACTIVE_ID;
end
else
-- При переоценки вставляем записи в mark_detail
begin
insert into MARK_DETAIL (DOC_ID, PART_ID, MARK_DATA, QUANT, DOCNUM, DOC_DATE, DDA_ID, PLACE_ID_IN, PLACE_ID_OUT,
GTIN, SERIES_NUMBER, EXPIRATION_DATE, ACTIVEPOS, SERIA, KIZ, SSCC, ACCEPTED, MDLP_STATUS,
ERRORTEXT)
select :DOC_ID, :PART_ID, MARK_DATA, -QUANT, DOCNUM, DOC_DATE, DDA_ID, PLACE_ID_IN, PLACE_ID_OUT, GTIN,
SERIES_NUMBER, EXPIRATION_DATE, 1, SERIA, KIZ, SSCC, ACCEPTED, 1, ''
from MARK_DETAIL MD
where MD.DDA_ID = :ACTIVE_ID;
end
suspend;
end^
SET TERM ; ^
/* Следующие операторы GRANT сгенерированы автоматически */
GRANT SELECT ON DOCS TO PROCEDURE PR_UPDATEMARKBYPART;
GRANT SELECT,INSERT,UPDATE ON MARK_DETAIL TO PROCEDURE PR_UPDATEMARKBYPART;
/* Существующие привилегии на эту процедуру */
GRANT EXECUTE ON PROCEDURE PR_UPDATEMARKBYPART TO PROCEDURE PR_DOC_PRIHOD_COMMIT_RECURSE;
GRANT EXECUTE ON PROCEDURE PR_UPDATEMARKBYPART TO SYSDBA;
SET TERM ^ ;
create or alter procedure PR_COPY_MARK_DETAIL (
DOC_ID_IN integer,
DOC_ID_OUT integer)
as
begin
INSERT INTO MARK_DETAIL (DOC_ID, PART_ID, MARK_DATA, QUANT, COMMITDATE, INSERTDT, DOCNUM, DOC_DATE, DDA_ID,
PLACE_ID_IN, PLACE_ID_OUT, GTIN, SERIES_NUMBER, EXPIRATION_DATE, ACTIVEPOS, SERIA, KIZ, SSCC, ACCEPTED)
select :DOC_ID_OUT, PART_ID, MARK_DATA, -QUANT, COMMITDATE, INSERTDT, DOCNUM, DOC_DATE,(select first 1 id from doc_detail_active dd where dd.doc_id=:doc_id_out and dd.part_id=md.part_id),
PLACE_ID_IN, PLACE_ID_OUT, GTIN, SERIES_NUMBER, EXPIRATION_DATE, 2, SERIA, KIZ, SSCC, ACCEPTED
from MARK_DETAIL md where doc_id = :DOC_ID_IN ;
end^
SET TERM ; ^
SET TERM ^ ;
CREATE OR ALTER TRIGGER DOCS_CANCELED_BI_DISTR FOR DOCS_CANCELED
ACTIVE BEFORE INSERT POSITION 0
AS
begin
if (new.d$uuid is null) then
begin
new.d$uuid=UUID_TO_CHAR(GEN_UUID());
new.d$srvupddt='2000-01-01';
-- update or insert into g$distribute (TABLENAME,UUID,SOPER,FROM_PROFILE_ID) values ('DOCS_CANCELED',new.d$uuid,0,null) matching (TABLENAME,UUID);
end
end
^
SET TERM ; ^
SET TERM ^ ;
CREATE OR ALTER TRIGGER AGENTS_CHANGE_MARK_TYPE_BU FOR AGENTS
ACTIVE AFTER UPDATE POSITION 0
AS
begin
update doc_detail_active dd set dd.accepttype=new.mark_type where
dd.doc_id in (select d.id from docs d left join doc_detail_active dd1 on dd1.doc_id=d.id where d.agent_id=new.id);
end
^
SET TERM ; ^
SET TERM ^ ;
CREATE OR ALTER TRIGGER DOC_DETAIL_ACTIVE_MARK_BI FOR DOC_DETAIL_ACTIVE
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
begin
if (new.marking is null ) then
new.marking=0;
if (exists (select 1 from group_detail gd where gd.group_id=-43 and gd.grouptable='PARTS' and gd.grouptable_id=cast(new.part_id as dm_text))) then
new.marking=1;
--if (new.accepttype is null) then
new.accepttype=(select a.mark_type from docs d join agents a on d.agent_id=a.id where d.id=new.doc_id);
end
^
SET TERM ; ^
SET SQL DIALECT 3;
SET TERM ^ ;
CREATE OR ALTER TRIGGER AIU_MARK_GROUP FOR GROUP_DETAIL
ACTIVE AFTER INSERT OR UPDATE POSITION 0
AS
begin
/*add avo 16/12/2020 and d.id>0*/
if ((new.grouptable='DOC_DETAIL_ACTIVE')) then
begin
if (new.group_id=-43) then
begin
--21/10/2020 смотрим на параметр и в зависимости от него снимаем/ставим предприятие и ставку НДС новую
if (((select PARAM_VALUE from PR_GETPARAMVALUE('NEW_MARK_TWOFIRM',0))=1) and ((select PARAM_VALUE from PR_GETPARAMVALUE('MARKING_NDS',0))=1)) then
update doc_detail_active dd set
dd.marking=1,
dd.base_agent_id=-10,
dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) and d.id>0 order by d.id desc )
where dd.id=new.grouptable_id;
--03/09/2020 смотрим на параметр и в зависимости от него снимаем/ставим предприятие и ставку НДС новую
else if ((select PARAM_VALUE from PR_GETPARAMVALUE('NEW_MARK_TWOFIRM',0))=1) then
update doc_detail_active dd set
dd.marking=1,
dd.base_agent_id=-10
where dd.id=new.grouptable_id;
--21/10/2020 смотрим на параметр и в зависимости от него снимаем/ставим ставку НДС новую
else if ((select PARAM_VALUE from PR_GETPARAMVALUE('MARKING_NDS',0))=1) then
update doc_detail_active dd set
dd.marking=1,
dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) and d.id>0 order by d.id desc )
where dd.id=new.grouptable_id;
else
update doc_detail_active dd set dd.marking=1 where dd.id=new.grouptable_id and dd.marking<>1;
end
end
if (new.grouptable='PARTS') then
begin
if (new.group_id=-43) then
begin
--21/10/2020 смотрим на параметр и в зависимости от него снимаем/ставим предприятие и ставку НДС новую
if (((select PARAM_VALUE from PR_GETPARAMVALUE('NEW_MARK_TWOFIRM',0))=1) and ((select PARAM_VALUE from PR_GETPARAMVALUE('MARKING_NDS',0))=1)) then
update doc_detail_active dd set
dd.marking=1,
dd.base_agent_id=-10,
dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) and d.id>0 order by d.id desc )
where dd.part_id=new.grouptable_id;
--03/09/2020 смотрим на параметр и в зависимости от него снимаем/ставим предприятие и ставку НДС новую
else if ((select PARAM_VALUE from PR_GETPARAMVALUE('NEW_MARK_TWOFIRM',0))=1) then
update doc_detail_active dd set
dd.marking=1,
dd.base_agent_id=-10
where dd.part_id=new.grouptable_id;
--21/10/2020 смотрим на параметр и в зависимости от него снимаем/ставим ставку НДС новую
else if ((select PARAM_VALUE from PR_GETPARAMVALUE('MARKING_NDS',0))=1) then
update doc_detail_active dd set
dd.marking=1,
dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) and d.id>0 order by d.id desc )
where dd.part_id=new.grouptable_id;
else
update doc_detail_active dd set dd.marking=1 where dd.part_id=new.grouptable_id and dd.marking<>1;
end
end
end
^
SET TERM ; ^
DROP TRIGGER GROUP_DETAIL_AIU0;
DROP TRIGGER GROUP_DETAIL_AD0;
SET TERM ^ ;
CREATE OR ALTER TRIGGER AD_MARK_GROUP FOR GROUP_DETAIL
ACTIVE AFTER DELETE POSITION 0
AS
begin
/*add avo 16/12/2020 and d.id>0*/
if ((old.grouptable='DOC_DETAIL_ACTIVE')) then
begin
if (old.group_id=-43) then
begin
--03/09/2020 смотрим на параметр и в зависимости от него снимаем/ставим предприятие
if (((select PARAM_VALUE from PR_GETPARAMVALUE('NEW_MARK_TWOFIRM',0))=1) and ((select PARAM_VALUE from PR_GETPARAMVALUE('MARKING_NDS',0))=1)) then
update doc_detail_active dd set
dd.marking=0,
dd.base_agent_id=0,
dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) and d.id>0 order by d.id )
where dd.id=old.grouptable_id;
else if ((select PARAM_VALUE from PR_GETPARAMVALUE('NEW_MARK_TWOFIRM',0))=1) then
update doc_detail_active dd set
dd.marking=0,
dd.base_agent_id=0
where dd.id=old.grouptable_id;
else if ((select PARAM_VALUE from PR_GETPARAMVALUE('MARKING_NDS',0))=1) then
update doc_detail_active dd set
dd.marking=0,
dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) and d.id>0 order by d.id )
where dd.id=old.grouptable_id;
else
update doc_detail_active dd set dd.marking=0 where dd.id=old.grouptable_id and dd.marking<>0;
end
end
if (old.grouptable='PARTS') then
begin
if (old.group_id=-43) then
begin
--03/09/2020 смотрим на параметр и в зависимости от него снимаем/ставим предприятие
if (((select PARAM_VALUE from PR_GETPARAMVALUE('NEW_MARK_TWOFIRM',0))=1) and ((select PARAM_VALUE from PR_GETPARAMVALUE('MARKING_NDS',0))=1)) then
update doc_detail_active dd set
dd.marking=0,
dd.base_agent_id=0,
dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) and d.id>0 order by d.id )
where dd.part_id=old.grouptable_id;
else if ((select PARAM_VALUE from PR_GETPARAMVALUE('NEW_MARK_TWOFIRM',0))=1) then
update doc_detail_active dd set
dd.marking=0,
dd.base_agent_id=0
where dd.part_id=old.grouptable_id;
else if ((select PARAM_VALUE from PR_GETPARAMVALUE('MARKING_NDS',0))=1) then
update doc_detail_active dd set
dd.marking=0,
dd.dep=(select first 1 d.id from deps d where d.nds=(select nds from deps where id=dd.dep) and d.id>0 order by d.id )
where dd.part_id=old.grouptable_id;
else
update doc_detail_active dd set dd.marking=0 where dd.part_id=old.grouptable_id and dd.marking<>0;
end
end
end
^
SET TERM ; ^
SET SQL DIALECT 3;
SET TERM ^ ;
CREATE OR ALTER TRIGGER SET_MARKING_GROUP FOR DOC_DETAIL_ACTIVE
ACTIVE AFTER INSERT OR UPDATE POSITION 0
AS
begin
/*add AVO 04/09/2020
Для позиций проверяем, если товар маркированный, то ставим группу маркировки принудительно
*/
if (new.marking=1) then
begin
-- 20/10/2020 для корректировки выходим без определения группы
if ((select d.doc_type from docs d where d.id=new.doc_id) in (7,8,17,18,23)) then
exit;
--Проверяем есть ли группа, если есть уже - выходим
if (((select count(id) from GROUP_DETAIL where GROUP_ID =-43 and GROUPTABLE='DOC_DETAIL_ACTIVE' and GROUPTABLE_ID=cast(new.id as dm_text))>0) OR
((select count(id) from GROUP_DETAIL where GROUP_ID =-43 and GROUPTABLE='PARTS' and GROUPTABLE_ID=cast(new.part_id as dm_text))>0)) then
exit;
if ((not exists(select id from GROUP_DETAIL where GROUP_ID=-43 and GROUPTABLE_ID=cast(new.id as dm_text) and GROUPTABLE='DOC_DETAIL_ACTIVE'))) then
UPDATE OR INSERT INTO GROUP_DETAIL (GROUP_ID, PARENT_ID, GROUPTABLE_ID, GROUPTABLE) VALUES (-43, 0, new.id, 'DOC_DETAIL_ACTIVE')
MATCHING (GROUP_ID, PARENT_ID, GROUPTABLE_ID, GROUPTABLE);
end
end
^
SET TERM ; ^
/* Privileges of triggers */
GRANT SELECT ON DOCS TO TRIGGER SET_MARKING_GROUP;
GRANT UPDATE, REFERENCES ON DOC_DETAIL_ACTIVE TO TRIGGER SET_MARKING_GROUP;
GRANT SELECT, INSERT, UPDATE ON GROUP_DETAIL TO TRIGGER SET_MARKING_GROUP;
CREATE INDEX MARK_DETAIL_IDX4 ON MARK_DETAIL (DDA_ID);
CREATE INDEX MARK_REQUESTS_IDX1 ON MARK_REQUESTS (DOCNUM);
SET TERM ^ ;
create or alter procedure PR_MARK_COUNT (
DDA_ID DM_ID)
returns (
CNT DM_TEXT,
CONCATENATION DM_TEXT)
as
declare variable DOC_TYPE DM_ID;
declare variable DOC_ID DM_ID;
declare variable Q1 DM_ID;
declare variable Q2 DM_ID;
declare variable QUANT DM_ID;
declare variable MARKING DM_STATUS;
begin
--В активном документе
select QUANT,doc_id, coalesce(marking,0)
from DOC_DETAIL_ACTIVE DD
where DD.ID = :DDA_ID
into QUANT,:doc_id,:marking;
if (marking is null) then marking=0;
if (marking=0) then
begin
CONCATENATION=''; CNT='';
suspend;
exit;
end
select d.doc_type from docs d where d.id=:doc_id into :doc_type;
--на приход
select cast(count(M.MARK_DATA) as DM_ID)
from MARK_DETAIL M
where M.DDA_ID = :DDA_ID and
M.ACTIVEPOS = 1
into Q1;
--на расход
select cast(count(M.MARK_DATA) as DM_ID)
from MARK_DETAIL M
where M.DDA_ID = :DDA_ID and
M.ACTIVEPOS = 2
into Q2;
if (:doc_type not in (8,58)) then
begin
if (QUANT > 0) then
begin
select 'Кол-во: ' || :QUANT || ' / Неверных: ' ||(:QUANT - :Q1), :Q1
from RDB$DATABASE
into :CONCATENATION, :CNT;
end
else
begin
select 'Кол-во: ' ||(:QUANT * -1) || ' / Неверных: ' ||((:QUANT * -1) - :Q2), :Q2
from RDB$DATABASE
into :CONCATENATION, :CNT;
end
end
else
--Переоценка
begin
select 'Кол-во: ' ||(:QUANT ) || ' / Неверных: ' ||((:QUANT ) - :Q2), :Q2
from RDB$DATABASE
into :CONCATENATION, :CNT;
end
suspend;
end^
SET TERM ; ^
/* Следующие операторы GRANT сгенерированы автоматически */
GRANT SELECT ON DOC_DETAIL_ACTIVE TO PROCEDURE PR_MARK_COUNT;
GRANT SELECT ON DOCS TO PROCEDURE PR_MARK_COUNT;
GRANT SELECT ON MARK_DETAIL TO PROCEDURE PR_MARK_COUNT;
/* Существующие привилегии на эту процедуру */
GRANT EXECUTE ON PROCEDURE PR_MARK_COUNT TO VIEW VW_DOC_DETAIL_ACTIVE;
GRANT EXECUTE ON PROCEDURE PR_MARK_COUNT TO SYSDBA;
SET TERM ^ ;
create or alter procedure PR_DOC_DETAIL_ACTIVE_MMBSH_COMM (
DOC_ID type of DM_ID)
as
declare variable GROUPTABLE type of DM_METADATANAME;
declare variable GROUP_ID type of DM_ID;
declare variable TABLE_ID DM_ID_NULL;
declare variable NAME_ID type of DM_UUID_NULL;
declare variable IZG_ID type of DM_UUID_NULL;
declare variable COUNTRY_ID type of DM_UUID_NULL;
declare variable ORIG_NAME_ID type of DM_UUID_NULL;
declare variable ORIG_IZG_ID type of DM_UUID_NULL;
declare variable ORIG_COUNTRY_ID type of DM_UUID_NULL;
begin
for
select m.group_id, m.detail_id, g.grouptable, da.name_id, da.izg_id, da.country_id, da.orig_name_id, da.orig_izg_id, da.orig_country_id
from DOC_DETAIL_ACTIVE_MMBSH m left join groups g on m.group_id=g.id left join doc_detail_active da on m.detail_id=da.id
where m.doc_id=:doc_id and m.status=0
into :group_id, :table_id, :grouptable, :name_id, :izg_id, :country_id, :orig_name_id, :orig_izg_id, :orig_country_id
do
begin
if (trim(grouptable)='PARTS') then
if (not exists (select 1 from group_detail where GROUPTABLE='DOC_DETAIL_ACTIVE' and group_id=:group_id and GROUPTABLE_ID=:table_id)) then
insert into group_detail (group_id,parent_id,GROUPTABLE_ID,GROUPTABLE) values (:group_id,0,:table_id,'DOC_DETAIL_ACTIVE');
if (trim(grouptable)='PARTS.NAME_ID') then
begin
if ( (:name_id='0') or (:name_id='') ) then
insert into group_detail (group_id,parent_id,GROUPTABLE_ID,GROUPTABLE) values (:group_id,0,:table_id,'DOC_DETAIL_ACTIVE');
else
begin
if ((select id from group_detail where group_id=:group_id and GROUPTABLE_ID = :name_id) is null) then
insert into group_detail (group_id,parent_id,GROUPTABLE_ID) values (:group_id,0,:name_id);
end
end
if (trim(grouptable)='PARTS.IZG_ID') then
begin
if ( (:izg_id='0') or (:izg_id='') ) then
insert into group_detail (group_id,parent_id,GROUPTABLE_ID,GROUPTABLE) values (:group_id,0,:table_id,'DOC_DETAIL_ACTIVE');
else
begin
if ((select id from group_detail where group_id=:group_id and GROUPTABLE_ID = :izg_id) is null) then
insert into group_detail (group_id,parent_id,GROUPTABLE_ID) values (:group_id,0,:izg_id);
end
end
if (trim(grouptable)='PARTS.COUNTRY_ID') then
begin
if ( (:country_id=0) or (:country_id='') ) then
insert into group_detail (group_id,parent_id,GROUPTABLE_ID,GROUPTABLE) values (:group_id,0,:table_id,'DOC_DETAIL_ACTIVE');
else
begin
if ((select id from group_detail where group_id=:group_id and GROUPTABLE_ID = :country_id) is null) then
insert into group_detail (group_id,parent_id,GROUPTABLE_ID) values (:group_id,0,:country_id);
end
end
if (trim(grouptable)='PARTS.ORIG_NAME_ID') then
begin
if ( (:orig_name_id=0) or (:orig_name_id='') ) then
insert into group_detail (group_id,parent_id,GROUPTABLE_ID,GROUPTABLE) values (:group_id,0,:table_id,'DOC_DETAIL_ACTIVE');
else
begin
if ((select id from group_detail where group_id=:group_id and GROUPTABLE_ID = :orig_name_id) is null) then
insert into group_detail (group_id,parent_id,GROUPTABLE_ID) values (:group_id,0,:orig_name_id);
end
end
if (trim(grouptable)='PARTS.ORIG_IZG_ID') then
begin
if ( (:orig_izg_id=0) or (:orig_izg_id='') ) then
insert into group_detail (group_id,parent_id,GROUPTABLE_ID,GROUPTABLE) values (:group_id,0,:table_id,'DOC_DETAIL_ACTIVE');
else
begin
if ((select id from group_detail where group_id=:group_id and GROUPTABLE_ID = :orig_izg_id) is null) then
insert into group_detail (group_id,parent_id,GROUPTABLE_ID) values (:group_id,0,:orig_izg_id);
end
end
if (trim(grouptable)='PARTS.ORIG_COUNTRY_ID') then
begin
if ( (:orig_country_id=0) or (:orig_country_id='') ) then
insert into group_detail (group_id,parent_id,GROUPTABLE_ID,GROUPTABLE) values (:group_id,0,:table_id,'DOC_DETAIL_ACTIVE');
else
begin
if ((select id from group_detail where group_id=:group_id and GROUPTABLE_ID = :orig_country_id) is null) then
insert into group_detail (group_id,parent_id,GROUPTABLE_ID) values (:group_id,0,:orig_country_id);
end
end
end
end^
SET TERM ; ^
/* Следующие операторы GRANT сгенерированы автоматически */
GRANT SELECT ON DOC_DETAIL_ACTIVE_MMBSH TO PROCEDURE PR_DOC_DETAIL_ACTIVE_MMBSH_COMM;
GRANT SELECT ON GROUPS TO PROCEDURE PR_DOC_DETAIL_ACTIVE_MMBSH_COMM;
GRANT SELECT ON DOC_DETAIL_ACTIVE TO PROCEDURE PR_DOC_DETAIL_ACTIVE_MMBSH_COMM;
GRANT SELECT,INSERT ON GROUP_DETAIL TO PROCEDURE PR_DOC_DETAIL_ACTIVE_MMBSH_COMM;
/* Существующие привилегии на эту процедуру */
GRANT EXECUTE ON PROCEDURE PR_DOC_DETAIL_ACTIVE_MMBSH_COMM TO STANDART;
GRANT EXECUTE ON PROCEDURE PR_DOC_DETAIL_ACTIVE_MMBSH_COMM TO SYSDBA;
SET SQL DIALECT 3;
SET TERM ^ ;
CREATE OR ALTER TRIGGER GROUP_DETAIL_AD0 FOR GROUP_DETAIL
ACTIVE AFTER DELETE POSITION 0
AS
begin
if ((old.group_id=-43) and (old.grouptable='DOC_DETAIL_ACTIVE')) then
begin
update doc_detail_active dd set dd.marking=0 where id=old.grouptable_id;
end
end
^
SET TERM ; ^
Поправить VW_DOCS и VW_DOC_DETAIL_ACTIVE
- заменить первую строку в VW_DOCS (для больниц)
на
iif(docs.doc_type=60,1, (select MARKING_STATUS from PR_MARK_STATUS(docnum))),
- заменить в VW_DOC_DETAIL_ACTIVE вызов pr_mark_count
на
iif(da.marking=1, (select concatenation from pr_mark_count(da.id)),null),
Дополнительно обновить процедуры
!!!Файл:PR NEW PART 20210318.txt !!!Файл:PR DOC PRIHOD COMMIT RECURSE 20210402.txt !!!Файл:PR EDITCUSTOMDOC 16032021.txt !!!Файл:PR CORRECTPART типовая.txt !!!Файл:PR DOC CANCEL 20211025.txt
!!! аккуратнее, возможна остановка торговли
после этого перекомпилировать процедуру PR_DOC_COMMIT
Проверить, что в "Менеджере групп" группа "ЖНВЛС" вверху списка по группам
Настроить сетки в активных документах и журнале документов
- Поле VW_DOC_DETAIL_ACTIVE.MARK_BARCODE (datamatrix)
- Поле VW_DOCS.MARK_STATUS (статус документа в ЧЗ)
ТМС Проведение с авторасходом (пока не тестировалось, не накатывать пока)
Для того, чтобы в авторасход автоматически копировались datamatriх коды, нужно:
1) добавить копирование кодов в расходный документ
EndIBTransaction(trn1,1);
STARTIBTRANSACTION(trn1,1);
try
query3:=ExecIBQuery(trn1,'execute procedure PR_COPY_MARK_DETAIL('+doc_id2+','+comdoc2+');',1); //провел расход перемещения
except
EndIBTransaction(trn1,0);
exit;
end;
2) убрать автоматическое проведение документа
Теги: маркировка, МДЛП
конвертор
В накладные в ОЗ были добавлены, такие же нужно добавить в поля в конвертор
MARKING tinyint(4) NULL; --Маркировка: Признак маркировки: 0 – не маркированный товар, 1- маркированный, 2- Короб SSCC GTIN varchar(20) NULL; --Маркировка: GTIN код упаковки GTIN_SUBJ varchar(20) NULL; --Маркировка: ID места деятельности GSERNUM varchar(20) NULL; --Маркировка: Серийный номер упаковки ACCEPTTYPE tinyint(4) NULL; --Маркировка: Тип акцепта: 0 – обратная, 1- прямая DATEPROD double NULL; --Маркировка: Дата производства
возможные проблемы
- ошибка типа conversion error MARK_DETAIL_BIU0
ALTER TABLE MARK_DETAIL ALTER COLUMN SERIES_NUMBER TYPE DM_TEXT;
- тормозит добавление в активные документы прихода/расхода, особенно на больших накладных
CREATE INDEX MARK_DETAIL_IDX4 ON MARK_DETAIL (DDA_ID);
- тормозит журнал документов при открытии
CREATE INDEX MARK_REQUESTS_IDX1 ON MARK_REQUESTS (DOCNUM);
- при переоценке datamatrix коды "не пересаживаются" на новую партию или продажи не было, но марка списалась
нужно обновить PR_DOC_PRIHOD_COMMIT_RECURSE, как на вики/дистрибах + применить корректировочную процедуру Файл:PR REPAIR REPRICE MDLP 20220426.txt
Добавление предприятия -10 (МДЛП)
INSERT INTO AGENTS (ID, CAPTION, FULLNAME, ADDR_ID, FACTADDR_ID, STATUS, INSERTDT, INN, DIRECTOR_NAME, BUH_NAME, EMAIL, PHONENUMBERS, DELETEDT, DOVER_FACE, DOLZHNOST, DOVERKA, DOVERKA_DT, BASE_AGENT_ID, ADDR, FACTADDR, BIK, BANK, RS, KS, KPP, KREDITDAY, BANK_ID, FOLDER_ID, GOR, KORSHET, CREDIT_DEPTH, EGAIS_ID, EGAIS_COUNTRY_ID, EGAIS_REGION_ID, FILEMASK, GLOBAL_AGENT_ID, MARK_TYPE, PARENT_ID, AGENT_PLACE_ID, TRUSTED, OGRN) VALUES (-10, 'Маркировка', 'МДЛП', 0, 0, 0, '14-SEP-2020 13:28:39.944', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL); INSERT INTO GROUP_DETAIL (GROUP_ID, PARENT_ID, GROUPTABLE_ID, INSERTDT, GROUPTABLE) VALUES (-7, 0, '-10', '14-SEP-2020 13:28:40.007', 'AGENTS');
Фильтр "Документы, отправленные в МДЛП"
mark_status > 0
Старая схема отправки маркированной накладной по почте на примере подпрограммы "Переотправить документ"
program GroupProgram;
var
query, con: cardinal;
trn, query1: cardinal;
t,adr_otprav,adr_poluch,f,katalog,
docnum,docdate,organization,doc_id,
adr_smtp,adr_port,adr_psw,ssl, sUser,ORG_MD: string;
i,mb_res,base_type: integer;
function SS_filename(ss: string):string;
begin
result:=StringReplace(ss, '''', '', 1);
result:=StringReplace(result, '"', '', 1);
result:=StringReplace(result, ':', '', 1);
result:=StringReplace(result, '`', '', 1);
result:=StringReplace(result, ',', '.', 1);
end;
begin
doc_id:=inttostr(m_docarchive.FOCUSEDID);
trn:=CREATEIBTRANSACTION;
STARTIBTRANSACTION(trn,1);
t:='select dt.base_type,d.vnum,d.commitdate from docs d left join doc_types dt on d.doc_type=dt.id where d.id='+doc_id;
query1:=ExecIBQuery(trn,t,1);
if not IBQUERY_EOF(query1) then
begin
base_type:=IBQuery_FieldByName_i(query1, 'base_type');
docnum:=IBQuery_FieldByName_s(query1, 'vnum');
docdate:=IBQuery_FieldByName_s(query1, 'commitdate');
end;
if base_type <> 2 then
exit;
t:='select PARAM_VALUE from PARAMS where PARAM_ID=''PARAMS_TEMP_PATH''';
query1:=ExecIBQuery(trn,t,1);
if not IBQUERY_EOF(query1) then
katalog:=IBQuery_FieldByName_s(query1, 'PARAM_VALUE')+'\';
deletefilemask(katalog+'*.dbf');
t:='select PARAM_VALUE from PARAMS where PARAM_ID=''PARAMS_SMTP''';
query1:=ExecIBQuery(trn,t,1);
if not IBQUERY_EOF(query1) then
adr_smtp:=IBQuery_FieldByName_s(query1, 'PARAM_VALUE');
t:='select PARAM_VALUE from PARAMS where PARAM_ID=''PARAMS_PORT''';
query1:=ExecIBQuery(trn,t,1);
if not IBQUERY_EOF(query1) then
adr_port:=IBQuery_FieldByName_s(query1, 'PARAM_VALUE');
t:='select PARAM_VALUE from PARAMS where PARAM_ID=''PARAMS_PSW''';
query1:=ExecIBQuery(trn,t,1);
if not IBQUERY_EOF(query1) then
adr_psw:=IBQuery_FieldByName_s(query1, 'PARAM_VALUE');
t:='select PARAM_VALUE from PARAMS where PARAM_ID=''EMAIL''';
query1:=ExecIBQuery(trn,t,1);
if not IBQUERY_EOF(query1) then
adr_otprav:=IBQuery_FieldByName_s(query1, 'PARAM_VALUE');
t:='select PARAM_VALUE from PARAMS where PARAM_ID=''ORG_NAME_NAKL''';
query1:=ExecIBQuery(trn,t,1);
if not IBQUERY_EOF(query1) then
organization:=IBQuery_FieldByName_s(query1, 'PARAM_VALUE');
ssl := '';
t:='select PARAM_VALUE from PARAMS where PARAM_ID=''PARAMS_AUTOTLS''';
query1:=ExecIBQuery(trn,t,1);
if not IBQUERY_EOF(query1) then
begin
if (IBQuery_FieldByName_s(query1, 'PARAM_VALUE')='Да') then
ssl := ssl + 'AUTOTLS';
end;
t:='select PARAM_VALUE from PARAMS where PARAM_ID=''PARAMS_FULLSSL''';
query1:=ExecIBQuery(trn,t,1);
if not IBQUERY_EOF(query1) then
begin
if (IBQuery_FieldByName_s(query1, 'PARAM_VALUE')='Да') then
ssl := ssl + ' FULLSSL';
end;
t:='select PARAM_VALUE from PARAMS where PARAM_ID=''ORG_MD''';
query1:=ExecIBQuery(trn,t,1);
if not IBQUERY_EOF(query1) then
ORG_MD:=Trim(IBQuery_FieldByName_s(query1, 'PARAM_VALUE'));
t:='select a.email from docs d left join agents a on d.agent_id=a.id where d.id='+doc_id;
query1:=ExecIBQuery(trn,t,1);
if not IBQUERY_EOF(query1) then
adr_poluch:=IBQuery_FieldByName_s(query1, 'EMAIL');
if (trim(adr_otprav)<>'') and (trim(adr_poluch)<>'') then
mb_res:=application.messagebox(PChar('У контрагента быд обнаружен электронный адрес.'+#13#10+'Отправить докумен как электронную накладную?'),'',$00000004+$00000020)
else
exit;
if mb_res<>6 then
exit;
con:=CreateADOConnection('Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=dBASE IV;User ID=Admin;Password=;Data Source='+katalog);
if not FileExists(katalog+'temp.dbf') then
begin
t:='CREATE TABLE temp (DOCNUM CHAR(50),DOCDATE DATE,TOVAR CHAR(250),ORIG_TOVAR CHAR(250),SER CHAR(100),'+
'QUANT NUMERIC(18,5),PRICE_Z NUMERIC(18,5),PRICE_O NUMERIC(15,5),NDSO NUMERIC(18,5),SUM_NDSO NUMERIC(18,5),'+
'PRICE_R NUMERIC(18,5),IZG CHAR(250),SERT CHAR(250),SDSERT DATE,KEMVSERT CHAR(250),REGN CHAR(250),DATESERT DATE,'+
'GODENDO DATE,NGTD CHAR(250),STRANA CHAR(250),PRICE NUMERIC(18,5),BARCODE CHAR(250),GNVLS CHAR(10),'+
'ORIG_CODE CHAR(100),PART CHAR(10),SUM_NDSR NUMERIC(18,5),SKLAD_ID CHAR(150),MARKING CHAR(10),'+
'ACCEPTTYPE CHAR(10),GTIN_SUBJ CHAR(50))';
//m_manager.Logit(t);
ExecADOQuery(con, t);
end
t:='select abs(dd.summa_o) as summa_o,abs(dd.price*quant) as summa, d.vnum,cast(d.commitdate as dm_date) as commitdate,'+
'dd.sname,dd.seria,abs(dd.quant) as quant,iif(dd.price_z is null,0,dd.price_z) as price_z,'+
'iif(dd.price_r is null,0,dd.price_r) as price_r,dd.nds,-dd.sum_ndso as SUM_NDSO,dd.price_r,dd.sizg,'+
'dd.sert,iif(dd.sdsert is null,''01.01.2000'', cast(dd.sdsert as dm_date )) as sdsert,dd.kemvsert,dd.regn,'+
'iif(dd.datesert is null,''01.01.2000'',cast(dd.datesert as dm_date )) as datesert,'+
'iif(dd.godendo is null,''01.01.2000'',cast(dd.godendo as dm_date )) as godendo,dd.ngtd,dd.SCOUNTRY,dd.price,dd.BCODE_IZG,dd.part_id,'+
'iif(dd.mmbsh containing ''ЖНВЛС'',1,0) as gnvls,iif(dd.mmbsh containing ''делим'',1,0) as part,dd.MARKING, '+
'(select (select a.caption from agents a where a.id=pr.agent_id) from PR_GETMOTHERPART(dd.part_id) pr) as sklad_id '+
'from vw_doc_detail_active dd left join vw_docs d on dd.doc_id=d.id where d.id='+doc_id;
ExecADOquery(con, 'delete from temp.dbf');
//m_manager.Logit(t);
query1:=ExecIBQuery(trn,t,1);
while not IBQUERY_EOF(query1) do
begin
t:='insert into temp (DOCNUM,DOCDATE,TOVAR,ORIG_TOVAR,SER,QUANT,PRICE_Z,PRICE_O,NDSO,SUM_NDSO,PRICE_R,'
+'IZG,SERT,SDSERT,KEMVSERT,REGN,DATESERT,GODENDO,NGTD,STRANA,PRICE,BARCODE,GNVLS,ORIG_CODE,PART,SUM_NDSR,SKLAD_ID,MARKING,ACCEPTTYPE,GTIN_SUBJ) values (';
t:=t+''''+DOCNUM+''',';
try if length(DOCDATE) < 5 then t:=t+'''0:0:0'',' else t:=t+''''+stringreplace(DOCDATE,'''','',1)+''','; except t:=t+'''0:0:0'','; end;
t:=t+''''+SS_filename(IBQuery_FieldByName_s(query1, 'sname'))+''',';
t:=t+''''+SS_filename(IBQuery_FieldByName_s(query1, 'sname'))+''',';
t:=t+''''+SS_filename(IBQuery_FieldByName_s(query1, 'seria'))+''',';
try if IBQuery_FieldByName_s(query1, 'quant') = '' then t:=t+'0,' else t:=t+stringreplace(IBQuery_FieldByName_s(query1, 'quant'),',','.',1)+','; except t:=t+'0,'; end;
try if IBQuery_FieldByName_s(query1, 'price_z') = '' then t:=t+'0,' else t:=t+stringreplace(IBQuery_FieldByName_s(query1, 'price_z'),',','.',1)+','; except t:=t+'0,'; end;
try if IBQuery_FieldByName_s(query1, 'SUMMA_O') = '' then t:=t+'0,' else t:=t+stringreplace(IBQuery_FieldByName_s(query1, 'SUMMA_O'),',','.',1)+','; except t:=t+'0,'; end;
try if IBQuery_FieldByName_s(query1, 'NDS') = '' then t:=t+'0,' else t:=t+stringreplace(IBQuery_FieldByName_s(query1, 'NDS'),',','.',1)+','; except t:=t+'0,'; end;
try if IBQuery_FieldByName_s(query1, 'SUM_NDSO') = '' then t:=t+'0,' else t:=t+stringreplace(IBQuery_FieldByName_s(query1, 'SUM_NDSO'),',','.',1)+','; except t:=t+'0,'; end;
try if IBQuery_FieldByName_s(query1, 'price_r') = '' then t:=t+'0,' else t:=t+stringreplace(IBQuery_FieldByName_s(query1, 'price_r'),',','.',1)+','; except t:=t+'0,'; end;
t:=t+''''+SS_filename(IBQuery_FieldByName_s(query1, 'sizg'))+''',';
t:=t+''''+SS_filename(IBQuery_FieldByName_s(query1, 'sert'))+''',';
try if length(IBQuery_FieldByName_s(query1, 'sdsert')) < 5 then t:=t+'''0:0:0'',' else t:=t+''''+stringreplace(IBQuery_FieldByName_s(query1, 'sdsert'),'''','',1)+''','; except t:=t+'''0:0:0'','; end;
t:=t+''''+SS_filename(IBQuery_FieldByName_s(query1, 'KEMVSERT'))+''',';
t:=t+''''+SS_filename(IBQuery_FieldByName_s(query1, 'REGN'))+''',';
try if length(IBQuery_FieldByName_s(query1, 'DATESERT')) < 5 then t:=t+'''0:0:0'',' else t:=t+''''+stringreplace(IBQuery_FieldByName_s(query1, 'DATESERT'),'''','',1)+''','; except t:=t+'''0:0:0'','; end;
try if length(IBQuery_FieldByName_s(query1, 'GODENDO')) < 5 then t:=t+'''0:0:0'',' else t:=t+''''+stringreplace(IBQuery_FieldByName_s(query1, 'GODENDO'),'''','',1)+''','; except t:=t+'''0:0:0'','; end;
t:=t+''''+SS_filename(IBQuery_FieldByName_s(query1, 'NGTD'))+''',';
t:=t+''''+SS_filename(IBQuery_FieldByName_s(query1, 'SCOUNTRY'))+''',';
try if IBQuery_FieldByName_s(query1, 'price') = '' then t:=t+'0,' else t:=t+stringreplace(IBQuery_FieldByName_s(query1, 'price'),',','.',1)+','; except t:=t+'0,'; end;
t:=t+''''+SS_filename(IBQuery_FieldByName_s(query1, 'BCODE_IZG'))+''',';
try if IBQuery_FieldByName_s(query1, 'gnvls') = '' then t:=t+'0,' else t:=t+IBQuery_FieldByName_s(query1, 'gnvls')+','; except t:=t+'0,'; end;
t:=t+''''+SS_filename(IBQuery_FieldByName_s(query1, 'part_id'))+''',';
t:=t+''''+SS_filename(IBQuery_FieldByName_s(query1, 'part'))+''',';
t:=t+'0,';
t:=t+''''+SS_filename(IBQuery_FieldByName_s(query1, 'SKLAD_ID'))+''',';
t:=t+''''+SS_filename(IBQuery_FieldByName_s(query1, 'MARKING'))+''',';
t:=t+'1,';
t:=t+''''+stringreplace(ORG_MD,'''','',1)+''')';
//m_manager.Logit(t);
ExecADOquery(con, t);
IBQUERY_NEXT(query1);
end
FreeADOConnection(con);
f:=katalog+organization+' №'+docnum+' от '+docdate+'.dbf';
m_manager.Logit('Пробуем отправить по почте файл '+f);
copyfile(katalog+'temp.dbf',f,true);
sUser := Copy(adr_otprav, 1, Pos('@', adr_otprav)-1);
//m_manager.Logit(sUser);
t:=ssl+' host='+adr_smtp+' port='+adr_port+' User='+sUser+' Pass='+adr_psw+' FROMEMAIL='+adr_otprav+' TOEMAIL='+adr_poluch+' SUBJ="Электронные накладные" BODY="Электронные накладные" file0="'+f+'"';
m_manager.logit(katalog+'VGMCSend.exe '+t);
i:=ShellExecute(0, 'open',katalog+'VGMCSend.exe', t, '', 5);
if i<32 then
begin
showmessage('Ошибка отправки почты: '+ShellExecuteError(i));
exit;
end
//deletefile(f);
m_manager.logit('Электронная накладная от '+adr_otprav+' с вложением "'+organization+' №'+docnum+' от '+docdate+'.dbf" для '+adr_poluch+' отправляется, через 5-10 минут отобразиться у получателя');
end.
Настройка под работу с УСН (2 предприятия)
Выполнить скрипт
Файл:МДЛП - настройка под УСН для точки-.txt
Настроить кассовое место
- перезапустить кассира
- для предприятия -10 скопировать настройки
- настроить режим работы с УСН
- скопировать настройки для всех пользователей
Подключение регистратора выбытия (РВ, регистратор выбытия)
Файл:Подключение регистратора выбытия.doc
запрет на снятие группы МДЛП для остатков (не обязательно ставить)
SET SQL DIALECT 3;
SET TERM ^ ;
CREATE OR ALTER TRIGGER GROUP_DETAIL_982164_BD0 FOR GROUP_DETAIL
ACTIVE BEFORE DELETE POSITION 0
AS
begin
--ставим запрет на снятие группы МДЛП, т.к. по непонятным причинам эта группа снимается
if ((old.group_id = -43) and (old.grouptable='PARTS')) then
if (exists(select id from mark_detail m where m.part_id = cast(old.grouptable_id as dm_id) )) then
exception EX_WRONG_OPER ' Позиция маркирована. Сброс группы запрещен. (Партия '||old.grouptable_id||')';
end
^
SET TERM ; ^
Инструкции
Маркировка лекарственных средств
