Как устранить ошибку записи объекта Начисление при переносе данных из ЗУП 2.5 в ЗУП 3

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

В процессе переноса данных и миграции с конфигурации 1С:Зарплата и управление персоналом 2.5 на редакцию 3.0 / 3.1 при помощи обработки УниверсальныйОбменДаннымиXML разработчики часто сталкиваются с ошибками записи видов расчета. Типичный текст исключения выглядит следующим образом:

Ошибка записи объекта. Тип объекта = Начисление, Объект = удержание невозвратных подотчетных сумм. Описание ошибки = Ошибка при вызове метода контекста (Записать): "Начисление"! Позиция модуля = Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(4861). Код сообщения = 26

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

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

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

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

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

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

  1. Обновим исходную конфигурацию ЗУП 2.5 до самого последнего официально выпущенного релиза.
  2. Установим актуальный релиз конфигурации ЗУП 3.1 (редакция 3.0 устарела и не поддерживается).
  3. Используем комплект правил конвертации, поставляемый непосредственно в составе актуального релиза конфигурации ЗУП 3.1. Типовые правила учитывают все изменения в структуре метаданных и гарантируют корректную трансляцию реквизитов.

Способ 2. Исправление данных в исходной базе ЗУП 2.5

Проанализируем проблемный элемент в исходной базе:

  1. Откроем базу ЗУП 2.5 и найдем элемент «Удержание невозвратных подотчетных сумм».
  2. Проверим, в каком именно плане видов расчета он находится. Если элемент зарегистрирован в основных или дополнительных начислениях, перенесем его логику в план видов расчета Удержания организаций.
  3. Если данный вид расчета является архивным и больше не используется в расчетах, установим пометку на удаление и удалим его через стандартную процедуру Удаление помеченных объектов перед повторной выгрузкой данных.
  4. Проверим список базовых и ведущих начислений у проблемного элемента на предмет циклических ссылок и дублей.

Способ 3. Локализация ошибки через отладчик в ЗУП 3

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

  1. Откроем конфигуратор целевой базы ЗУП 3.
  2. В меню выберем Отладка → Остановка по ошибке и включим флаг остановки при возникновении исключений.
  3. Запустим загрузку данных через обработку УниверсальныйОбменДаннымиXML в режиме отладки.
  4. В момент возникновения исключения выполнение кода остановится на строке с вызовом метода Записать() объекта ПланВидовРасчетаОбъект.Начисления.
  5. Перейдем внутрь модуля объекта начисления в процедуру ПередЗаписью или ПриЗаписи и через табло отладчика проверим значения ключевых реквизитов:
    
    // Проверим значения реквизитов в табло отладчика:
    ЭтотОбъект.НазначениеНачисления;
    ЭтотОбъект.СпособВыполненияНачисления;
    ЭтотОбъект.КатегорияНачисленияИлиНеоплаченногоВремени;
    ЭтотОбъект.ФормулаРасчета;
    
  6. Выявив незаполненный или некорректный реквизит, внесем соответствующие корректировки в обработчик правила конвертации объекта (ПКО) ПередЗаписьюПолученногоОбъекта или ПослеЗагрузки.

Способ 4. Использование рекомендованного варианта переноса данных

При переходе с ЗУП 2.5 на ЗУП 3.1 фирма «1С» рекомендует использовать вариант «Рекомендованный перенос данных» вместо полного переноса документов за всю историю:

  1. При рекомендованном переносе переносятся только остатки, кадровые данные на дату среза и данные для расчета среднего заработка за последние расчетные периоды.
  2. Неиспользуемые и некорректно настроенные архивные виды расчетов не попадают в целевую базу, что предотвращает ошибки записи объектов.
  3. Недостающие действующие удержания создаются штатно в интерфейсе ЗУП 3 после завершения основного этапа загрузки.
← На главную