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