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

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

При обновлении конфигурации «Бухгалтерия предприятия» с редакции 2.0 на редакцию 3.0 во время выполнения обработчиков обновления в режиме «1С:Предприятие» может возникнуть критическая ошибка:

{ОбщийМодуль.ЗарплатаКадрыОбновлениеСПредыдущейРедакции.Модуль}: Ошибка при вызове метода контекста (Записать) НовыйРегистратор.Движения.ПлановыеНачисления.Записать(); по причине: Запись с такими ключевыми полями существует! : ПлановыеНачисления: ххххххх (Регистр сведений: Плановые начисления; Номер строки: 2)

В более свежих релизах БП 3.0 аналогичная ошибка возникает на вызове ДокументПереноса.Движения.ПлановыеНачисления.Записать(). Проанализируем причины этой проблемы и разберем по шагам варианты ее решения.

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

В редакции 2.0 и редакции 3.0 структура подсистемы учета зарплаты и кадров существенно различается. В процессе обновления запускаются специализированные процедуры из общего модуля ЗарплатаКадрыОбновлениеСПредыдущейРедакции, которые считывают накопленные кадровые данные редакции 2.0 и формируют новые документы переноса и движения по регистрам сведений БП 3.0.

Ошибка уникальности ключа записи в регистре сведений ПлановыеНачисления возникает в следующих ситуациях:

  1. Дубликаты кадровых документов в исходной базе: Наличие нескольких документов (например, Кадровое перемещение организаций или Прием на работу в организацию), оформленных на одного сотрудника одной датой или содержащих одинаковый состав начислений (в том числе когда один из документов не проведен или помечен на удаление).
  2. Повторяющиеся строки начислений: В исходных документах БП 2.0 для одного сотрудника было дважды указано одно и то же плановое начисление (например, «Оклад по дням»).
  3. Несколько кадровых событий в один день: Если в редакции 2.0 по сотруднику в один день регистрировалось перемещение и изменение плановых начислений, при конвертации алгоритм пытается создать записи с идентичным набором измерений (Период, Сотрудник, Начисление), что приводит к конфликту ключа уникальности.
  4. Ошибки релизной цепочки обновления: Попытка прямого обновления между несовместимыми релизами или повреждение метаданных при пропуске промежуточных релизов.

Шаг 1. Проверка цепочки обновлений и платформы

Разберем базовые технические требования перед выполнением обновления:

  1. Убедимся, что версия платформы 1С:Предприятие 8.3 соответствует требованиям релиза конфигурации.
  2. Проверим корректность перехода по релизам. Для перехода с редакции 2.0 на 3.0 необходимо использовать дистрибутив обновления (дистрибутив перехода), в файле описания которого явно указана текущая версия исходной базы 2.0 (например, переход с 2.0.66.44 сразу на 3.0.57.10).
  3. Перед обновлением обязательно выполним процедуру Тестирование и исправление информационной базы в режиме «Конфигуратор» для устранения логической и ссылочной целостности.

Шаг 2. Поиск и удаление дублей кадровых документов в БП 2.0

Самая распространенная причина ошибки — наличие непроведенных, дублирующихся или некорректных кадровых документов в базе 2.0. Выполним следующие действия в исходной базе до запуска обновления:

  1. Откроем журналы документов Кадровые перемещения организаций, Приемы на работу в организацию, Ввод сведений о плановых начислениях работников организаций.
  2. Проверим наличие документов с одинаковыми номерами, датами или сотрудниками. Если найден непроведенный дубль проведенного документа, пометим его на удаление.
  3. Выполним полное физическое удаление через меню Операции — Удаление помеченных объектов.
  4. Проверим табличные части документов: внутри одного документа у одного сотрудника не должно быть двух одинаковых видов начислений.

Для быстрой локализации проблемы в исходной базе редакции 2.0 можно выполнить следующий проверочный запрос в консоли запросов:


ВЫБРАТЬ
    ПлановыеНачисления.Период КАК Период,
    ПлановыеНачисления.Сотрудник КАК Сотрудник,
    ПлановыеНачисления.ВидРасчетаИзмерение КАК ВидРасчета,
    КОЛИЧЕСТВО(*) КАК КоличествоЗаписей
ИЗ
    РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК ПлановыеНачисления
СГРУППИРОВАТЬ ПО
    ПлановыеНачисления.Период,
    ПлановыеНачисления.Сотрудник,
    ПлановыеНачисления.ВидРасчетаИзмерение
ИМЕЮЩИЕ
    КОЛИЧЕСТВО(*) > 1

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

Шаг 3. Переключение учета зарплаты (если учет ведется во внешней программе)

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

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

Шаг 4. Локализация ошибки через отладчик в БП 3.0

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

  1. Откроем информационную базу в режиме «Конфигуратор».
  2. В меню Отладка — Настройка исключений добавим условие остановки по тексту ошибки: Запись с такими ключевыми полями существует!.
  3. Запустим отладку (F5). При возникновении исключения выполнение остановится на строке записи набора: ДокументПереноса.Движения.ПлановыеНачисления.Записать();
  4. В окне Табло вычислим значение переменной ДокументПереноса или НовыйРегистратор, а также просмотрим содержимое коллекции ДокументПереноса.Движения.ПлановыеНачисления.
  5. Определим физическое лицо, сотрудника и дату, на которых происходит задвоение строки, после чего скорректируем соответствующие данные в исходной базе.
← На главную