Правило поиска дублей не работает при сохраненнии
По инструкции на академии добавил правило поиска дублей в контрагенте по полю ИНН.
Правило корректно отрабатывает при глобальном поиске, но не работает при сохранении карточки контрагента. Ошибок в логе поиска нет. Буду благодарен за идеи...
Код процедуры поиска:
IF NOT OBJECT_ID('[dbo].[tsp_FindAccountDuplicateByInn]') IS NULL
BEGIN
DROP PROCEDURE [dbo].[tsp_FindAccountDuplicateByInn];
END;
GO
CREATE PROCEDURE [dbo].[tsp_FindAccountDuplicateByInn] (
@parsedConfig CreatingObjectInfo READONLY,
@sysAdminUnit UNIQUEIDENTIFIER,
@ruleId UNIQUEIDENTIFIER
)
AS
BEGIN
DECLARE @parsedConfigRowsCount INT = (SELECT COUNT(*) FROM @parsedConfig);
CREATE TABLE #searchAccount (
[SxINN] INT,
[SortDate] DATETIME
);
IF @parsedConfigRowsCount = 0
BEGIN
INSERT INTO #searchAccount ([SxInn], [SortDate])
SELECT
[SxInn],
MAX([ModifiedOn])
FROM [Account]
GROUP BY [SxInn]
HAVING COUNT(*) > 1;
END;
INSERT INTO [AccountDuplicateSearchResult] ([AccountId], [GroupId], [RuleId], [SysAdminUnitId])
SELECT
[vr].[Id],
DENSE_RANK() OVER (ORDER BY [vr].[SortDate] DESC, [vr].[SxInn]),
@ruleId RuleId,
@sysAdminUnit
FROM (
SELECT
[v].[Id],
[v].[SxInn],
[r].[SortDate]
FROM [Account] [v], #searchAccount r
WHERE [v].[SxInn] = [r].[SxInn]
GROUP BY [v].[SxInn], [r].[SortDate], [v].[Id]
) [vr];
END;
GO
Нравится
Здравствуйте, Иван!
Реализовать поиск дублей при сохранении достаточно не просто. Но если вкратце:
1. Заместить метод getDataForFindDuplicatesService в DuplicatesSearchUtilitiesV2
2. Унаследоваться от класса SingleRequest из SearchDuplicatesService и добавить своё свойство.
3. Создать свой SingleRequesListener чтобы заменить вызов SingleRequest на свой класс
4. Унаследоваться от DeduplicationProcessing и изменить методы AddElementsToRow и GetPreparedXml из SearchDuplicatesService
5. В хранимкке tsp_FindDuplicate нужно изменить под себя CreatingObjectInfo