Как исправить ошибку «Обнаружено дублирование ключевых значений» в регистре «Физические лица кабинет сотрудника»

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

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

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

Причина возникновения ошибки

Рассмотрим техническую природу проблемы. Ошибка «Обнаружено дублирование ключевых значений в колонках: Ссылка» в контексте управляемых форм практически всегда связана с работой динамического списка. Несмотря на то, что в самом регистре ФизическиеЛицаКабинетСотрудника может не быть дублирующихся записей по измерениям, форма списка этого регистра использует произвольный запрос.

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

Шаг 1. Анализ регистра сведений через консоль запросов

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


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

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

Шаг 2. Проверка контактной информации сотрудников

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

Выполним запрос для поиска дублей в контактной информации:


ВЫБРАТЬ
    КонтактнаяИнформация.Объект КАК Сотрудник,
    КонтактнаяИнформация.Тип КАК Тип,
    КонтактнаяИнформация.Вид КАК Вид,
    КОЛИЧЕСТВО(*) КАК Количество
ИЗ
    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
ГДЕ
    КонтактнаяИнформация.Объект ССЫЛКА Справочник.ФизическиеЛица
СГРУППИРОВАТЬ ПО
    КонтактнаяИнформация.Объект,
    КонтактнаяИнформация.Тип,
    КонтактнаяИнформация.Вид
ИМЕЮЩИЕ
    КОЛИЧЕСТВО(*) > 1

Разберем результаты: если запрос вернул строки, это означает, что у одного физического лица (Объект) заведено два телефона или два e-mail с одинаковым Видом. Например, два «Мобильных телефона». Именно это заставляет динамический список «размножать» строки при открытии.

Шаг 3. Устранение дублей в данных

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

  1. Перейдем в справочник Физические лица.
  2. Найдем сотрудника, выявленного в Шаге 2.
  3. Проверим раздел «Адреса, телефоны». Часто визуально в карточке виден один номер, но в базе их фактически два.
  4. Попробуйте удалить номер телефона/почту и записать карточку. Если после удаления одной записи список регистра ФизическиеЛицаКабинетСотрудника начал открываться — причина найдена.
  5. Если записи не видны в интерфейсе, воспользуйтесь стандартной обработкой «Редактирование контактной информации» или удалите лишние записи напрямую из регистра КонтактнаяИнформация через «Функции для технического специалиста».

Шаг 4. Сброс настроек пользователя и кэша

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

Рекомендуется выполнить следующие действия:

Шаг 5. Анализ кода формы (для программистов)

Если конфигурация не полностью типовая или вы хотите программно обойти ошибку, посмотрим на процедуру ПриСозданииНаСервере формы списка регистра. В типовых решениях ЗУП часто вызывается метод: ЗарплатаКадры.ПриСозданииНаСервереФормыСДинамическимСписком(ЭтотОбъект, "Список",,,, "ЕстьОшибкиЗаполнения");

Проанализируем текст запроса, который присваивается динамическому списку. Если в нем используется соединение с таблицами КонтактнаяИнформация, можно добавить ключевое слово РАЗЛИЧНЫЕ или использовать группировку СГРУППИРОВАТЬ ПО в самом тексте запроса списка. Однако, правильнее будет именно исправить данные сотрудников, так как наличие дублей в контактной информации может привести к ошибкам при синхронизации с облачным сервисом «Кабинет сотрудника».

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

← На главную