Расширение Fancy DEPO для M2M (процедуры Фонтвьель, снято 23.09): тексты, зависимости, параметры для установки у другого клиента

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
This commit is contained in:
zuevav
2026-09-23 16:48:25 +03:00
parent cb67875f7b
commit b2f8652381
6 changed files with 910 additions and 0 deletions
@@ -0,0 +1,165 @@
CREATE OR ALTER procedure [dbo].[FTV_M2M_PROCESS_OPERATION] @GUID uniqueidentifier, @REFERENCE varchar(255), @OPER_DATE datetime, @OPER_ID int output
/*
Создает операцию, возвращает 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', @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);
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;
--Создаем документ
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,
314, /*98015 - 0 - Ценные бумаги и цифровые активы на хранении в других депозитариях (НОСТРО депо расчетный)*/
@CLIENT,
836, /*98070 - 4 - Ценные бумаги и цифровые активы на торгах*/
8106, /*ММВБ - ПАО Московская Биржа*/
null, null, null,
31, /*Отчет депозитария*/
@CLISER_DATE, @CLISER_NUM,
@OPER_DATE, @OPER_DATE, @OPER_DATE,
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, /*Отчет депозитария*/
@CLISER_DATE, @CLISER_NUM,
@OPER_DATE, @OPER_DATE, @OPER_DATE,
0,
@FACE,
null,
'Отчет НКО АО НРД [номер, дата]. Перевод M2M, GUID ' + cast(@GUID as varchar(36)) + ', референс ' + @REFERENCE
);
end;
--И сразу проводим
exec FTV_M2M_PROCESS_WIRING @OPER_ID;