Здравствуйте, хотел написать свое правило поиска дублей для контактов пример того как сделать взял с академии но во время выполнения скрипта появляется ошибка что переменная @parsedConfig имеет недопустимый тип данных. и еще в таблице ContactDuplicateSearchResult нету поля SysAdminUnitId вместо него идет поле GroupHash. Как изменить скрипт чтобы он заработал? bpm 7.8.0
-- Проверка наличия хранимой процедуры с именем tsp_FindContactDuplicateByNameAndContragent.
IF NOT OBJECT_ID('[dbo].[tsp_FindContactDuplicateByNameAndContragent]') IS NULL
BEGIN
-- Удаление хранимой процедуры.
DROP PROCEDURE [dbo].[tsp_FindContactDuplicateByNameAndContragent];
END;
GO
-- Создание хранимой процедуры.
CREATE PROCEDURE [dbo].[tsp_FindContactDuplicateByNameAndContragent] (
-- Этот табличный параметр передается только в случае сохранения нового контакта.
-- Содержит данные нового контакта.
-- В случае запуска процесса глобального поиска дублей переданный параметр не содержит данных.
@parsedConfig CreatingObjectInfo READONLY,
-- Уникальный идентификатор пользователя, который запустил поиск дублей.
@sysAdminUnit UNIQUEIDENTIFIER,
-- Идентификатор текущего правила из таблицы [ContactDuplicateSearchResult].
-- Этот идентификатор создается после регистрации правила в системе.
@ruleId UNIQUEIDENTIFIER
)
AS
BEGIN
-- Получение количества записей из принимаемой таблицы для определения запуска глобального поиска дублей.
DECLARE @parsedConfigRowsCount INT = (SELECT COUNT(*) FROM @parsedConfig);
-- Создание временной таблицы с данными контактов для поиска.
CREATE TABLE #searchContact (
[Name] nvarchar(250),
[AccountId] uniqueidentifier,
[SortDate] DATETIME
);
-- В случае глобального поиска выполняется заполнение временной таблицы данными.
IF @parsedConfigRowsCount = 0
BEGIN
-- Добавление во временную таблицу данных для поиска дублей.
INSERT INTO #searchContact ([Name], [AccountId],[SortDate])
-- Запрос на выборку данных контактов.
SELECT
-- Выбираются колонки ИНН даты модификации контакта.
[Name],[AccountId],
MAX([ModifiedOn])
FROM [Contact]
-- Добавляется группировка по полям для возможности использовать проверку на количество.
GROUP BY [Name],[AccountId]
-- Таблица заполняется только в случае наличия более одного контакта.
HAVING COUNT(*) > 1;
END;
-- Заполнение таблицы результатов.
INSERT INTO [ContactDuplicateSearchResult] ([ContactId], [GroupId], [RuleId], [SysAdminUnitId])
SELECT
-- Идентификатор дубля контакта.
[vr].[Id],
-- Формирование номера группы.
DENSE_RANK() OVER (ORDER BY [vr].[SortDate] DESC, [vr].[Name],[vr].[AccountId]),
-- Идентификатор правила.
@ruleId RuleId,
-- Идентификатор пользователя, под которым запущен процесс поиска дублей.
@sysAdminUnit
FROM (
-- Подзапрос, из которого заполняется таблица дублей.
SELECT
-- Идентификатор контакта.
[v].[Id],
--ФИО контакта.
[v].[Name],
--ИД контрагента.
[v].[AccountId],
-- Дата сортировки.
[r].[SortDate]
-- Таблицы, из которых берутся данные.
FROM [Contact] [v], #searchContact r
-- Правило, по которому определяется, что контакты — дубли.
WHERE [v].[Name] = [r].[Name] AND [v].[AccountId] = [r].[AccountId]
-- Группировка результата поиска.
GROUP BY [v].[Name],[v].[AccountId], [r].[SortDate], [v].[Id]
) [vr];
END;
GO