Как передать данные через ВыгрузитьПоПравилу при использовании произвольного запроса в 1С:Конвертация данных

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

При настройке обмена данными между современными конфигурациями на платформе 1С:Предприятие 8.x (например, Управление торговлей) и устаревшими системами на базе 1С 7.7 (например, Бухгалтерия 7.7) разработчики часто сталкиваются со специфическими проблемами. Одной из наиболее распространенных задач является программная выгрузка данных через обработчик Правила выгрузки данных (ПВД) с использованием метода ВыгрузитьПоПравилу. Рассмотрим подробно, почему данные могут «теряться» при передаче и как правильно настроить этот механизм.

Проблема использования Списка Значений для входящих данных

Разберем типичную ситуацию: программист пытается собрать данные из нескольких источников (например, из чеков ККМ) в таблицу значений, сворачивает их и хочет передать в один документ Продажа в розницу в приемнике. В исходном коде часто используется объект СписокЗначений для формирования параметров шапки документа и самой табличной части. Проблема заключается в том, что механизм Конвертации данных 2.1, особенно при работе с правилами для 7.7, ожидает определенный формат коллекции.

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

Решение проблемы: Переход на использование Структуры

Для того чтобы данные успешно попали в обработку, мы должны использовать объект Структура. В этом случае ключи структуры будут соответствовать именам свойств, которые мы хотим заполнить в приемнике. Рассмотрим исправленный пример кода, который следует использовать в обработчике ПВД:


// Создаем структуру для передачи данных в ПКО
ИсходящиеДанные = Новый Структура; 

// Заполняем реквизиты шапки документа
ИсходящиеДанные.Вставить("ДатаДок", ФормДатаКонца);
ИсходящиеДанные.Вставить("Комментарий", Строка(ФормДатаКонца) + " " + СокрЛП(ВыборкаДокументов.Склад) + " ККМ");
ИсходящиеДанные.Вставить("ПродажаОблагаетсяЕНВД", 0);

// Сворачиваем таблицу товаров перед передачей
ТабРеал.Свернуть("Товар", "Количество, Цена, НДС, Сумма, Всего");

// Помещаем таблицу значений в структуру
ИсходящиеДанные.Вставить("ТабличнаяЧасть", ТабРеал);

// Вызываем выгрузку по правилу, передавая структуру третьим параметром
ВыгрузитьПОПравилу(,, ИсходящиеДанные,, "ПродажаВРозницу");

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

Настройка ПКС (Правил конвертации свойств)

Одного программного кода недостаточно. Выясним причину, по которой даже при использовании структуры данные могут не загрузиться. Необходимо проверить настройки в конфигурации Конвертация данных:

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

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

Исправление ошибки преобразования к числу

Часто после исправления структуры возникает следующая ошибка: Преобразование значения к типу Число не может быть выполнено. Проанализируем ситуацию: это обычно происходит из-за несоответствия типов данных в 1С 8 и 1С 7.7.

Рассмотрим основные причины этой ошибки:

Рекомендации по отладке обмена с 7.7

Поскольку 1С 7.7 является менее гибкой системой в плане типизации данных по сравнению с 8.3, при выгрузке данных через ВыгрузитьПоПравилу придерживайтесь следующих правил:

Во-первых, всегда приводите передаваемые строковые данные к нужному формату через СокрЛП() или Строка(), чтобы избежать передачи лишних пробелов или объектов метаданных.

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

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

Следуя этим шагам, мы обеспечим надежную передачу данных между разными поколениями платформ 1С и минимизируем ошибки при программном формировании документов.

← На главную