Правило поиска дублей не работает при сохраненнии

По инструкции на академии добавил правило поиска дублей в контрагенте по полю ИНН.

Правило корректно отрабатывает при глобальном поиске, но не работает при сохранении карточки контрагента. Ошибок в логе поиска нет. Буду благодарен за идеи...

Код процедуры поиска:

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 комментарий

Здравствуйте, Иван!

Реализовать поиск дублей при сохранении достаточно не просто. Но если вкратце:

1. Заместить метод getDataForFindDuplicatesService в DuplicatesSearchUtilitiesV2

2. Унаследоваться от класса SingleRequest из SearchDuplicatesService и добавить своё свойство.

3. Создать свой SingleRequesListener чтобы заменить вызов SingleRequest на свой класс

4. Унаследоваться от DeduplicationProcessing и изменить методы AddElementsToRow и GetPreparedXml из SearchDuplicatesService

5. В хранимкке tsp_FindDuplicate нужно изменить под себя CreatingObjectInfo

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