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