Как исправить ошибку «Обнаружено дублирование ключевых значений в колонках: Ссылка» при подборе сотрудников в СЗВ-ТД?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом
← На главную

При работе в конфигурации 1С:Зарплата и управление персоналом 3.1 многие специалисты сталкиваются с неприятной ситуацией: во время подбора сотрудников для формирования отчета СЗВ-ТД (или других кадровых форм) система выдает критическую ошибку «Обнаружено дублирование ключевых значений в колонках: "Ссылка". Отображение данных в списке невозможно». В результате форма подбора блокируется, и продолжить работу становится невозможно.

Давайте подробно разберем, почему возникает эта ошибка, где скрываются "невидимые" дубли и как мы можем быстро их обнаружить и устранить.

Суть возникновения ошибки в динамических списках

Проанализируем механику работы формы подбора. Список сотрудников, который мы видим на экране, строится на базе механизма динамических списков платформы 1С. «Под капотом» этого списка работает сложный запрос, который собирает данные по сотруднику из нескольких регистров (кадровые данные, начисления, состояния и т.д.).

Ошибка означает, что этот сложный запрос возвращает несколько строк, у которых абсолютно одинаковое поле Ссылка (то есть они ссылаются на одного и того же сотрудника). Поскольку динамический список не понимает, какую именно из одинаковых строк выводить пользователю на экран, он в целях безопасности блокирует отображение всего списка.

Важно понимать: типовая обработка Поиск и удаление дублей здесь не поможет. Проблема заключается не в том, что в справочнике заведено два одинаковых физических лица, а в том, что образовались «осиротевшие» или накладывающиеся друг на друга записи в регистрах сведений.

Какие регистры проверим в первую очередь?

Чтобы выявить причину, проанализируем регистры, которые участвуют в запросе динамического списка. Чаще всего проблема возникает, если сотрудник увольнялся и принимался заново, либо переводился по должностям, и старые записи не были корректно закрыты. Нам нужно проверить следующие регистры на наличие наложения периодов или "зависших" записей:

Метод 1: Визуальный поиск проблемного сотрудника

Рассмотрим самый простой, но требующий внимательности метод. Если ошибка появляется не сразу при открытии формы, а при попытке пролистать список, мы можем локализовать проблему вручную.

  1. Откроем форму подбора в документе СЗВ-ТД.
  2. Начнем медленно прокручивать список сотрудников мышью или клавишей со стрелкой вниз.
  3. Система «споткнется» и выдаст ошибку на конкретной строке. Сотрудник, на котором произошел сбой (или соседний с ним), и является источником дублирующихся записей.
  4. Выявив ФИО, откроем его карточку и проверим историю кадровых переводов на предмет задвоений.

Метод 2: Технический поиск через Консоль запросов (Рекомендуемый)

Если визуальный поиск не дает результатов (ошибка выскакивает хаотично или сразу при открытии), применим профессиональный подход. Выясним причину с помощью инструмента КонсольЗапросов.

Разберем по шагам, как это сделать:

  1. Запустим базу 1С в режиме предприятия и откроем внешнюю обработку КонсольЗапросов.
  2. Нам необходимо получить текст запроса, который используется в динамическом списке формы подбора для СЗВ-ТД. Сделать это можно через Конфигуратор, открыв соответствующую форму документа и скопировав текст запроса из свойств динамического списка.
  3. Вставим этот текст в Консоль запросов.
  4. Чтобы не просматривать тысячи строк глазами, "обернем" исходный запрос в группировку, чтобы система сама показала нам дублирующиеся ссылки.

Посмотрим на пример того, как модифицировать запрос для поиска дублей:


ВЫБРАТЬ
    ВложенныйЗапрос.Ссылка КАК Ссылка,
    КОЛИЧЕСТВО(ВложенныйЗапрос.Ссылка) КАК КоличествоДублей
ИЗ
    (
        // === СЮДА ВСТАВЛЯЕМ ИСХОДНЫЙ ТЕКСТ ЗАПРОСА ДИНАМИЧЕСКОГО СПИСКА ===
        ВЫБРАТЬ 
            СправочникСотрудники.Ссылка КАК Ссылка,
            // ... остальные поля ...
        ИЗ ...
        // ====================================================================
    ) КАК ВложенныйЗапрос

СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос.Ссылка

ИМЕЮЩИЕ
    КОЛИЧЕСТВО(ВложенныйЗапрос.Ссылка) > 1

Выполним данный запрос. В результате мы получим компактную таблицу, в которой будут указаны конкретные сотрудники и количество строк, которые по ним возвращаются (2 и более). Это и есть наши проблемные данные!

Теперь нам остается только зайти в карточки этих конкретных сотрудников, проверить движения по проблемным кадровым регистрам (например, через кнопку "Перейти" на панели навигации) и вычистить некорректные или дублирующиеся записи, оставив только актуальные.

Ошибки релизов конфигурации 1С

Иногда все проверки показывают, что данные в базе идеальны, нет наложений и нет удаленных документов. В таких случаях нужно учитывать, что подобное поведение ранее официально признавалось разработчиками 1С как баг в некоторых релизах ветки 3.1 (например, в релизах 3.1.17).

Если пересчет итогов, тестирование и исправление утилитой chdbfl, а также принудительное обновление состояния сотрудников не помогают — настоятельно рекомендуем обновить платформу и конфигурацию 1С:ЗУП до актуального стабильного релиза. Зачастую разработчики оперативно вносят исправления в сложные запросы динамических списков, решая проблему на программном уровне.

← На главную