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;