DEPO: процедуры bj2depo — актуальные тексты с тестовой базы + FTV_M2M_UPDATE_HANDBOOK
В bj и deploy/depo/fancy-m2m лежали тексты на 23.09; программист Фонтвьель менял процедуры 09–21.10 (EVENTS: новая логика и вызов UPDATE_HANDBOOK; OPERATION: @PARAMETERS, счёт ностро 313 вместо 314; JOB, CREATE). Сняты с BJ_DEPO_DATA (10.10.10.21) 22.10.2026 без изменений, CREATE → CREATE OR ALTER. Добавлена FTV_M2M_UPDATE_HANDBOOK (её вызывает EVENTS). Порядок: WIRING → OPERATION → UPDATE_HANDBOOK → EVENTS → CREATE → JOB. Проверено на тесте: все 6 применяются в транзакции без ошибок (откат). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
@@ -1,277 +1,205 @@
|
||||
CREATE OR ALTER procedure [dbo].[FTV_M2M_PROCESS_EVENTS] (@ID int)
|
||||
|
||||
--grant execute on FTV_M2M_PROCESS_EVENTS to public;
|
||||
--TODO что делать если мы проставили статус не по всем строкам документа??
|
||||
|
||||
as
|
||||
set nocount on;
|
||||
|
||||
as
|
||||
set nocount on;
|
||||
/*
|
||||
Вынести создание операции в отдельную процедуру FTV_M2M_PROCESS_OPERATION (параметры - @GUID и @REFERENCE, но проверку параметров оставить тут). Будем возвращать @OPER_ID
|
||||
*/
|
||||
--if user = 'dbo' execute as user = 'SYSDBA';
|
||||
|
||||
if user = 'dbo' execute as user = 'SYSDBA';
|
||||
print 'FTV_M2M_PROCESS_EVENTS';
|
||||
print @ID;
|
||||
|
||||
|
||||
declare
|
||||
@WHOS int = 383118,
|
||||
@GUID uniqueidentifier,
|
||||
@REFERENCE varchar(255),
|
||||
@EVENT_TYPE varchar(64),
|
||||
@EVENT_DATE datetime,
|
||||
@M2M_REJECT_CODE varchar,
|
||||
@PARAMETERS nvarchar(4000),
|
||||
@DIRECTION varchar(64),
|
||||
@COMMENT varchar(MAX),
|
||||
--
|
||||
@CONTRAGENT_FACE int,
|
||||
@DEPONENT_FACE int,
|
||||
@SHARE int,
|
||||
@AMOUNT numeric(27, 7),
|
||||
@PLACE int,
|
||||
@CLIENT int,
|
||||
@FACE int,
|
||||
@CLISER_ID int,
|
||||
@DOL_ID int,
|
||||
--
|
||||
@D_CAT int,
|
||||
@NUM varchar(64),
|
||||
@D_DATE datetime,
|
||||
@OPER_ID int,
|
||||
@DD_DATE datetime,
|
||||
@DD_NUM varchar(64),
|
||||
@STATE int,
|
||||
@RAISERROR varchar(64) = null;
|
||||
|
||||
print 'FTV_M2M_PROCESS_EVENTS';
|
||||
print @ID;
|
||||
|
||||
--Обрабатываем событие по M2M-поручению
|
||||
|
||||
declare
|
||||
@WHOS int = 383118,
|
||||
@GUID uniqueidentifier,
|
||||
@REFERENCE varchar(255),
|
||||
@EVENT_TYPE varchar(64),
|
||||
@EVENT_DATE datetime,
|
||||
@M2M_REJECT_CODE varchar,
|
||||
@PARAMETERS varchar(max),
|
||||
@DIRECTION varchar(64),
|
||||
--
|
||||
@CONTRAGENT_FACE int,
|
||||
@DEPONENT_FACE int,
|
||||
@SHARE int,
|
||||
@AMOUNT numeric(27, 7),
|
||||
@PLACE int,
|
||||
@CLIENT int,
|
||||
@FACE int,
|
||||
@CLISER_ID int,
|
||||
@DOL_ID int,
|
||||
--
|
||||
@D_CAT int,
|
||||
@NUM varchar(64),
|
||||
@D_DATE datetime,
|
||||
@OPER_ID int,
|
||||
@DD_DATE datetime,
|
||||
@DD_NUM varchar(64);
|
||||
select
|
||||
@GUID = ME.GUID,
|
||||
@REFERENCE = ME.REFERENCE,
|
||||
@EVENT_TYPE = ME.EVENT_TYPE,
|
||||
@EVENT_DATE = ME.EVENT_DATE,
|
||||
@M2M_REJECT_CODE = ME.M2M_REJECT_CODE,
|
||||
@PARAMETERS = ME.PARAMETERS,
|
||||
@DIRECTION = M.DIRECTION,
|
||||
@CLISER_ID = H.DOC,
|
||||
@DOL_ID = F.DOL,
|
||||
@DD_DATE = cast(D.D_DATE as date),
|
||||
@DD_NUM = D.NUM,
|
||||
@SHARE = F.SHARE,
|
||||
@AMOUNT = F.AMOUNT,
|
||||
@PLACE = F.PLACE,
|
||||
@CLIENT = F.CLIENT,
|
||||
@FACE = H.DEPONENT
|
||||
from FTV_M2M_EVENTS ME
|
||||
left join FTV_M2M_LINES ML on ML.GUID = ME.GUID and ML.REFERENCE = ME.REFERENCE
|
||||
left join FTV_M2M M on M.GUID = ME.GUID
|
||||
left join D_CLISER_M2M_DOL F on F.DOL_REF = ME.REFERENCE
|
||||
left join D_CLISER_M2M H on H.DOC_GUID = ME.GUID
|
||||
left join OD_DOCS D on D.ID = H.DOC
|
||||
where ME.ID = @ID;
|
||||
|
||||
|
||||
--1. Обновление справоника участников сервмса
|
||||
if @EVENT_TYPE = 'HANDBOOK' begin
|
||||
exec FTV_M2M_UPDATE_HANDBOOK @COMMENT out;
|
||||
update FTV_M2M_EVENTS set COMMENT = @COMMENT where ID = @ID;
|
||||
return;
|
||||
end;
|
||||
|
||||
|
||||
--2. Критические ошибки (TODO другте обязательные поля)
|
||||
if @GUID is null raiserror ('Не указан GUID', 16, 1);
|
||||
if @REFERENCE is null raiserror ('Не указан REFERENCE', 16, 1);
|
||||
if @DOL_ID is null raiserror ('Не найдена строка M2M-поручение по GUID + REFERENCE', 16, 1);
|
||||
|
||||
|
||||
-- FTV_M2M_EVENTS.REFERENCE может быть пустой, в этом случае событие относится ко всему М2М-поручению
|
||||
select
|
||||
@GUID = ME.GUID,
|
||||
@REFERENCE = ME.REFERENCE,
|
||||
@EVENT_TYPE = ME.EVENT_TYPE,
|
||||
@EVENT_DATE = ME.EVENT_DATE,
|
||||
@M2M_REJECT_CODE = ME.M2M_REJECT_CODE,
|
||||
@DIRECTION = M.DIRECTION
|
||||
from FTV_M2M_EVENTS ME
|
||||
left join FTV_M2M M on M.GUID = ME.GUID
|
||||
where ME.ID = @ID;
|
||||
--3. Пишем в признаки документа
|
||||
insert into OD_INVALIDS (DOC, STATUS, COMMENT, DO_ING)
|
||||
values
|
||||
(
|
||||
@CLISER_ID,
|
||||
0,
|
||||
FORMAT(@EVENT_DATE, 'dd.MM.yyyy HH:mm:ss') + ' - ' + @EVENT_TYPE + coalesce (' (референс - ' + @REFERENCE + ')', '') + coalesce (' (параметры - ' + @PARAMETERS + ')', ''),
|
||||
'Время начала обработки: ' + FORMAT(GETDATE(), 'dd.MM.yyyy HH:mm:ss')
|
||||
);
|
||||
|
||||
if @REFERENCE is null begin
|
||||
--Не все события могут быть применены ко всему М2М-поручению
|
||||
if not (@EVENT_TYPE in ('BJ_RECEIVED', 'BJ_SENT', 'BJ_ORDER_SENT', 'BJ_ORDER_ACCEPTED', 'BJ_EXECUTED') or @EVENT_TYPE like 'BJ_QUIK_%')
|
||||
raiserror ('Событие этого типа не может быть указано без REFERENCE', 16, 1);
|
||||
|
||||
select
|
||||
@REFERENCE = ME.REFERENCE,
|
||||
@CLISER_ID = H.DOC,
|
||||
@DOL_ID = F.DOL,
|
||||
@DD_DATE = cast(D.D_DATE as date),
|
||||
@DD_NUM = D.NUM,
|
||||
@SHARE = F.SHARE,
|
||||
@AMOUNT = F.AMOUNT,
|
||||
@PLACE = F.PLACE,
|
||||
@CLIENT = F.CLIENT,
|
||||
@FACE = H.DEPONENT
|
||||
from FTV_M2M_EVENTS ME
|
||||
left join FTV_M2M_LINES ML on ML.GUID = ME.GUID and ML.REFERENCE = ME.REFERENCE
|
||||
left join FTV_M2M M on M.GUID = ME.GUID
|
||||
left join D_CLISER_M2M_DOL F on F.DOL_REF = ME.REFERENCE
|
||||
left join D_CLISER_M2M H on H.DOC_GUID = ME.GUID
|
||||
left join OD_DOCS D on D.ID = H.DOC
|
||||
where ME.ID = @ID;
|
||||
end
|
||||
else begin
|
||||
select
|
||||
@REFERENCE = ME.REFERENCE,
|
||||
@CLISER_ID = H.DOC,
|
||||
@DOL_ID = F.DOL,
|
||||
@DD_DATE = cast(D.D_DATE as date),
|
||||
@DD_NUM = D.NUM,
|
||||
@SHARE = F.SHARE,
|
||||
@AMOUNT = F.AMOUNT,
|
||||
@PLACE = F.PLACE,
|
||||
@CLIENT = F.CLIENT,
|
||||
@FACE = H.DEPONENT
|
||||
from FTV_M2M_EVENTS ME
|
||||
left join FTV_M2M_LINES ML on ML.GUID = ME.GUID and ML.REFERENCE = ME.REFERENCE
|
||||
left join FTV_M2M M on M.GUID = ME.GUID
|
||||
left join D_CLISER_M2M_DOL F on F.DOL_REF = ME.REFERENCE
|
||||
left join D_CLISER_M2M H on H.DOC_GUID = ME.GUID
|
||||
left join OD_DOCS D on D.ID = H.DOC
|
||||
where ME.ID = @ID;
|
||||
|
||||
--Критические ошибки
|
||||
if @DOL_ID is null
|
||||
raiserror ('Не найдена строка M2M-поручение по GUID + REFERENCE', 16, 1);
|
||||
end;
|
||||
|
||||
|
||||
--Пишем в признаки документа
|
||||
insert into OD_INVALIDS (DOC, STATUS, COMMENT, DO_ING)
|
||||
values (
|
||||
@CLISER_ID,
|
||||
0,
|
||||
'Обработано событие: ' + FORMAT(@EVENT_DATE, 'dd.MM.yyyy HH:mm:ss') + ' - ' + @EVENT_TYPE + coalesce (' (референс - ' + @REFERENCE + ')', '') + coalesce (' (парамерты - ' + @PARAMETERS + ')', ''),
|
||||
'Время начала обработки: ' + FORMAT(GETDATE(), 'dd.MM.yyyy HH:mm:ss')
|
||||
)
|
||||
|
||||
print @EVENT_TYPE;
|
||||
|
||||
--ОБРАБОТКА КАЖДОГО ТИПА СОБЫТИЯ
|
||||
|
||||
if @EVENT_TYPE = 'BJ_RECEIVED' and @DIRECTION = 'OUT' begin
|
||||
update OD_DOCS set ID = 0, STATE = 1 where ID = @CLISER_ID; --START - Начало обработки (зарегистрирован)
|
||||
end
|
||||
|
||||
else
|
||||
if @EVENT_TYPE = 'BJ_SENT' and @DIRECTION = 'IN' begin
|
||||
update OD_DOCS set ID = 0, STATE = 1 where ID = @CLISER_ID; --START - Начало обработки (зарегистрирован)
|
||||
end
|
||||
|
||||
else
|
||||
if @EVENT_TYPE = 'BJ_DECISION_REJECT' and @DIRECTION = 'IN' begin
|
||||
--M2M_STATUS = 10 TODO!!!!!!!!!!!!!!!!!
|
||||
update D_CLISER_M2M_DOL set M2M_STATUS = 10, M2M_TEXT = '???' where DOL = @DOL_ID;
|
||||
--только если отказ по всем строкам подвала документа
|
||||
if not exists (select top 1 DOL from D_CLISER_M2M_DOL F left join OD_DOLS L on L.ID = F.DOL where L.DOC = @CLISER_ID and (M2M_STATUS is null or M2M_TEXT is null)) begin
|
||||
update OD_DOCS set ID = 0, STATE = 3 where ID = @CLISER_ID; --REJECT - Отмена обработки
|
||||
end;
|
||||
end
|
||||
|
||||
else
|
||||
if @EVENT_TYPE = 'BJ_CP_REJECT' and @DIRECTION = 'OUT' begin
|
||||
--M2M_STATUS = 10 TODO!!!!!!!!!!!!!!!!!
|
||||
update D_CLISER_M2M_DOL set M2M_STATUS = 10, M2M_TEXT = '???' where DOL = @DOL_ID;
|
||||
--только если отказ по всем строкам подвала документа
|
||||
--TODO зачем проверять все строки подвала, если мы не будем делать многострочные исходящие???
|
||||
if not exists (select top 1 DOL from D_CLISER_M2M_DOL F left join OD_DOLS L on L.ID = F.DOL where L.DOC = @CLISER_ID and (M2M_STATUS is null or M2M_TEXT is null)) begin
|
||||
update OD_DOCS set ID = 0, STATE = 3 where ID = @CLISER_ID; --REJECT - Отмена обработки
|
||||
end;
|
||||
end
|
||||
|
||||
else
|
||||
--TODO что делать если мы проставили статус не по всем строкам документа??
|
||||
if @EVENT_TYPE = 'BJ_DECISION_CONFIRM' and @DIRECTION = 'IN' begin
|
||||
update OD_DOCS set ID = 0, STATE = 1 where ID = @CLISER_ID; --START - Начало обработки (зарегистрирован) --ОНО И ТАК УЖЕ ДОЛЖНО БЫТЬ В ЭТОМ СОСТОЯНИИ!!!
|
||||
end
|
||||
|
||||
else
|
||||
--TODO что делать если контрагент проставил статус не по всем строкам документа??
|
||||
if @EVENT_TYPE = 'BJ_CP_CONFIRM' and @DIRECTION = 'OUT' begin
|
||||
update OD_DOCS set ID = 0, STATE = 1 where ID = @CLISER_ID; --START - Начало обработки (зарегистрирован) --ОНО И ТАК УЖЕ ДОЛЖНО БЫТЬ В ЭТОМ СОСТОЯНИИ!!!
|
||||
end
|
||||
|
||||
else
|
||||
if @EVENT_TYPE = 'BJ_SERVICE_ERROR' or @EVENT_TYPE = 'BJ_CANCELLED' begin
|
||||
update OD_DOCS set ID = 0, STATE = 3 where ID = @CLISER_ID; --REJECT - Отмена обработки
|
||||
end
|
||||
|
||||
else
|
||||
if @EVENT_TYPE = 'BJ_ORDER_ACCEPTED' begin
|
||||
-----TODO exec FTV_M2M_PROCESS_OPERATION @GUID, @REFERENCE, @EVENT_DATE, @OPER_ID out;
|
||||
|
||||
--Направление
|
||||
select @D_CAT = DC.ID
|
||||
from OD_DOC_CATS DC
|
||||
where DC.SYS_NAME = case when @DIRECTION = 'IN' then 'OP_INV_ZACH' else 'OP_INV_SPIS' end;
|
||||
|
||||
set @D_DATE = @EVENT_DATE;
|
||||
|
||||
exec GEN_ID 'OD_DOC_ID_GEN', 1, @OPER_ID out;
|
||||
exec FU_NEXT_DOC_NUM @D_CAT, @D_DATE, null, @OPER_ID, @NUM out, @D_DATE out;
|
||||
|
||||
insert into OD_DOCS (ID, NUM, PARAM, D_CAT, D_DATE, STATE, DIRECTION, WHOS, KVIT)
|
||||
values (@OPER_ID, @NUM, null, @D_CAT, @D_DATE, 0, 0, @WHOS, @CLISER_ID);
|
||||
|
||||
if @DIRECTION = 'IN' begin
|
||||
--порядок полей - по форме документа (сверху вниз)
|
||||
insert into U_OP_INV_ZACH
|
||||
(
|
||||
DOC,
|
||||
DD_TYPE,
|
||||
DD_DATE, DD_NUM,
|
||||
SHARE, AMOUNT, BLANKS,
|
||||
PLACE,
|
||||
D_NUM,
|
||||
DEPO,
|
||||
K_NUM,
|
||||
MARKET,
|
||||
CONDITION, IS_REG, TAX_R,
|
||||
B_TYPE,
|
||||
B_DATE, B_NUM,
|
||||
WIR_DATE, NOTIFY_DATE, REG_DATE,
|
||||
IS_BLOCK,
|
||||
FROM_FACE,
|
||||
REJECT_REASON,
|
||||
COMMENT
|
||||
)
|
||||
values
|
||||
(
|
||||
@OPER_ID,
|
||||
1 /*Клиентское*/,
|
||||
@DD_DATE, @DD_NUM,
|
||||
@SHARE, @AMOUNT, null,
|
||||
@PLACE,
|
||||
314, /*98015 - 0 - Ценные бумаги и цифровые активы на хранении в других депозитариях (НОСТРО депо расчетный)*/
|
||||
@CLIENT,
|
||||
836, /*98070 - 4 - Ценные бумаги и цифровые активы на торгах*/
|
||||
8106, /*ММВБ - ПАО Московская Биржа*/
|
||||
null, null, null,
|
||||
31, /*Отчет депозитария*/
|
||||
@EVENT_DATE, 'Вопрос, что тут пишем',
|
||||
@EVENT_DATE, @EVENT_DATE, @EVENT_DATE, --Берем из BJ
|
||||
0,
|
||||
@FACE,
|
||||
null, --А есди это отмена??
|
||||
'Перевод M2M (без поручения), GUID ' + cast(@GUID as varchar(36)) + ', референс ' + @REFERENCE
|
||||
);
|
||||
end
|
||||
|
||||
else
|
||||
if @DIRECTION = 'OUT' begin
|
||||
insert into U_OP_INV_SPIS
|
||||
(
|
||||
DOC,
|
||||
DD_TYPE,
|
||||
DD_DATE, DD_NUM,
|
||||
SHARE, AMOUNT, BLANKS,
|
||||
PLACE,
|
||||
D_NUM,
|
||||
DEPO,
|
||||
K_NUM,
|
||||
MARKET,
|
||||
OLD_CONDITIONS, IS_REG, TAX_R,
|
||||
B_TYPE,
|
||||
B_DATE, B_NUM,
|
||||
WIR_DATE, NOTIFY_DATE, REG_DATE,
|
||||
IS_BLOCK,
|
||||
FROM_FACE,
|
||||
REJECT_REASON,
|
||||
COMMENT
|
||||
)
|
||||
values
|
||||
(
|
||||
@OPER_ID,
|
||||
1 /*Клиентское*/,
|
||||
@DD_DATE, @DD_NUM,
|
||||
@SHARE, @AMOUNT, null,
|
||||
@PLACE,
|
||||
314, /*98015 - 0 - Ценные бумаги и цифровые активы на хранении в других депозитариях (НОСТРО депо расчетный)*/
|
||||
@CLIENT,
|
||||
836, /*98070 - 4 - Ценные бумаги и цифровые активы на торгах*/
|
||||
8106, /*ММВБ - ПАО Московская Биржа*/
|
||||
null, null, null,
|
||||
31, /*Отчет депозитария*/
|
||||
@EVENT_DATE, 'Вопрос, что тут пишем',
|
||||
@EVENT_DATE, @EVENT_DATE, @EVENT_DATE, --Берем из BJ
|
||||
0,
|
||||
@FACE,
|
||||
null, --А есди это отмена??
|
||||
'Отчет НКО АО НРД [номер, дата]. Перевод M2M, GUID ' + cast(@GUID as varchar(36)) + ', референс ' + @REFERENCE
|
||||
);
|
||||
end;
|
||||
|
||||
--И сразу проводим
|
||||
exec FTV_M2M_PROCESS_WIRING @OPER_ID;
|
||||
|
||||
end
|
||||
else if @EVENT_TYPE = 'CREATE_WIRING' begin
|
||||
print 'CREATE_WIRING'
|
||||
end;
|
||||
print @EVENT_TYPE;
|
||||
|
||||
|
||||
--4. ОБРАБОТКА КАЖДОГО ТИПА СОБЫТИЯ
|
||||
-- https://lic.zetit.ru/docs/fancy-events
|
||||
|
||||
|
||||
if @EVENT_TYPE = 'BJ_RECEIVED' begin
|
||||
update OD_DOCS set ID = 0, STATE = 1 where ID = @CLISER_ID; --START = Начало обработки (зарегистрирован)
|
||||
end
|
||||
|
||||
if @EVENT_TYPE = 'BJ_SENT' begin
|
||||
select @STATE = ID from OD_DOC_STATES where SYS_NAME = 'WAIT_RESP_DECIS';
|
||||
update OD_DOCS set ID = 0, STATE = @STATE where ID = @CLISER_ID; --WAIT_RESP_DECIS = Ожидание ответа Response/Decision
|
||||
end
|
||||
|
||||
else
|
||||
if @EVENT_TYPE in ('BJ_DECISION_CONFIRM', 'BJ_CP_CONFIRM') begin
|
||||
--TODO эти события для СТРОКИ!!!
|
||||
update OD_DOCS set ID = 0, STATE = 8 where ID = @CLISER_ID; --RECIEVED = Принят: ожидает обработки
|
||||
end
|
||||
|
||||
else
|
||||
if @EVENT_TYPE in ('BJ_DECISION_REJECT', 'BJ_CP_REJECT') begin
|
||||
--TODO эти события для СТРОКИ!!!
|
||||
update OD_DOCS set ID = 0, STATE = 3 where ID = @CLISER_ID; --REJECT = Отмена обработки
|
||||
end
|
||||
|
||||
else
|
||||
if @EVENT_TYPE = 'BJ_SERVICE_ERROR' begin
|
||||
update OD_DOCS set ID = 0, STATE = 3 where ID = @CLISER_ID; --REJECT = Отмена обработки
|
||||
end
|
||||
|
||||
--else
|
||||
--if @EVENT_TYPE = 'BJ_DECISION_REJECT' and @DIRECTION = 'IN' begin
|
||||
-- --M2M_STATUS = 10 TODO!!!!!!!!!!!!!!!!!
|
||||
-- update D_CLISER_M2M_DOL set M2M_STATUS = 10, M2M_TEXT = '???' where DOL = @DOL_ID;
|
||||
-- --только если отказ по всем строкам подвала документа
|
||||
-- if not exists (select top 1 DOL from D_CLISER_M2M_DOL F left join OD_DOLS L on L.ID = F.DOL where L.DOC = @CLISER_ID and (M2M_STATUS is null or M2M_TEXT is null)) begin
|
||||
-- update OD_DOCS set ID = 0, STATE = 3 where ID = @CLISER_ID; --REJECT - Отмена обработки
|
||||
-- end;
|
||||
--end
|
||||
|
||||
--else
|
||||
--if @EVENT_TYPE = 'BJ_CP_REJECT' and @DIRECTION = 'OUT' begin
|
||||
-- --M2M_STATUS = 10 TODO!!!!!!!!!!!!!!!!!
|
||||
-- update D_CLISER_M2M_DOL set M2M_STATUS = 10, M2M_TEXT = '???' where DOL = @DOL_ID;
|
||||
-- --только если отказ по всем строкам подвала документа
|
||||
-- --TODO зачем проверять все строки подвала, если мы не будем делать многострочные исходящие???
|
||||
-- if not exists (select top 1 DOL from D_CLISER_M2M_DOL F left join OD_DOLS L on L.ID = F.DOL where L.DOC = @CLISER_ID and (M2M_STATUS is null or M2M_TEXT is null)) begin
|
||||
-- update OD_DOCS set ID = 0, STATE = 3 where ID = @CLISER_ID; --REJECT - Отмена обработки
|
||||
-- end;
|
||||
--end
|
||||
|
||||
else
|
||||
if @EVENT_TYPE = 'BJ_ORDER_SENT' begin
|
||||
select @STATE = ID from OD_DOC_STATES where SYS_NAME = 'WAIT_OPER';
|
||||
update OD_DOCS set ID = 0, STATE = @STATE where ID = @CLISER_ID; --WAIT_OPER = Ожидание исполнения операции
|
||||
end
|
||||
|
||||
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 - Конец обработки (в архиве)
|
||||
end
|
||||
|
||||
--BJ_ORDER_REJECTED
|
||||
--TODO задал вопрос 16.10.2026
|
||||
|
||||
--BJ_EXECUTED
|
||||
--Оно уже в событии BJ_ORDER_ACCEPTED в финале и с проводками, что делать-то?
|
||||
else
|
||||
if @EVENT_TYPE = 'BJ_EXECUTED' begin
|
||||
print 'BJ_EXECUTED --Оно уже в событии BJ_ORDER_ACCEPTED в финале и с проводками, что делать-то?';
|
||||
end
|
||||
|
||||
else
|
||||
if @EVENT_TYPE = 'BJ_CANCELLED' begin
|
||||
update OD_DOCS set ID = 0, STATE = 3 where ID = @CLISER_ID; --REJECT = Отмена обработки
|
||||
end
|
||||
|
||||
else
|
||||
if @EVENT_TYPE = 'BJ_GATEWAY_REJECT' begin
|
||||
update OD_DOCS set ID = 0, STATE = 3 where ID = @CLISER_ID; --REJECT = Отмена обработки
|
||||
--ОНО по строке, и не понятно что делать
|
||||
end
|
||||
|
||||
else
|
||||
--TODO что делать если контрагент проставил статус не по всем строкам документа??
|
||||
if @EVENT_TYPE = 'BJ_CP_CONFIRM' and @DIRECTION = 'OUT' begin
|
||||
update OD_DOCS set ID = 0, STATE = 1 where ID = @CLISER_ID; --START - Начало обработки (зарегистрирован) --ОНО И ТАК УЖЕ ДОЛЖНО БЫТЬ В ЭТОМ СОСТОЯНИИ!!!
|
||||
end
|
||||
|
||||
else
|
||||
if @EVENT_TYPE in
|
||||
(
|
||||
'BJ_ORDER_LATE',
|
||||
'BJ_PING',
|
||||
'BJ_QUIK_BLOCKED',
|
||||
'BJ_QUIK_RELEASED',
|
||||
'BJ_QUIK_SIGNED',
|
||||
'BJ_QUIK_DEPOSITED'
|
||||
) begin
|
||||
print 'ничего не делать';
|
||||
end
|
||||
|
||||
else begin
|
||||
set @RAISERROR = 'От сервиса BJ получено неизвестное событие ' + @EVENT_TYPE;
|
||||
raiserror (@RAISERROR, 16, 1);
|
||||
end;
|
||||
|
||||
Reference in New Issue
Block a user