Добавить собственное правило поиска дублей в контрагенте
Проблема с созданием такого правила.
За основу взял пример из Академии: https://academy.terrasoft.ru/documents/technic-sdk/7-9/dobavlenie-pravil....
Валятся ошибки response status: 400 (Bad Request) (смотрите прикрепленный файл).
Прошу ввести в тему как это действие реализовать, если кто знает.
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
Нравится
Здравствуйте!
Поля AlternativeName не существует во вьюхе VwAccountCleanDataValues. Там есть только Id, ModifiedOn и Name, которые берутся из Account.
Вы можете брать поле AlternativeName сразу из Account.
"Demchenko Olha" написал:Здравствуйте!
Поля AlternativeName не существует во вьюхе VwAccountCleanDataValues. Там есть только Id, ModifiedOn и Name, которые берутся из Account.
Вы можете брать поле AlternativeName сразу из Account.
Я поменял описание. Теперь совсем другая проблема.
Проблема в том, что теперь поиск дублей в контрагент не работает.
Вы можете посмотреть какая возникает ошибка в таблице DeduplicateExecLog. Еще можно проверить в журнале процессов запускается ли процесс "Процесс дедепликации", есть ли в нём ошибки.