Добавить собственное правило поиска дублей в контрагенте

Проблема с созданием такого правила.
За основу взял пример из Академии: https://academy.terrasoft.ru/documents/technic-sdk/7-9/dobavlenie-pravil....
Валятся ошибки response status: 400 (Bad Request) (смотрите прикрепленный файл).
Прошу ввести в тему как это действие реализовать, если кто знает.

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

Нравится

5 комментариев

Здравствуйте!

Поля AlternativeName не существует во вьюхе VwAccountCleanDataValues. Там есть только Id, ModifiedOn и Name, которые берутся из Account.
Вы можете брать поле AlternativeName сразу из Account.

"Demchenko Olha" написал:

Здравствуйте!

Поля AlternativeName не существует во вьюхе VwAccountCleanDataValues. Там есть только Id, ModifiedOn и Name, которые берутся из Account.

Вы можете брать поле AlternativeName сразу из Account.


Я поменял описание. Теперь совсем другая проблема.

Уточните какая возникла проблема.

Проблема в том, что теперь поиск дублей в контрагент не работает.

Вы можете посмотреть какая возникает ошибка в таблице DeduplicateExecLog. Еще можно проверить в журнале процессов запускается ли процесс "Процесс дедепликации", есть ли в нём ошибки.

Показать все комментарии