Files
Bridge-and-Join-s/deploy/depo/fancy-m2m/FTV_M2M_JOB.sql
T
fontvielle b652baba63 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
2026-10-22 13:19:19 +03:00

121 lines
4.6 KiB
Transact-SQL

CREATE OR ALTER procedure [dbo].[FTV_M2M_JOB]
--grant execute on FTV_M2M_JOB to public;
--exec FTV_M2M_JOB;
as
set nocount on;
declare
@ID int,
@STATE varchar(64),
@ERROR_NUMBER int,
@COMMENT varchar(MAX);
--ИЩЕМ НОВЫЕ ПОРУЧЕНИЯ
declare cur cursor local fast_forward read_only for select ID from FTV_M2M M where M.STATE = 'TODO' order by M.TimeNew;
open cur;
while 0 = 0 begin fetch next from cur into @ID;
if @@FETCH_STATUS <> 0 break;
--Тут также можно отправить уведомление, создать входящее сообщение и т.д. (вне транзакции)
update FTV_M2M set TimeBeg = GETDATE() where ID = @ID;
--Процесс создания М2М-поручения
begin try
set @COMMENT = null;
exec FTV_M2M_PROCESS_CREATE @ID;
set @STATE = 'SUCCESS';
end try
begin catch
set @ERROR_NUMBER = ERROR_NUMBER();
set @COMMENT = ERROR_MESSAGE() + ' // ' + ERROR_PROCEDURE() + ' // ' + trim(str(ERROR_LINE()));
set @STATE = 'ERROR'
end catch
--Тут также можно уведомить об ошибочном статусе (вне транзакции)
update FTV_M2M set STATE = @STATE, TimeEnd = GETDATE(), COMMENT = @COMMENT where ID = @ID;
end;
close cur;
deallocate cur;
--ИЩЕМ НОВЫЕ СОБЫТИЯ
declare cur cursor local fast_forward read_only for select ID from FTV_M2M_EVENTS ME where ME.STATE = 'TODO' order by ME.TimeNew;
open cur;
while 0 = 0 begin fetch next from cur into @ID;
if @@FETCH_STATUS <> 0 break;
--Тут также можно отправить уведомление, создать входящее сообщение и т.д. (вне транзакции)
update FTV_M2M_EVENTS set TimeBeg = GETDATE() where ID = @ID;
--Процесс изменения событий
begin try
set @COMMENT = null;
exec FTV_M2M_PROCESS_EVENTS @ID;
set @STATE = 'SUCCESS';
end try
begin catch
set @ERROR_NUMBER = ERROR_NUMBER();
set @COMMENT = ERROR_MESSAGE() + ' // ' + ERROR_PROCEDURE() + ' // ' + trim(str(ERROR_LINE()));
set @STATE = 'ERROR'
end catch
--Тут также можно уведомить об ошибочном статусе (вне транзакции)
if @COMMENT is not null
update FTV_M2M_EVENTS set STATE = @STATE, TimeEnd = GETDATE(),COMMENT = @COMMENT where ID = @ID;
else
update FTV_M2M_EVENTS set STATE = @STATE, TimeEnd = GETDATE() where ID = @ID;
end;
close cur;
deallocate cur;
/*
НИЖЕ - ПРИМЕР ДЛЯ ТЕСТИРОВАНИЯ
declare @GUID uniqueidentifier;
set @GUID = NEWID();
INSERT INTO [dbo].[FTV_M2M] ([GUID], [CONTRAGENT_M2M_CODE], [DEPONENT_NAME], [DEPONENT_DOC], [DIRECTION])
VALUES (@GUID, 'MC0034900000', 'Абабков Александр Владимирович', '4508 147055', 'OUT');
--Замечание - списание возможно только по одной строке подвала!!
INSERT INTO [dbo].[FTV_M2M_LINES] ([GUID], [REFERENCE], [ISIN], [SEC_CODE], [AMOUNT], [PLACE_NUMBER], [LINK_NUMBER], [DEPO_NUMBER])
VALUES (@GUID, 'M2MREF_11', 'RU000A0JVHH1', 'RU000A0JVHH1', 11, '36MC0413600000F00', 'HL171004001C', 'ВТНКЦ00000060');
--INSERT INTO [dbo].[FTV_M2M_LINES] ([GUID], [REFERENCE], [ISIN], [SEC_CODE], [AMOUNT], [PLACE_NUMBER], [LINK_NUMBER], [DEPO_NUMBER])
--VALUES (@GUID, 'M2MREF_22', 'RU0009029540', 'SBER/03', 12, '36MC0413600000F00', 'HL171004001C', 'ВТНКЦ00000060');
exec FTV_M2M_JOB;
--select COMMENT, * from [dbo].[FTV_M2M]
--select COMMENT, * from [dbo].[FTV_M2M_LINES]
--select COMMENT, * from [dbo].[FTV_M2M_EVENTS]
--------------------------
--set @GUID = ''
INSERT INTO [dbo].[FTV_M2M_EVENTS] (GUID, REFERENCE, EVENT_TYPE, EVENT_DATE, M2M_REJECT_CODE)
VALUES (@GUID, 'M2MREF_11', 'BJ_ORDER_ACCEPTED', getdate());
exec FTV_M2M_JOB;
select COMMENT, * from [dbo].[FTV_M2M]
select COMMENT, * from [dbo].[FTV_M2M_LINES]
select COMMENT, * from [dbo].[FTV_M2M_EVENTS]
Ошибка преобразования значения varchar "IN" в тип данных int. // FTV_M2M_PROCESS_CREATE // 22
Не удалось вставить значение NULL в столбец "D_CAT", таблицы "UPD_DE_DATA.dbo.OD_DOCS"; в столбце запрещены значения NULL. Ошибка в INSERT. // propagate // 4
Дублирование номера внутреннего или исходящего документа (M2M поручение на зачисление от 05.09.2026: No TEST M2M) // propagate // 4
Обнаружена ошибка: деление на ноль. // FTV_M2M_PROCESS_CREATE // 118
Ошибка при преобразовании типа данных nvarchar к datetime. // FU_NEXT_DOC_NUM // 0
*/