При переносе данных между конфигурациями, построенными на классической архитектуре (например, УПП 1.3 или КА 1.1), часто возникает задача корректного отражения операций возврата товаров поставщику. Одной из ключевых особенностей этих систем является наличие реквизита ПоставщикуВыставляетсяСчетФактураНаВозврат в документе ВозвратТоваровПоставщику. Если этот флаг установлен, система ожидает наличие связанного документа СчетФактураВыданный.
В рамках данной статьи мы разберем, как с помощью «Конвертации данных 2.0» автоматизировать процесс установки этого флага и обеспечить гарантированную выгрузку подчиненного счета-фактуры вместе с основным документом возврата.
Перед тем как переходить к коду, проанализируем методологическую значимость этого реквизита. В конфигурациях УПП и КА установка этого флага в значение Истина радикально меняет логику проведения документа по регистрам НДС:
СчетФактураВыданный имел ссылку на ВозвратТоваровПоставщику в качестве документа-основания.Если мы просто перенесем документы по отдельности, существует риск, что флаг не будет установлен, и учет НДС «поплывет». Поэтому нам необходимо реализовать логику «связки» непосредственно в правилах обмена (ПКО).
Первым делом нам нужно определить, существует ли для конкретного возврата выписанный счет-фактура. Рассмотрим пример реализации логики в обработчике ПКС (Правила конвертации свойств) для реквизита ПоставщикуВыставляетсяСчетФактураНаВозврат.
Проанализируем ситуацию: нам необходимо программно проверить наличие связи. В идеале для этого используется запрос, но в примере автора используется вспомогательная функция. Разберем, как это выглядит в коде:
Подчиненный = Неопределено;
// Используем функцию для поиска связанного счета-фактуры
// В типовых решениях это можно сделать запросом к регистру или через критерии отбора
Если мвДоработки.ПодчиненныйДокумент(Источник.Ссылка, "СчетФактураВыданный", Подчиненный) Тогда
Значение = Истина; // Устанавливаем флаг в документе-приемнике
КонецЕсли;
Если вы не используете кастомные функции, мы рекомендуем выполнить поиск через запрос к таблице СчетФактураВыданный, где поле ДокументОснование (или строка в табличной части ДокументыОснования для новых версий) равно нашему источнику.
Просто установить флаг Истина недостаточно. Нам нужно гарантировать, что найденный документ Подчиненный также попадет в файл обмена, причем по конкретному правилу конвертации. Для этого используется мощный механизм КД 2.0 — функция ВыгрузитьПоПравилу.
Рассмотрим синтаксис этой функции. Важно соблюдать количество запятых, так как мы пропускаем необязательные параметры (УзелСсылки, ТаблицаПравилКонвертации и т.д.), чтобы добраться до имени ПКО.
Выясним, как правильно вызвать выгрузку:
// В обработчике ПКС или ПКО
Если Подчиненный <> Неопределено Тогда
// Выгружаем найденный счет-фактуру по правилу "СчетФактураВыданный"
ВыгрузитьПоПравилу(Подчиненный, , , , "СчетФактураВыданный");
КонецЕсли;
Разберем подробнее параметры этой функции:
Важный нюанс: Если вызвать этот код внутри ПКС, то выгрузка произойдет в момент обработки этого свойства. Однако более «чистым» подходом считается вызов в обработчике «После выгрузки» самого ПКО основного документа (Возврата). Это гарантирует, что ссылка на основной документ уже сформирована и готова к использованию в подчиненных объектах.
Когда мы вызываем ВыгрузитьПоПравилу, КД помещает данные счета-фактуры в файл обмена. Чтобы при загрузке в УПП или КА этот документ «нашел» свой документ-основание, проверьте следующие настройки в ПКО для СчетФактураВыданный:
ДокументОснование.ВозвратуТоваровПоставщику.Номер, Дата и Организация. Если вы переносите данные между идентичными конфигурациями, можно использовать поиск по УникальномуИдентификатору.Проанализируем ситуацию с дублями: если выгружаемый счет-фактура уже был выгружен ранее (например, через общую выборку документов), КД 2.0 автоматически обработает это. Функция ВыгрузитьПоПравилу проверит, был ли данный объект помещен в файл в рамках текущей сессии, и если да, то повторно полные данные выгружаться не будут — запишется только ссылка.
Суммируя все вышесказанное, составим финальный план действий для настройки правил обмена:
Значение = Истина, если документ найден.ВыгрузитьПоПравилу(НайденнаяСсылка, , , , "ИмяВашегоПКО_СФ").Объект.Записать(РежимЗаписиДокумента.Проведение), если бизнес-логика требует немедленного отражения в учете НДС.Таким образом, мы обеспечиваем целостность данных при миграции. Использование ВыгрузитьПоПравилу — это стандарт де-факто для сложных обменов, где объекты связаны жесткой логикой бизнес-процесса, которую невозможно описать простым сопоставлением полей.