Как выгрузить табличную часть документа в набор движений регистра (документ Операция) в КД 2.0

Программист Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При настройке обмена данными между конфигурациями через Конвертацию данных 2.0 часто возникает задача трансформации данных. Типичный пример: необходимо перенести строки табличной части документа из источника (например, «Управление торговлей») в записи регистра бухгалтерии документа «Операция (бухгалтерский учет)» в приемнике (например, «Бухгалтерия предприятия»).

В процессе такой настройки программисты часто сталкиваются с ошибкой: «Итератор для значения не определен». Проанализируем ситуацию, выясним причину этой ошибки и разберем по шагам правильный алгоритм настройки такой выгрузки.

Почему возникает ошибка «Итератор для значения не определен»?

Разберем техническую сторону вопроса. В системе 1С записи регистра бухгалтерии имеют сложное строение, особенно в части Субконто. Субконто — это не просто реквизит, а коллекция (карта), где ключом является вид субконто, а значением — конкретный объект (номенклатура, контрагент и т.д.).

Когда мы настраиваем ПКС (Правило конвертации свойства) для свойства СубконтоДт или СубконтоКт, встроенный алгоритм обработки обмена УниверсальныйОбменДаннымиXML ожидает, что в переменную Значение попадет объект, который можно перебрать циклом (Для каждого). Если мы просто укажем в качестве источника реквизит табличной части (например, Источник.Номенклатура), то в Значение попадет ссылка на объект. Ссылка не является коллекцией, поэтому при попытке платформы выполнить внутренний код:


Для каждого КлючИЗначение из Значение Цикл
    ВидСубконто = КлючИЗначение.Ключ;
    Субконто = КлючИЗначение.Значение;
    // ... логика КД
КонецЦикла;

Происходит аварийная остановка с сообщением об ошибке итератора. Наша задача — подать на вход КД именно ту структуру, которую она ожидает.

Способ 1: Использование соответствия в ПКС субконто

Рассмотрим самый надежный способ решения проблемы через явное определение коллекции субконто. Этот метод позволяет четко сопоставить виды субконто, определенные в плане счетов приемника, с данными из источника.

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

// Создаем коллекцию для субконто
Значение = Новый Соответствие();

// Наполняем данными из строки табличной части (ОбъектКоллекции)
// В качестве ключа используем ссылку на ВидСубконто из конфигурации ПРИЕМНИКА
// В качестве значения — само значение из источника
Значение.Вставить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура, ОбъектКоллекции.Номенклатура);
Значение.Вставить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады, ОбъектКоллекции.Склад);

Важно: При использовании такого кода убедитесь, что в ПКО документа правильно настроена передача ОбъектКоллекции (строки ТЧ) в правило конвертации группы свойств (ПКГС).

Способ 2: Настройка ПКГС (Табличная часть -> Набор записей)

Проанализируем, как правильно связать саму табличную часть документа с движениями. Чтобы строки таблицы стали движениями регистра, используется ПКГС (Правило конвертации группы свойств).

Разберем по шагам настройки в ПКО документа-источника:

  1. Создайте новую группу свойств.
  2. В качестве источника выберите вашу табличную часть (например, Товары).
  3. В качестве приемника выберите набор записей регистра (например, Движения.Хозрасчетный).
  4. В этой группе создайте ПКС для всех необходимых полей: СчетДт, СчетКт, Сумма, Количество и т.д.
  5. Если автоматическое определение коллекции не срабатывает, в обработчике «Перед обработкой» самой группы свойств (ПКГС) можно явно указать источник данных:

// Гарантируем, что КД будет итерировать по строкам ТЧ
КоллекцияОбъектов = Источник.Товары.Выгрузить();

Особенности выгрузки в «Операцию» (регистр Хозрасчетный)

При выгрузке данных в документ «Операция» в 1С:Бухгалтерии нужно учитывать специфику забалансового учета и активности записей:

Использование «Входящих данных» для сложных случаев

Если структура документа-источника и набора записей приемника сильно различаются, рассмотрим вариант с использованием параметра ВходящиеДанные. Это позволяет подготовить данные в ПКО документа и передать их «пакетом» в ПКО набора записей.

В ПКО документа (источник) в обработчике «После выгрузки» можно подготовить таблицу значений, полностью соответствующую структуре регистра, и вызвать выгрузку набора записей вручную через функцию ВыгрузитьОбъект(), передав подготовленную таблицу в параметр ВходящиеДанные.

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

← На главную