При настройке обмена данными между конфигурациями, например, из «Управление торговлей 10.3» (УТ) в «Бухгалтерия предприятия 3.0» (БП), часто возникает необходимость заполнить реквизиты, которых нет в базе-источнике. Одной из таких частых задач является автоматическое заполнение реквизита ВидОперации для документа «Авансовый отчет» значением «Закупка, расходы».
Рассмотрим подробнее, как правильно настроить правила обмена в конфигурации «Конвертация данных 2.1» (КД 2.1), чтобы при загрузке документа в Бухгалтерию вид операции заполнялся корректно, и разберем частые ошибки, с которыми сталкиваются разработчики в процессе.
В нашем случае требуется, чтобы в базу-приемник передавалось значение перечисления Перечисления.ВидыОперацийАвансовыйОтчет.ПокупкаОплатаПрочее. Проанализируем по шагам, как это реализовать.
ВидОперации.
// Задаем строковое представление нужного значения перечисления
Значение = "ПокупкаОплатаПрочее";
Этого достаточно! Отдельное Правило Конвертации Объектов (ПКО) для самого перечисления в данном случае создавать не нужно. Механизмы обмена 1С устроены так, что система сама преобразует переданную строку в нужное значение перечисления в базе-приемнике по совпадению имени.
Выясним причину, почему другие варианты кода, часто предлагаемые на форумах, не работают или работают некорректно.
Ошибка 1: Попытка перезаписать переменную Объект
Иногда разработчики пытаются использовать в обработчике «Перед выгрузкой» конструкции вроде:
// НЕВЕРНЫЙ ПОДХОД
Объект = "Закупка, расходы";
// ИЛИ
Объект.ВидОперации = Перечисления.ВидыОперацийАвансовыйОтчет.ПокупкаОплатаПрочее;
Этот подход архитектурно неверен. В КД 2.1 служебная переменная Объект содержит ссылку на выгружаемый объект исходной базы данных (документ в УТ 10.3). Эту ссылку категорически не следует переопределять. Для подмены или программного формирования выгружаемого значения предназначена именно системная переменная Значение.
Ошибка 2: Ошибки компиляции и "Переменная не определена"
В процессе экспериментов можно столкнуться с ошибкой при загрузке в БП 3.0:
Ошибка компиляции при вычислении выражения... Переменная не определена (УзелОбменаЗагрузкаДанных)
Проанализируем ситуацию: эта ошибка никак не связана с реквизитом ВидОперации. Она возникает по двум причинам:
ПередЗагрузкойДанных всей конвертации), где контекст переменных отличается от локального ПКС.Даже если правила написаны верно, пользователи часто жалуются, что документы загружаются «с пустым видом операции» или отказываются проводиться с ошибкой «Не заполнено поле Вид Операции». Посмотрим на пример, почему так происходит.
В конфигурации БП 3.0 реквизит ВидОперации у документа «Авансовый отчет» существует физически. Однако, начиная с релиза 3.0.68, разработчики 1С скрыли это поле из стандартной визуальной формы документа (на управляемых формах). Из-за этого возникает парадокс: система требует заполнения реквизита при проведении, но пользователь не видит его на экране и не может выбрать вручную.
Как исправить уже загруженные документы с пустым реквизитом:
Если вы загрузили пул документов до исправления правил обмена, и они не проводятся, воспользуемся встроенным лайфхаком:
Ctrl или Shift.Вид операции, установим флажок слева и выберем значение «Закупка, расходы».Используя правильное присвоение через переменную Значение в Конвертации данных, вы избежите этих проблем в будущем, и ваши авансовые отчеты будут автоматически получать нужный вид операции при каждом сеансе обмена.