DEPO: обработка BJ_ORDER_REJECTED (отказ НРД по поручению) — MSSQL и Firebird
По ответу программиста Fancy от 28.10.2026: - операция не создаётся, входящая запись D_FILER не меняется (поручение было); - в строке D_CLISER_M2M_DOL.DEP_TEXT — «Отказ НРД: » + PARAMETERS (номер и дата отчёта НРД, без номера — текст отказа); - документ: все строки отвергнуты — «Отмена обработки» (3); строки разошлись (одна исполнена, другая отвергнута, в любом порядке) — «Частично обработан» (OD_DOC_STATES.SYS_NAME = IN_PROCESS, ID у баз разный: 869 / 762); по другим строкам ответа ещё нет — состояние не меняется. BJ_ORDER_ACCEPTED при уже отвергнутой строке ставит «Частично обработан» вместо «Конец обработки». Проверено: MSSQL — тестовая DEPO в транзакции с откатом (A: 2→869, B: 127→869, D: 127→3); Firebird — база SPI с триггерами Fancy (A–D, OUT с отказом без номера) и smoke на заглушках. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
@@ -40,6 +40,9 @@ declare
|
||||
@DD_DATE datetime,
|
||||
@DD_NUM varchar(64),
|
||||
@STATE int,
|
||||
@LINES int,
|
||||
@LINES_ACCEPTED int,
|
||||
@LINES_REJECTED int,
|
||||
@RAISERROR varchar(64) = null;
|
||||
|
||||
select
|
||||
@@ -99,6 +102,20 @@ values
|
||||
print @EVENT_TYPE;
|
||||
|
||||
|
||||
--3a. Исход по строкам документа: у каждой бумаги свое поручение НРД, строки могут разойтись
|
||||
--(одна исполнена BJ_ORDER_ACCEPTED, другая отвергнута BJ_ORDER_REJECTED) - тогда документ «Частично обработан»
|
||||
if @EVENT_TYPE in ('BJ_ORDER_ACCEPTED', 'BJ_ORDER_REJECTED')
|
||||
select
|
||||
@LINES = count(*),
|
||||
@LINES_ACCEPTED = count(A.REFERENCE),
|
||||
@LINES_REJECTED = count(R.REFERENCE)
|
||||
from D_CLISER_M2M_DOL F
|
||||
join OD_DOLS L on L.ID = F.DOL
|
||||
left join (select distinct REFERENCE from FTV_M2M_EVENTS where GUID = @GUID and EVENT_TYPE = 'BJ_ORDER_ACCEPTED' and isnull(STATE, '') <> 'ERROR') A on A.REFERENCE = F.DOL_REF
|
||||
left join (select distinct REFERENCE from FTV_M2M_EVENTS where GUID = @GUID and EVENT_TYPE = 'BJ_ORDER_REJECTED' and isnull(STATE, '') <> 'ERROR') R on R.REFERENCE = F.DOL_REF
|
||||
where L.DOC = @CLISER_ID;
|
||||
|
||||
|
||||
--4. ОБРАБОТКА КАЖДОГО ТИПА СОБЫТИЯ
|
||||
-- https://lic.zetit.ru/docs/fancy-events
|
||||
|
||||
@@ -161,11 +178,28 @@ else
|
||||
if @EVENT_TYPE = 'BJ_ORDER_ACCEPTED' begin
|
||||
--Создаем операцию и проводим ее
|
||||
exec FTV_M2M_PROCESS_OPERATION @GUID, @REFERENCE, @EVENT_DATE, @PARAMETERS, @OPER_ID out;
|
||||
update OD_DOCS set ID = 0, STATE = 2 where ID = @CLISER_ID; -- FINAL - Конец обработки (в архиве)
|
||||
if @LINES_REJECTED > 0 begin
|
||||
select @STATE = ID from OD_DOC_STATES where SYS_NAME = 'IN_PROCESS';
|
||||
update OD_DOCS set ID = 0, STATE = isnull(@STATE, 2) where ID = @CLISER_ID; --IN_PROCESS = Частично обработан: другая строка отвергнута НРД
|
||||
end
|
||||
else
|
||||
update OD_DOCS set ID = 0, STATE = 2 where ID = @CLISER_ID; -- FINAL - Конец обработки (в архиве)
|
||||
end
|
||||
|
||||
--BJ_ORDER_REJECTED
|
||||
--TODO задал вопрос 16.10.2026
|
||||
else
|
||||
if @EVENT_TYPE = 'BJ_ORDER_REJECTED' begin
|
||||
--НРД отверг поручение по строке (отчет MS010). В PARAMETERS - номер и дата отчета НРД, если номера нет - текст отказа.
|
||||
--Операцию не создаем; входящую запись D_FILER не трогаем - поручение было (ответ на вопрос от 16.10.2026)
|
||||
update D_CLISER_M2M_DOL set DEP_TEXT = left('Отказ НРД: ' + isnull(@PARAMETERS, ''), 255) where DOL = @DOL_ID;
|
||||
if @LINES_ACCEPTED > 0 begin
|
||||
select @STATE = ID from OD_DOC_STATES where SYS_NAME = 'IN_PROCESS';
|
||||
update OD_DOCS set ID = 0, STATE = isnull(@STATE, 2) where ID = @CLISER_ID; --IN_PROCESS = Частично обработан: другая строка исполнена
|
||||
end
|
||||
else
|
||||
if @LINES_REJECTED = @LINES
|
||||
update OD_DOCS set ID = 0, STATE = 3 where ID = @CLISER_ID; --REJECT = Отмена обработки: отвергнуты все строки
|
||||
--иначе по другим строкам ответа НРД еще нет - состояние документа не меняем
|
||||
end
|
||||
|
||||
--BJ_EXECUTED
|
||||
--Оно уже в событии BJ_ORDER_ACCEPTED в финале и с проводками, что делать-то?
|
||||
|
||||
Reference in New Issue
Block a user