Как исправить ошибку «Запись с такими ключевыми полями существует!» при переходе с 1С:Бухгалтерии 2.0 на 3.0?

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

При осуществлении перехода с редакции 2.0 на редакцию 3.0 конфигурации «Бухгалтерия предприятия» специалисты нередко сталкиваются со сбоем на этапе выполнения обработчиков обновления информационной базы. В процессе работы алгоритмов переноса кадровых данных платформа может выдать фатальную ошибку: «Запись с такими ключевыми полями существует!».

Рассмотрим подробнее причины появления этой проблемы, особенности публикации исправлений фирмой «1С» и практические способы успешного завершения обновления.

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

Проанализируем техническую сторону процесса обновления. В редакции 2.0 и редакции 3.0 архитектура хранения кадрового учета существенно различается. При переходе с 2.0 на 3.0 запускаются фоновые процедуры конвертации данных, которые транслируют проведенные кадровые документы в периодические регистры сведений (в частности, в регистр Кадровая история сотрудников).

Если в исходной базе редакции 2.0 присутствует проведенный документ Кадровое перемещение, в котором установлен флаг Приказ на группу сотрудников, алгоритм обновления формирует записи в регистре для каждого сотрудника из табличной части. При наличии совпадающих измерений (период, организация, сотрудник) платформа фиксирует попытку записи дублирующего ключа и блокирует дальнейшее выполнение процедуры обновления.

Ограничения релизов перехода

На портале поддержки пользователей ошибка может иметь статус «Исправлена в выпущенной версии» (например, в релизе 3.0.53.x). Однако при попытке обновить базу 2.0 напрямую до этой версии Конфигуратор не видит данный файл обновления.

Разберем, почему так происходит: обычные файлы обновления .cfu предназначены для последовательной актуализации конфигураций в рамках одной редакции 3.0. Переход с 2.0 на 3.0 осуществляется только через специализированные дистрибутивы конвертации. Если фирма «1С» еще не выпустила обновленный дистрибутив перехода, содержащий исправление, применять стандартный .cfu последующих релизов 3.0 поверх 2.0 напрямую не удастся.

Варианты решения проблемы

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

Способ 1. Разделение группового документа в редакции 2.0

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

  1. В исходной базе редакции 2.0 найдем проведенный документ Кадровое перемещение, в котором взведен флаг Приказ на группу сотрудников.
  2. Снимем проведение с найденного документа.
  3. Создадим на каждого сотрудника отдельный индивидуальный документ Кадровое перемещение с аналогичными датами, подразделениями и окладами.
  4. Проведем созданные индивидуальные документы и убедимся в корректности движений.
  5. Повторно запустим процесс обновления на редакцию 3.0.

Способ 2. Временная отмена проведения документа перед обновлением

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

  1. Перед стартом процедуры обновления распроведем документ Кадровое перемещение с групповым приказом в базе 2.0.
  2. Выполним обновление конфигурации до редакции 3.0 в штатном режиме. В отсутствии проведенного группового документа обработчик не создаст конфликтных записей в регистре.
  3. После успешного завершения перехода зафиксируем кадровые изменения в редакции 3.0 вручную или созданием нового документа кадрового учета.

Способ 3. Доработка обработчика обновления в Конфигураторе

Для программистов 1С доступен вариант корректировки логики заполнения регистра сведений непосредственно в коде обновления.

В конфигурации 3.0 перед запуском процедуры обновления информационной базы найдем обработчик, заполняющий регистр кадровой истории. Обдерем вызов записи набора записей в конструкцию защиты от ошибок:


Попытка
    НаборЗаписей.Записать();
Исключение
    // Пропуск дублирующей записи или логирование ошибки
    ЗаписьЖурналаРегистрации("ОбновлениеИБ.КадровыеДанные", 
        УровеньЖурналаРегистрации.Предупреждение, 
        , 
        , 
        ОписаниеОшибки());
КонецПопытки;

Это позволит обработчику пропустить конфликтную дублирующую строку и успешно завершить процедуру перехода для остальных данных.

Способ 4. Перенос данных с помощью правил конвертации

Если конфигурация существенно изменена или обновлять через шаблоны затруднительно, разберем альтернативный вариант переноса:

  1. Развернем чистую типовую базу «Бухгалтерия предприятия» редакции 3.0 требуемого актуального релиза.
  2. Воспользуемся стандартной обработкой переноса данных (выгрузка / загрузка через правила конвертации данных).
  3. Перенесем остатки и справочники из редакции 2.0 в 3.0 без использования механизма полного обновления конфигурации.

Использование одного из описанных способов позволяет полностью обойти ошибку записи ключевых полей и подготовить базу к полноценной работе в редакции 3.0.

← На главную