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