b652baba63
В 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
205 lines
6.3 KiB
Transact-SQL
205 lines
6.3 KiB
Transact-SQL
CREATE OR ALTER procedure [dbo].[FTV_M2M_PROCESS_OPERATION] @GUID uniqueidentifier, @REFERENCE varchar(255), @OPER_DATE datetime, @PARAMETERS nvarchar(4000), @OPER_ID int output
|
|
|
|
--grant execute on FTV_M2M_PROCESS_OPERATION to public;
|
|
|
|
/*
|
|
Создает операцию, возвращает OPER_ID созданной операции
|
|
Параметры нацелены прежде всего на строки уже созданного М2М-поручения D_CLISER_M2M_DOL, а не на буферные таблицы (к ним больше не обращаемся)
|
|
Все проверки идут до вызова, но элементарные проверки можно сделать и тут. Или дать raiserror
|
|
Мы существенно разгружаем FTV_M2M_PROCESS_EVENTS
|
|
|
|
declare @OPER_ID int;
|
|
exec FTV_M2M_PROCESS_OPERATION @GUID = 'BAE1FA60-EB0A-4FEE-B12C-018D1EAFCBD2', @REFERENCE = 'M2M0917165643657', @OPER_DATE = '20260922', @PARAMETERS = '1234567890 от 10.10.2026', @OPER_ID = @OPER_ID out;
|
|
select @OPER_ID;
|
|
|
|
*/
|
|
|
|
as
|
|
set nocount on;
|
|
|
|
if user = 'dbo' execute as user = 'SYSDBA';
|
|
|
|
print 'FTV_M2M_PROCESS_OPERATION' + ' GUID = ' + cast(@GUID as varchar(36)) + ', REFERENCE = ' + @REFERENCE;
|
|
|
|
declare
|
|
@WHOS int = 383118,
|
|
@CLISER_ID int,
|
|
@CLISER_NUM varchar(64),
|
|
@CLISER_DATE datetime,
|
|
@DIRECTION varchar(64),
|
|
@DD_DATE datetime,
|
|
@DD_NUM varchar(64),
|
|
@SHARE int,
|
|
@AMOUNT numeric(27, 7),
|
|
@CLIENT int,
|
|
@FACE int,
|
|
@PLACE int,
|
|
@D_CAT int,
|
|
@NUM varchar(64),
|
|
@FILER_ID int,
|
|
@FILER_NUM varchar(64),
|
|
@FILER_DATE datetime,
|
|
@STEP_ID int;
|
|
|
|
select
|
|
@CLISER_ID = H.DOC,
|
|
@CLISER_NUM = D.NUM,
|
|
@CLISER_DATE= D.D_DATE,
|
|
@DIRECTION = case
|
|
when DC.SYS_NAME = 'I_CLISER_M2M_ZACH' then 'IN'
|
|
when DC.SYS_NAME = 'I_CLISER_M2M_SPIS' then 'OUT'
|
|
end,
|
|
@DD_DATE = cast(D.D_DATE as date),
|
|
@DD_NUM = D.NUM,
|
|
@SHARE = F.SHARE,
|
|
@AMOUNT = F.AMOUNT,
|
|
@CLIENT = F.CLIENT,
|
|
@FACE = H.DEPONENT,
|
|
@PLACE = F.PLACE
|
|
from D_CLISER_M2M_DOL F
|
|
left join OD_DOLS L on L.ID = F.DOL
|
|
left join OD_DOCS D on D.ID = L.DOC
|
|
left join D_CLISER_M2M H on H.DOC = D.ID
|
|
left join OD_DOC_CATS DC on DC.ID = D.D_CAT
|
|
where H.DOC_GUID = @GUID and F.DOL_REF = @REFERENCE;
|
|
|
|
|
|
--Элеметарные проверки
|
|
if @CLISER_ID is null
|
|
raiserror ('Не найдено M2M-поручение по GUID + REFERENCE', 16, 1);
|
|
|
|
--Направление
|
|
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;
|
|
|
|
--ID и номер операции
|
|
exec GEN_ID 'OD_DOC_ID_GEN', 1, @OPER_ID out;
|
|
exec FU_NEXT_DOC_NUM @D_CAT, @OPER_DATE, null, @OPER_ID, @NUM out, null;
|
|
set @NUM = @NUM + '_' + @REFERENCE;
|
|
|
|
--Создаем документ
|
|
insert into OD_DOCS (ID, NUM, PARAM, D_CAT, D_DATE, STATE, DIRECTION, WHOS, KVIT)
|
|
values (@OPER_ID, @NUM, null, @D_CAT, @OPER_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,
|
|
313, /*98010 - 0 - Ценные бумаги и цифровые активы на хранении в ведущем депозитарии (НОСТРО депо базовый) */
|
|
@CLIENT,
|
|
836, /*98070 - 4 - Ценные бумаги и цифровые активы на торгах*/
|
|
8106, /*ММВБ - ПАО Московская Биржа*/
|
|
null, null, null,
|
|
31, /*Отчет депозитария*/
|
|
@CLISER_DATE, @CLISER_NUM,
|
|
@OPER_DATE, @OPER_DATE, @OPER_DATE,
|
|
0,
|
|
@FACE,
|
|
null,
|
|
'Отчет НКО АО НРД ' + @PARAMETERS + '. Перевод 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,
|
|
313, /*98010 - 0 - Ценные бумаги и цифровые активы на хранении в ведущем депозитарии (НОСТРО депо базовый) */
|
|
@CLIENT,
|
|
836, /*98070 - 4 - Ценные бумаги и цифровые активы на торгах*/
|
|
8106, /*ММВБ - ПАО Московская Биржа*/
|
|
null, null, null,
|
|
31, /*Отчет депозитария*/
|
|
@CLISER_DATE, @CLISER_NUM,
|
|
@OPER_DATE, @OPER_DATE, @OPER_DATE,
|
|
0,
|
|
@FACE,
|
|
null,
|
|
'Отчет НКО АО НРД ' + @PARAMETERS + '. Перевод M2M, GUID ' + cast(@GUID as varchar(36)) + ', референс ' + @REFERENCE
|
|
);
|
|
end;
|
|
|
|
--Входящая запись (для отчета НРД)
|
|
exec GEN_ID 'OD_DOC_ID_GEN', 1, @FILER_ID out;
|
|
|
|
set @FILER_DATE = getdate();
|
|
|
|
exec FU_NEXT_DOC_NUM 'D_FILER', @FILER_DATE, 1, @FILER_ID, @FILER_NUM out, null;
|
|
|
|
insert into OD_DOCS
|
|
(ID, NUM, D_CAT, D_DATE, STATE, DIRECTION, WHOS)
|
|
values
|
|
(@FILER_ID, @FILER_NUM, 255, @FILER_DATE, 2, 1, @WHOS);
|
|
|
|
insert into D_FILER
|
|
(DOC, PASS_KIND, RUBRICA, COMMENT, DOC_NUM, DOC_DATE, CORR_FACE, FUND, ACCOUNT, PLACE, ORI_DATE, CHILD_CAT, MESS)
|
|
values
|
|
(@FILER_ID, 8, 5 /*уточнить в депозитарии*/,
|
|
'Отчет (перевод через MOEX-МОСТ)',
|
|
LEFT(@PARAMETERS, CHARINDEX(' ', @PARAMETERS + ' ') - 1),
|
|
CONVERT(date, RIGHT(TRIM(@PARAMETERS), CHARINDEX(' ', REVERSE(TRIM(@PARAMETERS))) - 1), 104),
|
|
18174,
|
|
@FACE, @CLIENT, @PLACE, @FILER_DATE, null, 'MS010 / ' + cast(@GUID as varchar(36)) + ' / ' + @REFERENCE);
|
|
|
|
--ORI_DATE поточнее? может из события? TODO
|
|
|
|
--Связываем с операцией
|
|
exec GEN_ID 'OD_STEPS_ID_GEN', 1, @STEP_ID out;
|
|
insert into OD_STEPS
|
|
(ID, DOC, A_DOC, ERR_CODE, S_TYPE, OUT_STATE, S_DATE, OPER)
|
|
values
|
|
(@STEP_ID, @FILER_ID, @OPER_ID, 2004, 0, 0, getdate(), null);
|
|
|
|
--И сразу проводим
|
|
exec FTV_M2M_PROCESS_WIRING @OPER_ID;
|