Каталог решений - Как вносить изменения в новое ЭДО от 1С в БП 3? Июнь 2021, БП 3.0.93.20

Как вносить изменения в новое ЭДО от 1С в БП 3? Июнь 2021, БП 3.0.93.20

Как вносить изменения в новое ЭДО от 1С в БП 3? Июнь 2021, БП 3.0.93.20

В наличии

Обновились на 3.0.93.20, и все мои расширения под ЭДО перестали работать. Разберем, где вообще искать код, который выводит данные электронного документа в XML, где вмешиваться в ход этого вывода?

Категория:

Описание

Как отлаживать код?

Итак, начинаем кропотливую работу, чтобы найти участок кода, который формирует электронный документооборот.

Работаем в копии базы. Используем запуск с параметром «РежимОтладки», чтобы легко отлавливать фоновые задания:

 

 

Электронный документ получаем следующим образом:

 

 

Однако документ может не переформировываться, если он сохранился в регистре «Актуальные документы ЭДО», поэтому находим там запись по документу реализации и удаляем ее:

 

 

Также нужно очистить регистр «Состояния документов ЭДО» от записей по этому документу.

 

Визуальная проверка файла

Для визуальной проверки файла, чтобы увидеть файл, нам надо его выгрузить.

Для этого нажимаем дискетку:

 

 

Статус документа меняется:

 

 

И теперь его можно выгрузить в файл:

 

 

После этого придется очищать два регистра ЭДО по этому документу, как я уже писал выше.

 

Добавление ссылки в дерево данных

Есть небольшая проблемка, в дереве данных для заполнения электронного документа нет ссылки на объект, а нам нужны данные из него. Раньше ссылка была, но по расовым соображениям совершенного кода, чтобы усложнить жизнь сопровождающим разработчикам, 1С её варварски удалила из дерева.

Поэтому добавляем ссылку принудительно в модуле «ФорматыЭДО»:

&Вместо(«СформироватьДанныеОсновногоТитулаПоОбъектуУчета»)
Функция эдодп_СформироватьДанныеОсновногоТитулаПоОбъектуУчета(ОбъектУчета, Настройки, Данные)
    
Результат = ПродолжитьВызов(ОбъектУчета, Настройки, Данные);
    
//Осипов — добавляем ссылку в дерево
    
НСтр = Данные.ДанныеДокумента.Строки.Добавить();
    
НСтр.ПолныйПуть = «дор_ОбъектУчета»;
    
НСтр.Значение = ОбъектУчета;

    Возврат Результат;
КонецФункции

Проверяем, ссылка появилась под именем дор_ОбъектУчета:

 

 

 

Добавление данных в сведения продавца

Путем поиска «СвПрод» и расстановкой точек останова находим, что электронный документ формируется в функции СформироватьДокумент модуля ФорматыЭДО_ФНС:

 

 

И далее ветвлением в функции ЗаполнитьДокумент:

 

 

И наконец, попадаем в процедуру ЗаполнитьДокумент_ПередачаТоваров_ИнформацияПродавца модуля ФорматыЭДО_ФНС:

 

 

Оказывается, формирование документа переехало сюда из процедуры СформироватьПередачаТоваровПродавецCML модуля ОбменСКонтрагентамиВнутренний, где было ранее.

В принципе, можно было найти проще, поиском «Файл.Документ.СвДокПТПрКроме.СвДокПТПр.СодФХЖ1.ИнфПолФХЖ1«.

Код моего расширения для модуля ФорматыЭДО_ФНС выглядит так :

&ИзменениеИКонтроль(«ЗаполнитьДокумент_ПередачаТоваров_ИнформацияПродавца»)
Функция эдодп_ЗаполнитьДокумент_ПередачаТоваров_ИнформацияПродавца(Знач Данные)
…
    
СодФХЖ1 = ПолучитьОбъектТипаCML(«Файл.Документ.СвДокПТПрКроме.СвДокПТПр.СодФХЖ1», ПространствоИмен);

#Вставка
    
//Осипов 2021-02-06 на новом релизе БП3 сюда
    //Осипов — добавляем ФХЖ1 +++
    //Потом можно будет убрать если данные будут передаваться по УПД а не товарной накладной
    
СведСФХЖ = ПолучитьОбъектТипаCML(«Файл.Документ.СвДокПТПрКроме.СвДокПТПр.СодФХЖ1.ИнфПолФХЖ1», ПространствоИмен);
    
СодФХЖ1.ИнфПолФХЖ1 = СведСФХЖ;
    
СведТекстИнф = ПолучитьОбъектТипаCML(«Файл.Документ.СвДокПТПрКроме.СвДокПТПр.СодФХЖ1.ИнфПолФХЖ1.ТекстИнф», ПространствоИмен);
    
СведТекстИнф.Идентиф = «Код»;
    
ТекСсылкаНаОбъект = ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(ДеревоДанных, «дор_ОбъектУчета»);
    
СведТекстИнф.Значен = эдодп_КодМаршрута(ТекСсылкаНаОбъект);
    
СодФХЖ1.ИнфПолФХЖ1.ТекстИнф.Добавить(СведТекстИнф);
    
//—
#КонецВставки
…
КонецФункции

 

Добавляем данные по счету-фактуре

Теперь нужно сделать доработки по ДопДанныеСчетаФактуры. Запускаем глобальный поиск

Для Счета-фактуры формат электронного документа Форматы.УПД2019.ИнформацияПродавца (ON_NSCHFDOPPR_1_997_01_05_01).

Счет-фактура заполняется здесь:

 

 

Код по замене для модуля ФорматыЭДО_ФНС имеет вид:

Функция эдодп_ЗаполнитьДокумент_УПД2019_ИнформацияПродавца(Знач Данные)
…
    Если 
ЗначениеЗаполнено(ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(ДеревоДанных, «ДопДанныеСчетаФактуры»)) Тогда
…

#Вставка
                
//Осипов 2021-04-02
                
Если ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(Информация, «ДопДанныеСчетаФактуры.ТекстоваяИнформация.НомерСтроки.Идентификатор») = «Кол-во» Тогда
                    
ТекСсылкаНаОбъект = ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(ДеревоДанных, «дор_ОбъектУчета»);
                    
РаботаСФайламиБЭД.ЗаполнитьСвойствоXDTO(ТекстИнфТип, «Значен»,
                    
Формат(ТекСсылкаНаОбъект.Товары.Итог(«Количество»), «ЧДЦ=3; ЧРД=.; ЧН=0; ЧГ=»)
                    , Истина, 
Ошибки);
                КонецЕсли;

#КонецВставки
                
ИнфПолФХЖ1.ТекстИнф.Добавить(ТекстИнфТип);

…
КонецФункции

 

Отключаем контроль нулевой суммы счета-фактуры

Для тары используется нулевая стоимость. Отключаем навязчивый контроль в модуле ДеревоЭлектронногоДокументаБЭД:

&Вместо(«ДобавитьОшибкуПроверкиДереваДанных»)
Процедура эдодп_ДобавитьОшибкуПроверкиДереваДанных(Ошибки, СтрокаДерева, ТекстОшибки, ПодставлятьИмяРеквизита, НомерСтрокиДанных, ПрикладноеПредставлениеРеквизита)
    
//2021-06-02 — функция переехала сюда
    //Осипов — отключаем ошубку нулевой суммы
    
Если СтрокаДерева.ПолныйПуть = «СведенияОТоварах.НомерСтроки.СтоимостьТоваровБезНалога» Тогда
        Возврат;
    КонецЕсли;
    
ПродолжитьВызов(Ошибки, СтрокаДерева, ТекстОшибки, ПодставлятьИмяРеквизита, НомерСтрокиДанных, ПрикладноеПредставлениеРеквизита);
КонецПроцедуры

 

Выводим итог у счет-фактуры в табличном документе

Запускаем монитор производительности и запускаем в нем поиск по «Табличный документ». Находим код, который отображает табличный документ:

 

 

К сожалению, текст правила является кодом XSLT-преобразования. 1С отступила от старого доброго 1С и пользуется преобразованием XML в XSLT:

 

 

Теоретически можно обработать макет после его формирования, но там отображаются данные файла XML, без его ссылки, т.е. посчитать итог проблематично, только если бежать по всем строкам XML.

 

 

Поэтому доработку макета я отложил заказчику в отдельную задачу и оценил ее в 1.5 часа.

Объем факт: 3.5 час. БП 3.0.93.20

has been added to your cart:
Оформление заказа