Почему не заполняются реквизиты составного типа в движениях регистров при использовании Конвертации данных?

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

При переносе данных между базами 1С с помощью Конвертации данных 2.1 часто возникает ситуация, когда при выгрузке регистров накопления, содержащих измерения или ресурсы составного типа (например, поле СчетФактура, ссылающееся на разные виды документов), данные в базе-приемнике не заполняются. Несмотря на то, что сами объекты (документы) успешно создаются, движения регистра остаются «пустыми» в соответствующих полях. Рассмотрим, почему это происходит и как исправить эту проблему.

Анализ причин некорректной загрузки

Основная причина заключается в том, как движок Конвертации данных обрабатывает ссылочные типы. При загрузке через ВходящиеДанные система ожидает, что ссылка на объект будет разрешена в момент записи движения. Если документ-ссылка еще не был записан в базу или его ПКО не настроено для корректного автоподбора типов, поле остается пустым.

Важные моменты для проверки:

  1. Типизация в правилах: Убедитесь, что в ПКС для составного реквизита в поле «Тип» выбрана функция Тип. Без явного указания типов система не всегда может корректно определить, какой именно объект должен быть записан в поле.
  2. Порядок следования объектов: Если движение регистра в XML-файле стоит раньше, чем сам документ-основание, система может не успеть найти ссылку в своей кэш-таблице.
  3. Автоподбор ПКО: Если для составного типа не указаны правила конвертации (ПКО) для каждого входящего типа, система не сможет произвести десериализацию.

Метод 1: Настройка правил конвертации

Попробуем исправить ситуацию в самих правилах. Во-первых, обязательно убедитесь, что в ПКС для реквизита составного типа правильно настроены правила конвертации. Если автоподбор не работает, нужно явно указать связь между типами источника и приемника.

Проверьте настройку Не запоминать выгруженные объекты в ПКО документов. Если эта галка установлена, система не будет хранить ссылки на уже выгруженные объекты, что приведет к ошибкам при попытке повторного обращения к ним из движений регистра.

Метод 2: Использование рукописной обработки для переноса остатков

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

Сначала мы переносим всю нормативно-справочную информацию и документы через Конвертацию данных, а затем выполняем загрузку движений регистров с помощью простой внешней обработки. Это позволяет гарантировать, что все документы-основания уже существуют в базе-приемнике.

Рассмотрим пример кода для загрузки остатков через Ввод начальных остатков или Операция с использованием Запрос и ЗаполнитьЗначенияСвойств:


// Пример получения данных из регистра источника
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ 
               | Регистр.Организация, 
               | Регистр.СчетФактура, 
               | Регистр.Сумма 
               | ИЗ РегистрНакопления.НДСПредъявленный.Остатки КАК Регистр";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    // Здесь мы программно формируем документ ввода остатков
    // или создаем записи регистра напрямую
    // Ищем документ по номеру или GUID
    Док = Документы.СчетФактураПолученный.НайтиПоНомеру(Выборка.СчетФактура.Номер, Выборка.СчетФактура.Дата);
    
    // Создаем или корректируем движение
    НаборЗаписей = РегистрыНакопления.НДСПредъявленный.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Организация.Установить(Выборка.Организация);
    
    // Записываем полученную ссылку
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.СчетФактура = Док.Ссылка;
    // ... заполнение остальных полей
    
    НаборЗаписей.Записать();
КонецЦикла;

Почему этот способ надежнее?

Использование внешней обработки дает нам полный контроль над процессом:

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

← На главную