При настройке обмена данными между конфигурациями (например, «Управление торговлей» и «Бухгалтерия предприятия») с помощью конфигурации «Конвертация данных 2.0» часто возникает задача выгрузить подчиненный или связанный документ вместе с основным. Типичный сценарий — выгрузка документа СчетФактураВыданный следом за документом РеализацияТоваровУслуг, где связь реализована через реквизит ДокументОснование или табличную часть ДокументыОснования.
Разберем подробно, где и как правильно настроить программную выгрузку связанного документа, а также рассмотрим частые ошибки, возникающие в процессе.
Основной и самый гибкий способ — инициировать выгрузку счета-фактуры непосредственно в момент выгрузки накладной. Для этого перейдем в ПКО документа РеализацияТоваровУслуг на закладку Обработчики событий и откроем обработчик ПослеВыгрузки.
В этом обработчике доступна переменная Источник, содержащая ссылку на выгружаемый документ реализации. Посмотрим на алгоритм поиска и выгрузки:
Запрос, так как документ-основание может храниться не только в реквизите шапки, но и в табличной части.ВыгрузитьПоПравилу(), передавая в качестве источника найденную ссылку на счет-фактуру и указывая имя соответствующего правила конвертации.Проанализируем пример корректного кода для обработчика ПослеВыгрузки:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СФ.Ссылка КАК Ссылка
|ИЗ
| Документ.СчетФактураВыданный КАК СФ
|ГДЕ
| СФ.ДокументОснование = &ДокументОснование
| И СФ.ПометкаУдаления = ЛОЖЬ";
Запрос.УстановитьПараметр("ДокументОснование", Источник);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// Выгружаем найденный счет-фактуру по отдельному ПКО
ВыгрузитьПоПравилу(Выборка.Ссылка, , , , "СчетФактураВыданный");
КонецЦикла;
Обратите внимание: частая ошибка разработчиков — попытка получить объект документа методом ПолучитьОбъект(). Для работы функции ВыгрузитьПоПравилу() достаточно передать ссылку (тип ДокументСсылка). Если объект не найден в базе, вызов ПолучитьОбъект() на пустой ссылке приведет к аварийной остановке обмена с ошибкой «Элемент не выбран!».
Рассмотрим структуру вызова функции ВыгрузитьПоПравилу(), которая генерируется модулем выгрузки:
// Параметры функции:
// 1. Источник - ссылка или объект источника данных
// 2. Приемник - XML-узел объекта приемника
// 3. ВходящиеДанные - структура произвольных входящих данных для конвертации
// 4. ИсходящиеДанные - структура исходящих данных для свойств
// 5. ИмяПКО - строковое имя правила конвертации объекта приемника
// 6. УзелСсылки - XML-узел ссылки
// 7. ТолькоПолучитьУзелСсылки - признак получения только ссылки без самого объекта
// 8. ПКО - прямая ссылка на структуру правила
В большинстве случаев достаточно передать первый параметр (ссылку на объект) и пятый (имя ПКО строкой).
Если нет необходимости жестко привязывать момент выгрузки счета-фактуры к накладной, можно настроить отдельное Правило выгрузки данных (ПВД) для объекта СчетФактураВыданный:
Документ.СчетФактураВыданный.ПередОбработкой накладываем необходимые отборы по дате, проведенности или организации.После выгрузки счета-фактуры нередко возникают ошибки при открытии формы документа в конфигурации-приемнике (например, в «Бухгалтерии предприятия»):
Выясним причину: в современных конфигурациях форма документа СчетФактураВыданный при открытии инициализирует динамические списки в зависимости от значения реквизита ВидСчетаФактуры. Если при конвертации данный реквизит не был заполнен (остался пустым), ветка установки параметров запроса пропускается, что приводит к критической ошибке динамического списка. Для исправления ситуации в ПКС реквизита ВидСчетаФактуры необходимо настроить ПКЗ (Правило конвертации значений) либо в обработчике ПередВыгрузкой жестко задать:
Значение = Перечисления.ВидСчетаФактурыВыставленного.НаРеализацию;
Проанализируем структуру метаданных приемника: в некоторых редакциях «Бухгалтерии предприятия» основание хранится не в реквизите шапки ДокументОснование, а в табличной части ДокументыОснования. В этом случае в ПКО счета-фактуры необходимо сопоставить табличную часть и переносить ссылку на накладную в строку ТЧ.