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