Как выгрузить связанные счета-фактуры при синхронизации документов в Конвертации данных 2.0

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

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

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

Способ 1. Программная выгрузка через обработчик «ПослеВыгрузки» в ПКО

Основной и самый гибкий способ — инициировать выгрузку счета-фактуры непосредственно в момент выгрузки накладной. Для этого перейдем в ПКО документа РеализацияТоваровУслуг на закладку Обработчики событий и откроем обработчик ПослеВыгрузки.

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

  1. Выполняем поиск связанного счета-фактуры в базе-источнике. Для гарантированного результата рекомендуется использовать объект Запрос, так как документ-основание может храниться не только в реквизите шапки, но и в табличной части.
  2. Проверяем, найден ли документ.
  3. Вызываем встроенную функцию КД 2.0 ВыгрузитьПоПравилу(), передавая в качестве источника найденную ссылку на счет-фактуру и указывая имя соответствующего правила конвертации.

Проанализируем пример корректного кода для обработчика ПослеВыгрузки:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	СФ.Ссылка КАК Ссылка
    |ИЗ
    |	Документ.СчетФактураВыданный КАК СФ
    |ГДЕ
    |	СФ.ДокументОснование = &ДокументОснование
    |	И СФ.ПометкаУдаления = ЛОЖЬ";

Запрос.УстановитьПараметр("ДокументОснование", Источник);
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    // Выгружаем найденный счет-фактуру по отдельному ПКО
    ВыгрузитьПоПравилу(Выборка.Ссылка, , , , "СчетФактураВыданный");
КонецЦикла;

Обратите внимание: частая ошибка разработчиков — попытка получить объект документа методом ПолучитьОбъект(). Для работы функции ВыгрузитьПоПравилу() достаточно передать ссылку (тип ДокументСсылка). Если объект не найден в базе, вызов ПолучитьОбъект() на пустой ссылке приведет к аварийной остановке обмена с ошибкой «Элемент не выбран!».

Параметры функции ВыгрузитьПоПравилу

Рассмотрим структуру вызова функции ВыгрузитьПоПравилу(), которая генерируется модулем выгрузки:


// Параметры функции:
// 1. Источник - ссылка или объект источника данных
// 2. Приемник - XML-узел объекта приемника
// 3. ВходящиеДанные - структура произвольных входящих данных для конвертации
// 4. ИсходящиеДанные - структура исходящих данных для свойств
// 5. ИмяПКО - строковое имя правила конвертации объекта приемника
// 6. УзелСсылки - XML-узел ссылки
// 7. ТолькоПолучитьУзелСсылки - признак получения только ссылки без самого объекта
// 8. ПКО - прямая ссылка на структуру правила

В большинстве случаев достаточно передать первый параметр (ссылку на объект) и пятый (имя ПКО строкой).

Способ 2. Использование отдельного ПВД (Правила выгрузки данных)

Если нет необходимости жестко привязывать момент выгрузки счета-фактуры к накладной, можно настроить отдельное Правило выгрузки данных (ПВД) для объекта СчетФактураВыданный:

  1. Создаем ПВД со стандартной выборкой по объекту Документ.СчетФактураВыданный.
  2. В обработчике ПередОбработкой накладываем необходимые отборы по дате, проведенности или организации.
  3. В списке правил выгрузки располагаем ПВД счетов-фактур после ПВД накладных, чтобы ссылки на документы-основания уже гарантированно существовали в базе-приемнике.

Типовые ошибки при загрузке счетов-фактур в приемнике

После выгрузки счета-фактуры нередко возникают ошибки при открытии формы документа в конфигурации-приемнике (например, в «Бухгалтерии предприятия»):

  1. Ошибка: «Не задано значение параметра "СчетаФактурыИсключения"»:

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

    Значение = Перечисления.ВидСчетаФактурыВыставленного.НаРеализацию;
  2. Документ-основание не отображается в шапке накладной:

    Проанализируем структуру метаданных приемника: в некоторых редакциях «Бухгалтерии предприятия» основание хранится не в реквизите шапки ДокументОснование, а в табличной части ДокументыОснования. В этом случае в ПКО счета-фактуры необходимо сопоставить табличную часть и переносить ссылку на накладную в строку ТЧ.

← На главную