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