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
174 lines
6.6 KiB
Transact-SQL
174 lines
6.6 KiB
Transact-SQL
CREATE OR ALTER procedure [dbo].[FTV_M2M_UPDATE_HANDBOOK] @COMMENT nvarchar(MAX) out
|
|
|
|
--grant execute on FTV_M2M_UPDATE_HANDBOOK to public;
|
|
|
|
/*
|
|
Обновление справочника участников сервиса
|
|
select * from FTV_M2M_HANDBOOK where ACTIVE = 1 and PARTICIPANT_CODE is not null
|
|
|
|
insert into FTV_M2M_EVENTS (EVENT_TYPE, EVENT_DATE) select 'HANDBOOK', getdate();
|
|
declare @ID int, @COMMENT nvarchar(MAX);
|
|
select @ID = max(ID) from FTV_M2M_EVENTS where EVENT_TYPE = 'HANDBOOK';
|
|
exec FTV_M2M_UPDATE_HANDBOOK @COMMENT out;
|
|
update FTV_M2M_EVENTS set COMMENT = @COMMENT where ID = @ID;
|
|
PRINT @COMMENT;
|
|
SELECT @COMMENT;
|
|
|
|
--УДАЛЯЛКА ДЛЯ ТИКЕРОВ
|
|
declare @M2M_Coder int;
|
|
select @M2M_Coder = F.SELF_ID from OD_FACES F where F.LAST_FLAG = 1 and F.MNEM = 'M2M';
|
|
delete from OD_FACE_CODERS where CODER = @M2M_Coder
|
|
|
|
--УДАЛЯЛКА ДЛЯ ЮРЛИЦ
|
|
delete from OD_FACES where S_TYPE = 1 and B_DATE >= dateadd(DAY, -1, cast(getdate() as date))
|
|
|
|
|
|
*/
|
|
as
|
|
set nocount on;
|
|
|
|
declare
|
|
@M2M_Coder int,
|
|
--@COMMENT nvarchar(MAX),
|
|
@Cnt int,
|
|
@FACE_ID int,
|
|
@ID int,
|
|
@ROW int = 0,
|
|
@DoubleINN int,
|
|
@INN varchar(12),
|
|
@CODE varchar(64),
|
|
@CODE2 varchar(64),
|
|
@NAME_SHORT nvarchar(128),
|
|
@NAME_FULL nvarchar(255);
|
|
|
|
declare @CRLF nvarchar(2) = NCHAR(13) + NCHAR(10);
|
|
|
|
select @M2M_Coder = F.SELF_ID from OD_FACES F where F.LAST_FLAG = 1 and F.MNEM = 'M2M';
|
|
--select @M2M_Coder;
|
|
|
|
--1. Статистика по участникам
|
|
declare @Codes_OUR table (SELF_ID int, INN varchar(12), CODE varchar(64), NAME_SHORT varchar(255), NAME_FULL varchar(255));
|
|
|
|
insert into @Codes_OUR (SELF_ID, INN, CODE, NAME_SHORT, NAME_FULL)
|
|
select
|
|
F.SELF_ID, F.INN, C.CODE, F.NAME, UF.FULL_NAME
|
|
from OD_FACE_CODERS C
|
|
left join OD_FACES F on F.SELF_ID = C.FACE and F.LAST_FLAG = 1 and F.E_DATE = '1.1.9999'
|
|
left join OD_U_FACES UF on UF.FACE = F.SELF_ID
|
|
where C.CODER = @M2M_Coder;
|
|
--select * from @Codes_OUR;
|
|
|
|
select @Cnt = count(*) from @Codes_OUR;
|
|
|
|
set @COMMENT = N'УЧАСТНИКИ СЕРВИСА: в справочнике юрлиц Фэнси - ' + trim(str(@Cnt));
|
|
|
|
select @Cnt = count(*) from FTV_M2M_HANDBOOK where ACTIVE = 1 and PARTICIPANT_CODE is not null;
|
|
|
|
set @COMMENT = @COMMENT + N', по данным НРД - ' + trim(str(@Cnt));
|
|
--PRINT @COMMENT;
|
|
|
|
|
|
--2. Принудительно добавляем отсутствующих юрлиц в Фэнси
|
|
declare cur cursor local fast_forward read_only for
|
|
select HB.ID, HB.PARTICIPANT_CODE, HB.INN, HB.NAME_SHORT, HB.NAME_FULL
|
|
from FTV_M2M_HANDBOOK HB
|
|
where HB.ACTIVE = 1 and HB.INN not in (select INN from OD_FACES F where F.LAST_FLAG = 1 and F.E_DATE = '1.1.9999' and F.INN is not null)
|
|
order by HB.NAME_SHORT;
|
|
|
|
open cur;
|
|
while 0 = 0 begin fetch next from cur into @ID, @CODE, @INN, @NAME_SHORT, @NAME_FULL;
|
|
if @@FETCH_STATUS <> 0 break;
|
|
set @ROW = @ROW + 1;
|
|
exec GEN_ID 'OD_FACES_ID_GEN', 1, @FACE_ID out;
|
|
|
|
insert into OD_FACES (ID, S_TYPE, INN, NAME)
|
|
values (@FACE_ID, 1, @INN, @NAME_SHORT);
|
|
|
|
insert into OD_U_FACES (FACE, FULL_NAME)
|
|
values (@FACE_ID, @NAME_FULL);
|
|
|
|
insert into OD_FACE_CODERS (CODE, CODER, FACE)
|
|
values (@CODE, @M2M_Coder, @FACE_ID);
|
|
|
|
set @COMMENT = @COMMENT + @CRLF + trim(str(@ROW)) + N'. Добавлено юрлицо: ' + @CODE + N', ' + @INN + N', ' + @NAME_SHORT;
|
|
end;
|
|
close cur;
|
|
deallocate cur;
|
|
|
|
|
|
----3. Добавляем отсутствующие коды участников в справочник тикеров Фэнси, сразу предупреждая о двойниках по ИНН
|
|
delete from @Codes_OUR;
|
|
insert into @Codes_OUR (SELF_ID, INN, CODE, NAME_SHORT, NAME_FULL)
|
|
select
|
|
F.SELF_ID, F.INN, C.CODE, F.NAME, UF.FULL_NAME
|
|
from OD_FACE_CODERS C
|
|
left join OD_FACES F on F.SELF_ID = C.FACE and F.LAST_FLAG = 1 and F.E_DATE = '1.1.9999'
|
|
left join OD_U_FACES UF on UF.FACE = F.SELF_ID
|
|
where C.CODER = @M2M_Coder;
|
|
|
|
declare cur cursor local fast_forward read_only for
|
|
select HB.ID, HB.PARTICIPANT_CODE, HB.INN, HB.NAME_SHORT, min(F.SELF_ID), count(*)
|
|
from FTV_M2M_HANDBOOK HB
|
|
left join OD_FACES F on F.INN = HB.INN
|
|
left join OD_FACE_CODERS C on C.CODER = @M2M_Coder and F.SELF_ID = C.FACE
|
|
where
|
|
HB.ACTIVE = 1
|
|
and HB.PARTICIPANT_CODE is not null
|
|
and F.S_TYPE = 1
|
|
and F.LAST_FLAG = 1
|
|
and F.E_DATE = '1.1.9999'
|
|
and C.CODE is null
|
|
and F.INN not in (select INN from @Codes_OUR)
|
|
group by HB.ID, HB.PARTICIPANT_CODE, HB.INN, HB.NAME_SHORT
|
|
order by HB.NAME_SHORT;
|
|
|
|
open cur;
|
|
while 0 = 0 begin fetch next from cur into @ID, @CODE, @INN, @NAME_SHORT, @FACE_ID, @Cnt;
|
|
if @@FETCH_STATUS <> 0 break;
|
|
set @ROW = @ROW + 1;
|
|
|
|
insert into OD_FACE_CODERS (CODE, CODER, FACE)
|
|
values (@CODE, @M2M_Coder, @FACE_ID);
|
|
|
|
set @COMMENT = @COMMENT + @CRLF + trim(str(@ROW)) + N'. Добавлен код участника ' + @CODE + N' к юрлицу: ' + @INN + N', ' + @NAME_SHORT;
|
|
if @Cnt > 1 begin
|
|
set @COMMENT = @COMMENT + N' (ПРЕДУПРЕЖДЕНИЕ: в Фэнси найдено несколько юрлиц с ИНН ' + @INN + N')';
|
|
end;
|
|
end;
|
|
close cur;
|
|
deallocate cur;
|
|
|
|
if @ROW = 0 begin
|
|
set @COMMENT = @COMMENT + N' (при обработке нового справочника НРД никаких изменений не обнаружено)'
|
|
end;
|
|
|
|
|
|
--4. Проверка на отличающиеся коды в Фэнси и НРД для одного юрлица по идентификации ИНН, или лишние коды в Фэнси
|
|
delete from @Codes_OUR;
|
|
insert into @Codes_OUR (SELF_ID, INN, CODE, NAME_SHORT, NAME_FULL)
|
|
select
|
|
F.SELF_ID, F.INN, C.CODE, F.NAME, UF.FULL_NAME
|
|
from OD_FACE_CODERS C
|
|
left join OD_FACES F on F.SELF_ID = C.FACE and F.LAST_FLAG = 1 and F.E_DATE = '1.1.9999'
|
|
left join OD_U_FACES UF on UF.FACE = F.SELF_ID
|
|
where C.CODER = @M2M_Coder;
|
|
|
|
declare cur cursor local fast_forward read_only for
|
|
select C.INN, C.NAME_SHORT, C.CODE, HB.PARTICIPANT_CODE
|
|
from @Codes_OUR C
|
|
left join FTV_M2M_HANDBOOK HB on HB.INN = C.INN and ACTIVE = 1 and HB.PARTICIPANT_CODE is not null
|
|
where
|
|
C.CODE <> HB.PARTICIPANT_CODE or HB.PARTICIPANT_CODE is null;
|
|
|
|
open cur;
|
|
while 0 = 0 begin fetch next from cur into @INN, @NAME_SHORT, @CODE, @CODE2
|
|
if @@FETCH_STATUS <> 0 break;
|
|
set @ROW = @ROW + 1;
|
|
if @CODE2 is null
|
|
set @COMMENT = @COMMENT + @CRLF + N'КРИТИЧЕСКОЕ ПРЕДУПРЕЖДЕНИЕ: для юрлица ' + @INN + ' (' + @NAME_SHORT + N') в Фэнси указан код ' + @CODE + N', отсутствующий в НРД';
|
|
else
|
|
set @COMMENT = @COMMENT + @CRLF + N'КРИТИЧЕСКОЕ ПРЕДУПРЕЖДЕНИЕ: для юрлица ' + @INN + ' (' + @NAME_SHORT + N') в Фэнси указан код ' + @CODE + N', отличающийся от кода в НРД ' + @CODE2;
|
|
end;
|
|
close cur;
|
|
deallocate cur;
|