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
121 lines
4.6 KiB
Transact-SQL
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
|
|
|
|
|
|
*/
|