Как исправить ошибку дублирования записей в регистре сведений «Состояния сотрудников» после обновления ЗУП?

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

При обновлении конфигурации 1С:Зарплата и Управление Персоналом до версии 3.1.14.436 многие специалисты столкнулись с критической ошибкой при попытке работы со списком сотрудников. Программа выдает сообщение: «Ошибка при выполнении запроса. Обнаружено дублирование ключевых значений в колонках: "Ссылка". Отображение данных в списке невозможно». Давайте разберем, почему это происходит и как эффективно устранить последствия.

Анализ причин возникновения ошибки

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

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

Решение 1: Обновление конфигурации до актуального релиза

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

  1. Создайте резервную копию информационной базы (обязательный этап перед любыми манипуляциями).
  2. Выполните последовательное обновление конфигурации до релиза 3.1.14.465.
  3. При запуске «1С:Предприятие» после обновления программа сама инициирует выполнение необходимых обработчиков. В данной версии исправленный код корректно обрабатывает существующие дубли и приводит регистр в нормативное состояние.

Решение 2: Ручная очистка регистра сведений

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

Шаг 1: Разрешение на редактирование

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

Шаг 2: Поиск дублирующих записей

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

Также можно использовать процедуру КадровыйУчет.СоздатьВТСотрудникиОрганизации. Если в параметрах ПараметрыПолученияСотрудниковОрганизаций включить получение данных Состояние, вы сможете выявить, для каких сотрудников существует более одной записи конечного состояния, что и является признаком дублирования.

Решение 3: Использование внешней обработки

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

Примерный алгоритм для программной обработки может выглядеть следующим образом:


// Пример фрагмента поиска дублей
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |    Регистр.Сотрудник КАК Сотрудник,
    |    Регистр.Период КАК Период,
    |    Регистр.Состояние КАК Состояние
    |ИЗ
    |    РегистрСведений.СостоянияСотрудников КАК Регистр
    |ГДЕ
    |    Регистр.Год ЕСТЬ NULL";

РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Для Каждого Строка Из РезультатЗапроса Цикл
    // Найти записи с заполненным годом для этого же сотрудника и периода
    // И выполнить удаление через НаборЗаписей
КонецЦикла;

Важные рекомендации при работе с данными

Работа с регистрами сведений напрямую требует осторожности. Придерживайтесь следующих правил, чтобы не нарушить учет:

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

← На главную