Как заполнить вид операции в Авансовом отчете при обмене в БП 3.0 через Конвертацию данных?

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

При настройке обмена данными между конфигурациями, например, из «Управление торговлей 10.3» (УТ) в «Бухгалтерия предприятия 3.0» (БП), часто возникает необходимость заполнить реквизиты, которых нет в базе-источнике. Одной из таких частых задач является автоматическое заполнение реквизита ВидОперации для документа «Авансовый отчет» значением «Закупка, расходы».

Рассмотрим подробнее, как правильно настроить правила обмена в конфигурации «Конвертация данных 2.1» (КД 2.1), чтобы при загрузке документа в Бухгалтерию вид операции заполнялся корректно, и разберем частые ошибки, с которыми сталкиваются разработчики в процессе.

Правильная настройка ПКС для передачи перечисления

В нашем случае требуется, чтобы в базу-приемник передавалось значение перечисления Перечисления.ВидыОперацийАвансовыйОтчет.ПокупкаОплатаПрочее. Проанализируем по шагам, как это реализовать.

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

// Задаем строковое представление нужного значения перечисления
Значение = "ПокупкаОплатаПрочее";

Этого достаточно! Отдельное Правило Конвертации Объектов (ПКО) для самого перечисления в данном случае создавать не нужно. Механизмы обмена 1С устроены так, что система сама преобразует переданную строку в нужное значение перечисления в базе-приемнике по совпадению имени.

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

Выясним причину, почему другие варианты кода, часто предлагаемые на форумах, не работают или работают некорректно.

Ошибка 1: Попытка перезаписать переменную Объект

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


// НЕВЕРНЫЙ ПОДХОД
Объект = "Закупка, расходы";
// ИЛИ
Объект.ВидОперации = Перечисления.ВидыОперацийАвансовыйОтчет.ПокупкаОплатаПрочее;

Этот подход архитектурно неверен. В КД 2.1 служебная переменная Объект содержит ссылку на выгружаемый объект исходной базы данных (документ в УТ 10.3). Эту ссылку категорически не следует переопределять. Для подмены или программного формирования выгружаемого значения предназначена именно системная переменная Значение.

Ошибка 2: Ошибки компиляции и "Переменная не определена"

В процессе экспериментов можно столкнуться с ошибкой при загрузке в БП 3.0:

Ошибка компиляции при вычислении выражения... Переменная не определена (УзелОбменаЗагрузкаДанных)

Проанализируем ситуацию: эта ошибка никак не связана с реквизитом ВидОперации. Она возникает по двум причинам:

  1. Код по ошибке был вставлен в глобальные обработчики событий конвертации (например, ПередЗагрузкойДанных всей конвертации), где контекст переменных отличается от локального ПКС.
  2. Используется устаревшая версия обработки «Универсальный обмен данными в формате XML», которая не совпадает с форматом сохраненных правил обмена. Убедитесь, что версии обработок в источнике и приемнике актуальны.

Особенности Бухгалтерии предприятия 3.0: куда пропадает реквизит?

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

В конфигурации БП 3.0 реквизит ВидОперации у документа «Авансовый отчет» существует физически. Однако, начиная с релиза 3.0.68, разработчики 1С скрыли это поле из стандартной визуальной формы документа (на управляемых формах). Из-за этого возникает парадокс: система требует заполнения реквизита при проведении, но пользователь не видит его на экране и не может выбрать вручную.

Как исправить уже загруженные документы с пустым реквизитом:

Если вы загрузили пул документов до исправления правил обмена, и они не проводятся, воспользуемся встроенным лайфхаком:

  1. Откроем список документов «Авансовые отчеты» в Бухгалтерии предприятия.
  2. Выделим нужные (непроведенные) документы с помощью клавиш Ctrl или Shift.
  3. Нажмем правую кнопку мыши и выберем пункт «Изменить выделенные...» (групповое изменение реквизитов).
  4. На вкладке «Реквизиты» найдем строку Вид операции, установим флажок слева и выберем значение «Закупка, расходы».
  5. Нажмем кнопку изменения. Система массово заполнит скрытый реквизит, после чего документы можно будет успешно провести.

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

← На главную