SET TERM ^ ; create or alter procedure PR_CHANGEBASEAGENTID ( DOC_ID integer) returns ( COMMENTS DM_TEXT, DOC_ID_OFF integer) as declare variable LINK_ID integer; declare variable BASE_AGENT_ID_OFF integer; declare variable DOC_ID_CURR integer; declare variable PART_ID_CURR integer; declare variable QUANT DM_DOUBLE; declare variable DOC_ID_NEW integer; declare variable COMMITDATE DM_DATETIME; declare variable SESSION_ID integer; declare variable DDA_ID integer; declare variable M_PID integer; declare variable NEW_PART_ID integer; declare variable ID integer; declare variable RASHOD_MINUS integer; declare variable EGAIS_ID DM_TEXT; declare variable OLD_CHEQUE DM_TEXT; begin --2023-6-20 A.K. 1066558 COMMENTS=''; DOC_ID_NEW=null; DOC_ID_OFF=DOC_ID; --Включаем расход в минус, принудительно select param_value from params where param_id='RASHOD_MINUS' into :RASHOD_MINUS; update params set param_value = 1 where param_id='RASHOD_MINUS'; --По настройкам определяем офиц. юр. лицо для данной точки -- select WEBKASSA from g$profiles g where g.id = (select param_value from params p where p.param_id= 'CODE_PROFILE') into :BASE_AGENT_ID_OFF; BASE_AGENT_ID_OFF = 44; --неофицальный склад2 select link_id from docs d where d.id = :DOC_ID and doc_type in (3) and status = 0 into :LINK_ID; if (:LINK_ID is null) then begin COMMENTS = 'Ошибка! Неправильный тип документа'; suspend; exit; end --Определяем, есть ли чек с офиц. предприятием, если нет - делаем текущий чек на оф. предприятие if (not exists(select id from docs d where link_id=:LINK_ID and d.base_agent_id = :BASE_AGENT_ID_OFF)) then update docs set base_agent_id = :BASE_AGENT_ID_OFF where id = :DOC_ID_OFF; else select id from docs d where link_id=:LINK_ID and d.base_agent_id = :BASE_AGENT_ID_OFF into :DOC_ID_OFF; --Определяем все позиции в текущем чеке (чеках), у которых предприятие <> офиц. юр. лицу for select id, commitdate, AUDIT_ID from docs d where link_id=:LINK_ID order by id into :doc_id_curr, :commitdate, :session_id do for select part_id, abs(quant) from doc_detail_active da where da.doc_id = :doc_id_curr and da.base_agent_id <> :BASE_AGENT_ID_OFF into :PART_ID_CURR, :QUANT do begin if (DOC_ID_NEW is null) then select pr.doc_id from pr_newdoc(7,-1,0,null,:commitdate,:session_id) pr into :DOC_ID_NEW; --устанавливаем новое предприятие dda_id=Null; select id from pr_correctpart(:DOC_ID_NEW,:PART_ID_CURR,:QUANT) into :dda_id; if (dda_id is null or dda_id = 0) then exception ex_debug; update DOC_DETAIL_ACTIVE set base_agent_id = :BASE_AGENT_ID_OFF where id=:dda_id; end --Подменяем группы после корректировки в исходном чеке if (DOC_ID_NEW is not null) Then begin -- update docs d set d.egais_id = :doc_id where d.id = :DOC_ID_NEW; --2021-04-12 A.K. 988255 execute procedure PR_DOC_COMMIT(:DOC_ID_NEW,:session_id); for select p.motherpart_id,id from parts p where doc_id=:DOC_ID_NEW into :M_PID, :new_part_id do begin --955409 2020-01-28 A.K. update doc_detail_active set part_id=:new_part_id where doc_id in (select id from docs d where link_id=:LINK_ID) and part_id=:m_pid; execute procedure pr_setpartrealquant(:new_part_id,:DOC_ID); end end --Преносим все позиции на документ с оф. предприятием for select id from docs d where link_id=:LINK_ID order by id into :ID do begin update doc_detail_active set doc_id = :DOC_ID_OFF, base_agent_id= :BASE_AGENT_ID_OFF where doc_id = :ID; --995798 A.K. 2021-07-22 сначала запоминаем связки -- select first 1 egais_id, id from docs d where id = :id and id <> :DOC_ID_OFF into :egais_id, :old_cheque; -- update docs set egais_id = null where id = :id and id <> :DOC_ID_OFF; delete from docs where id = :id and id <> :DOC_ID_OFF; update docs d set d.egais_id = :DOC_ID_NEW where (id = :doc_id or link_id=:LINK_ID); --2021-04-12 A.K. 988255 --995798 A.K. 2021-07-22 переписываем связки на новый чек -- update docs d set egais_id = :egais_id where (id = :id or link_id=:LINK_ID); -- update docs d set egais_id = :DOC_ID_OFF where egais_id = :old_cheque; end --Доп проверка if ((select count(1) from docs where link_id=:LINK_ID)>1) then exception ex_debug; --955409 2020-01-28 A.K. for select id from docs d where link_id=:LINK_ID order by id into :ID do begin if (exists(select da.id from doc_detail_active da left join parts p on p.id = da.part_id where da.base_agent_id<>p.base_agent_id and da.doc_id = :id)) Then exception EX_WRONG_OPER ' Ошибка в чеке! Обратитесь в Стандарт-Н'; end for select w.part_id from warebase w where quant <> realquant into :ID do execute procedure pr_setpartrealquant(:ID,0); --Возвращаем как было update params set param_value = :RASHOD_MINUS where param_id='RASHOD_MINUS'; suspend; end^ SET TERM ; ^ /* Следующие операторы GRANT сгенерированы автоматически */ GRANT SELECT,UPDATE ON PARAMS TO PROCEDURE PR_CHANGEBASEAGENTID; GRANT SELECT,DELETE,UPDATE ON DOCS TO PROCEDURE PR_CHANGEBASEAGENTID; GRANT SELECT,UPDATE ON DOC_DETAIL_ACTIVE TO PROCEDURE PR_CHANGEBASEAGENTID; GRANT EXECUTE ON PROCEDURE PR_NEWDOC TO PROCEDURE PR_CHANGEBASEAGENTID; GRANT EXECUTE ON PROCEDURE PR_CORRECTPART TO PROCEDURE PR_CHANGEBASEAGENTID; GRANT EXECUTE ON PROCEDURE PR_DOC_COMMIT TO PROCEDURE PR_CHANGEBASEAGENTID; GRANT SELECT ON PARTS TO PROCEDURE PR_CHANGEBASEAGENTID; GRANT EXECUTE ON PROCEDURE PR_SETPARTREALQUANT TO PROCEDURE PR_CHANGEBASEAGENTID; GRANT SELECT ON WAREBASE TO PROCEDURE PR_CHANGEBASEAGENTID; /* Существующие привилегии на эту процедуру */ GRANT EXECUTE ON PROCEDURE PR_CHANGEBASEAGENTID TO SYSDBA; SET SQL DIALECT 3; SET TERM ^ ; CREATE OR ALTER TRIGGER DOCS_BD0_979340 FOR DOCS ACTIVE BEFORE DELETE POSITION 0 AS declare variable CANCEL_RESULT dm_id; declare variable correct_doc_id dm_id; begin --Отмена корректировки чека 1066558 А.К. 2023-06-26 if (coalesce(old.egais_id,'')<> '') then if (old.doc_type = 3) then select CANCEL_RESULT from PR_DOC_CANCEL(cast(old.egais_id as dm_id), 0, 1, 0) into :CANCEL_RESULT; end ^ SET TERM ; ^ INSERT INTO GROUP_DETAIL (ID, GROUP_ID, PARENT_ID, GROUPTABLE_ID, INSERTDT, GROUPTABLE, PACKET, D$UUID, D$SRVUPDDT) VALUES (19516, -7, 0, '44', '28-FEB-2022 17:08:20.936', 'AGENTS', 23360, '85B0E946-B048-47BE-B151-4CDA62CAA201', '28-FEB-2022 17:08:20'); 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, D$UUID, D$SRVUPDDT, EGAIS_ID, EGAIS_COUNTRY_ID, EGAIS_REGION_ID, FILEMASK, MARK_TYPE, PARENT_ID, AGENT_PLACE_ID, GLOBAL_AGENT_ID, AGENT_TYPE, OGRN, TRUSTED) VALUES (44, 'Склад 2', 'Склад 2', 0, 0, 0, '2-FEB-2017 12:58:51', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, 'B4E05A12-B84E-441A-B00D-15EDF0FBBD1E', '20-DEC-2018 12:20:31', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); INSERT INTO GROUPS (ID, PARENT_ID, CAPTION, GROUPTABLE, STATUS, INSERTDT, SYSTEMFLAG, DESCRIPTION, IMAGEINDEX, DATA, COLOR, SORTING, BASE_AGENT_ID, SID, D$UUID, D$SRVUPDDT, EAN13) VALUES (4444, -300, 'Подготовить чек', 'SCRIPTS_KASSA', 0, '20-JUN-2023 12:49:10.002', 0, NULL, -1, NULL, NULL, NULL, 0, NULL, '6288495E-46BB-4BA2-A9BF-65EB4E44A8FD', '1-JAN-2000 00:00:00', NULL);