Как исправить ошибку «Обнаружено дублирование ключевых значений в колонках: "Ссылка"» при открытии справочника сотрудников в 1С:Бухгалтерия 3.0?

Системный администратор 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При работе с конфигурацией «1С:Бухгалтерия предприятия 3.0» пользователи иногда сталкиваются с критической ошибкой при попытке открыть справочник сотрудников или сбросить отбор по организации. На экране появляется критическое сообщение:

Обнаружено дублирование ключевых значений в колонках: "Ссылка". Отображение данных в списке невозможно

При этом стандартное тестирование и исправление информационной базы, очистка кэша платформы и перепроведение всех кадровых документов по порядку часто не приносят результата. Разберем подробно, почему возникает данная проблема, проанализируем механизмы работы формы списка и рассмотрим пошаговые алгоритмы её решения.

Почему возникает ошибка дублирования ключа

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

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

Выясним основные причины появления дублей в регистрах кадрового учета:

  1. Некорректный перенос данных или обмен XML: при загрузке кадровых сведений из «1С:ЗУП» или при использовании универсальных обработок обмена.
  2. Сбои при выполнении обработки «Удаление дублей»: если в базе объединяли физических лиц, но записи независимых регистров сведений перенеслись некорректно.
  3. Прерванное проведение кадровых документов: при сбоях питания или аварийном завершении сеанса запись в регистре могла записаться, а документ остался непроведенным.
  4. Задвоение в служебном регистре: наличие нескольких записей в регистре сведений ОсновныеСотрудникиФизическихЛиц или ТекущиеКадровыеДанныеСотрудников.

Шаг 1. Локализация ошибки и поиск проблемного сотрудника

Прежде чем исправлять данные, проанализируем, какая именно запись или физическое лицо вызывает сбой. Рассмотрим два удобных способа поиска.

Способ А. Группировка динамического списка (без программирования)

Рассмотрим порядок действий прямо в режиме «1С:Предприятие»:

  1. Откроем список сотрудников (если он открывается хотя бы с отбором по одной из организаций).
  2. Нажмем кнопку Ещё -> Настроить список.
  3. Перейдем на вкладку Группировка и добавим поле Ссылка.
  4. Нажмем Завершить редактирование. Список сгрупируется. При раскрытии группировок система вызовет ошибку именно на том сотруднике, у которого задвоились данные.

Способ Б. Поиск задвоенных записей через консоль запросов

Проанализируем структуру данных с помощью запроса. Откроем консоль запросов и выполним проверку регистра ОсновныеСотрудникиФизическихЛиц:


ВЫБРАТЬ
	ОсновныеСотрудники.ФизическоеЛицо КАК ФизическоеЛицо,
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ОсновныеСотрудники.Сотрудник) КАК КоличествоСотрудников
ИЗ
	РегистрСведений.ОсновныеСотрудникиФизическихЛиц КАК ОсновныеСотрудники
СГРУППИРОВАТЬ ПО
	ОсновныеСотрудники.ФизическоеЛицо
ИМЕЮЩИЕ
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ОсновныеСотрудники.Сотрудник) > 1

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

Шаг 2. Очистка дублей в регистрах сведений

Разберем основной способ исправления ошибки, который успешно решает проблему на практике.

  1. Перейдем в режим администратора через меню Настройки -> Функции для администратора (или Все функции).
  2. В разделе Регистры сведений найдем регистр Основные сотрудники физических лиц.
  3. Найдем записи по физическому лицу, выявившему ошибку на этапе диагностики.
  4. Удалим дублирующие или некорректные записи, оставив только актуальную связь физлица и его основного сотрудника.
  5. Проверим также регистр Текущие кадровые данные сотрудников на предмет некорректных записей без документов-оснований.

Шаг 3. Перепроведение кадровых документов

После очистки регистра сведений необходимо заново актуализировать кадровые данные в базе:

  1. Откроем кадровые документы по проблемному сотруднику (Прием на работу, Кадровый перевод, Увольнение).
  2. Отменим проведение документов в обратной хронологической последовательности.
  3. Последовательно проведем документы заново, начиная с самого первого приема на работу.

При проведении документа приема на работу конфигурация автоматически сформирует правильную запись в регистре ОсновныеСотрудникиФизическихЛиц, не создавая дублирующих строк.

Альтернативный способ: Пересчет актуальности кадровых данных

Если ручная очистка регистра затруднена из-за большого количества записей, рассмотрим программный запуск внутренней процедуры обновления актуальности элементов справочника Сотрудники.

Для этого в режиме конфигурирования или через внешнюю обработку (в контексте внешнего соединения/исполнения кода) выполним следующий вызов:

КадровыйУчет.ОбновитьАктуальностьЭлементовСправочникаСотрудники();

Эта процедура пересчитывает служебные данные и удаляет осиротевшие записи из кадровых регистров сведений, приводя динамический список справочника в корректное состояние.

Быстрый метод сброса настроек учета зарплаты

В некоторых релизах «1С:Бухгалтерия 3.0» помогает временное переключение режимов кадрового учета:

  1. Перейдем в раздел Зарплата и кадры -> Настройки зарплаты -> Общие настройки.
  2. Установим переключатель «Учет расчетов по заработной плате и кадровый учет ведется» в положение «Во внешней программе» и сохраним изменения.
  3. Перезапустим сеанс программы.
  4. Вернем переключатель обратно в положение «В этой программе» и сохраним.

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

← На главную