В процессе переноса данных и миграции с конфигурации 1С:Зарплата и управление персоналом 2.5 на редакцию 3.0 / 3.1 при помощи обработки УниверсальныйОбменДаннымиXML разработчики часто сталкиваются с ошибками записи видов расчета. Типичный текст исключения выглядит следующим образом:
Ошибка записи объекта. Тип объекта = Начисление, Объект = удержание невозвратных подотчетных сумм. Описание ошибки = Ошибка при вызове метода контекста (Записать): "Начисление"! Позиция модуля = Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(4861). Код сообщения = 26
Проанализируем природу возникновения этой ошибки, разберем архитектурные различия между версиями конфигураций и рассмотрим практические способы решения проблемы.
Основная причина ошибки заключается в кардинальном различии структуры хранения видов расчета и жесткой валидации данных в новой редакции ЗУП:
ОсновныеНачисленияОрганизаций, ДополнительныеНачисленияОрганизаций и УдержанияОрганизаций. В ЗУП 3 структура изменилась — используются ПланВидовРасчета.Начисления и ПланВидовРасчета.Удержания. Если пользовательский вид расчета (например, «Удержание невозвратных подотчетных сумм») в исходной базе ЗУП 2.5 был ошибочно создан среди начислений (например, как начисление с отрицательной суммой), правила обмена сопоставляют его с планом видов расчета Начисления.ПередЗаписью и ПриЗаписи плана видов расчета Начисления выполняется проверка заполнения реквизитов: НазначениеНачисления, СпособВыполненияНачисления, КатегорияНачисленияИлиНеоплаченногоВремени, а также корректность синтаксиса формул и ссылочной целостности в табличных частях БазовыеВидыРасчета и ВедущиеВидыРасчета. Некорректно заполненные поля вызывают исключение при вызове метода Записать().Разберем первый и самый надежный шаг для обеспечения корректной миграции данных:
Проанализируем проблемный элемент в исходной базе:
Удаление помеченных объектов перед повторной выгрузкой данных.Если требуется точно выяснить, какой именно реквизит не проходит валидацию при записи, выполним диагностику в конфигураторе принимающей базы:
УниверсальныйОбменДаннымиXML в режиме отладки.Записать() объекта ПланВидовРасчетаОбъект.Начисления.ПередЗаписью или ПриЗаписи и через табло отладчика проверим значения ключевых реквизитов:
// Проверим значения реквизитов в табло отладчика:
ЭтотОбъект.НазначениеНачисления;
ЭтотОбъект.СпособВыполненияНачисления;
ЭтотОбъект.КатегорияНачисленияИлиНеоплаченногоВремени;
ЭтотОбъект.ФормулаРасчета;
ПередЗаписьюПолученногоОбъекта или ПослеЗагрузки.При переходе с ЗУП 2.5 на ЗУП 3.1 фирма «1С» рекомендует использовать вариант «Рекомендованный перенос данных» вместо полного переноса документов за всю историю: