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