При работе в конфигурации 1С:Зарплата и управление персоналом (ЗУП) пользователи часто сталкиваются с критической ошибкой при попытке открыть список регистра сведений ФизическиеЛицаКабинетСотрудника. Текст ошибки гласит: «Обнаружено дублирование ключевых значений в колонках: Ссылка». Данная ситуация мешает нормальной работе сервиса «1С:Кабинет сотрудника» и не исправляется стандартным тестированием и исправлением информационной базы (ТиИ).
В этой статье мы подробно разберем, почему возникает эта ошибка, как проанализировать данные и какие шаги предпринять для устранения проблемы.
Рассмотрим техническую природу проблемы. Ошибка «Обнаружено дублирование ключевых значений в колонках: Ссылка» в контексте управляемых форм практически всегда связана с работой динамического списка. Несмотря на то, что в самом регистре ФизическиеЛицаКабинетСотрудника может не быть дублирующихся записей по измерениям, форма списка этого регистра использует произвольный запрос.
В этом запросе основная таблица регистра соединяется с другими таблицами (например, со справочником ФизическиеЛица или регистром КонтактнаяИнформация). Если у одного физического лица в связанных таблицах обнаруживается несколько записей (например, два основных номера телефона или два одинаковых адреса электронной почты), запрос динамического списка возвращает две и более строки для одного и того же объекта. Система 1С, пытаясь отобразить эти данные, видит одинаковые значения в ключевой колонке (колонке Ссылка или основном измерении) и выдает ошибку дублирования.
Прежде всего, нам необходимо выяснить, действительно ли проблема в данных самого регистра или все же в отображении списка. Проанализируем состояние регистра ФизическиеЛицаКабинетСотрудника. Для этого воспользуемся консолью запросов и выполним следующий текст:
ВЫБРАТЬ
ФизическиеЛицаКабинетСотрудника.ФизическоеЛицо КАК ФизическоеЛицо,
КОЛИЧЕСТВО(*) КАК КоличествоСтрок
ИЗ
РегистрСведений.ФизическиеЛицаКабинетСотрудника КАК ФизическиеЛицаКабинетСотрудника
СГРУППИРОВАТЬ ПО
ФизическиеЛицаКабинетСотрудника.ФизическоеЛицо
ИМЕЮЩИЕ
КОЛИЧЕСТВО(*) > 1
Если этот запрос не вернул записей, значит, физических дублей в самом регистре нет. Если же записи найдены, значит, в базе произошло некорректное слияние данных или программный сбой, и лишние записи необходимо удалить через обработку или вручную.
Как показывает практика и обсуждение на профессиональных форумах, наиболее вероятная причина — дублирование контактной информации. В запросе формы списка регистра ФизическиеЛицаКабинетСотрудника происходит соединение с данными телефонов и адресов. Выясним, у кого из сотрудников заполнено несколько записей одного вида.
Выполним запрос для поиска дублей в контактной информации:
ВЫБРАТЬ
КонтактнаяИнформация.Объект КАК Сотрудник,
КонтактнаяИнформация.Тип КАК Тип,
КонтактнаяИнформация.Вид КАК Вид,
КОЛИЧЕСТВО(*) КАК Количество
ИЗ
РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
ГДЕ
КонтактнаяИнформация.Объект ССЫЛКА Справочник.ФизическиеЛица
СГРУППИРОВАТЬ ПО
КонтактнаяИнформация.Объект,
КонтактнаяИнформация.Тип,
КонтактнаяИнформация.Вид
ИМЕЮЩИЕ
КОЛИЧЕСТВО(*) > 1
Разберем результаты: если запрос вернул строки, это означает, что у одного физического лица (Объект) заведено два телефона или два e-mail с одинаковым Видом. Например, два «Мобильных телефона». Именно это заставляет динамический список «размножать» строки при открытии.
После того как мы выявили проблемных физических лиц, нам необходимо привести данные в порядок. Рассмотрим алгоритм действий:
ФизическиеЛицаКабинетСотрудника начал открываться — причина найдена.КонтактнаяИнформация через «Функции для технического специалиста».Если запросы к БД не выявили дублей, но ошибка сохраняется, проанализируем настройки интерфейса. Иногда ошибка вызвана тем, что в настройках динамического списка (пользовательских настройках) сохранились старые отборы по полям, которых больше нет или которые работают некорректно.
Рекомендуется выполнить следующие действия:
Физические лица кабинет сотрудника.Если конфигурация не полностью типовая или вы хотите программно обойти ошибку, посмотрим на процедуру ПриСозданииНаСервере формы списка регистра. В типовых решениях ЗУП часто вызывается метод:
ЗарплатаКадры.ПриСозданииНаСервереФормыСДинамическимСписком(ЭтотОбъект, "Список",,,, "ЕстьОшибкиЗаполнения");
Проанализируем текст запроса, который присваивается динамическому списку. Если в нем используется соединение с таблицами КонтактнаяИнформация, можно добавить ключевое слово РАЗЛИЧНЫЕ или использовать группировку СГРУППИРОВАТЬ ПО в самом тексте запроса списка. Однако, правильнее будет именно исправить данные сотрудников, так как наличие дублей в контактной информации может привести к ошибкам при синхронизации с облачным сервисом «Кабинет сотрудника».
Подведем итог: Ошибка дублирования ключевых значений в регистре кабинета сотрудника чаще всего является следствием «грязных» данных в контактной информации физлиц. Использование консоли запросов — самый быстрый и надежный способ локализовать проблему и вернуть систему в рабочее состояние.