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
This commit is contained in:
@@ -0,0 +1,173 @@
|
||||
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;
|
||||
Reference in New Issue
Block a user