В поисках грузоотправителя

Клиент поставил задачу: номер Торг-12 должен быть прописан также в поле <ТранГруз СвТранГруз=»ТН 42 от 30.03.2021″>. И начались поиски решения.

При формировании электронного документа (ЭД) к реализации в XML файле я поля ТранГруз не нашел. Кроме того, не нашел этого поля даже в описании формата.

После обсуждения с клиентом пришли к мысли, что это поле может быть в счет-фактуре. Выгрузил счет-фактуру в XML, но и там не было этого поля.

Я уже начал думать, что это поле должно быть только в ТТН, но все-же погуглил и нашел, где «прячется» это поле:

А СвПер находится в СодФХЖ3 под тегом СВПродПер:

Ну а поле СодФХЖ3 в файле я видел, он находится в Документ:

Далее включаю замер производительности и нажимаю:

При этом формируется электронный документ.

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

И наши искомые теги не выгружаются для счет-фактуры:

Поэтому нужно их добавить. Добавляем процедуру СформироватьИнформациюПродавцаXML_2019 в расширение. Копируем процедуру целиком, т.к. вмешаться внутрь нельзя, там нет для этого вызовов. В самый конец, перед проверкой, добавляем вызов наших доработок:

    //Осипов — в конце, перед проверкой +++
       
Если ЭлектронноеВзаимодействиеСлужебный.ЗначениеРеквизитаВДереве(ДеревоДанных, «Функция») = СЧФ() Тогда
           
СвПродПер = ПолучитьОбъектТипаCML(«Файл.Документ.СвПродПер», ПространствоИменСхемы);
           
СвПер = ПолучитьОбъектТипаCML(«Файл.Документ.СвПродПер.СвПер», ПространствоИменСхемы);
           
ТранГруз = ПолучитьОбъектТипаCML(«Файл.Документ.СвПродПер.СвПер.ТранГруз», ПространствоИменСхемы);

            ТекНомер = ЭлектронноеВзаимодействиеСлужебный.ЗначениеРеквизитаВДереве(ДеревоДанных, «НомерДокумента»);
           
ТекДата = ЭлектронноеВзаимодействиеСлужебный.ЗначениеРеквизитаВДереве(ДеревоДанных, «ДатаДокумента»);
           
СодержаниеНомерДата = «ТН » + ТекНомер + » от » + Формат(ТекДата, «ДФ=dd.MM.yyyy»);

            //ОснПер — обязательное поле, приходится заполнять
           
ОснПер = ПолучитьОбъектТипаCML(«Файл.Документ.СвПродПер.СвПер.ОснПер», ПространствоИменСхемы);
           
ОснПер.НаимОсн = СодержаниеНомерДата;
           
СвПер.ОснПер.Добавить(ОснПер);

            ЗаполнитьСвойствоXDTO(Документ, «СвПродПер», СвПродПер, Истина, Ошибки);

            ЗаполнитьСвойствоXDTO(СвПродПер, «СвПер», СвПер, Истина, Ошибки);

            ЗаполнитьСвойствоXDTO(СвПер, «ТранГруз», ТранГруз, Истина, Ошибки);

            //СодОпер — обязательное поле, приходится заполнять
           
ЗаполнитьСвойствоXDTO(СвПер, «СодОпер», «Товары переданы», Истина, Ошибки);

            ЗаполнитьСвойствоXDTO(ТранГруз, «СвТранГруз», СодержаниеНомерДата, Истина, Ошибки);

        КонецЕсли;
       
//—

        Файл.Проверить();

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

Если не открывается форма электронного документа, идем в журнал регистрации и там смотрим причину ошибки:

Наблюдательный читатель заметит, что я разместил СвПер не в СодФХЖ3 а в Документ. Ну это уже пришло на практике, возможно ссылки вели на старый формат.

Также пришлось заполнять обязательные поля, чтобы прорваться через ошибку контроля полей XDTO.

Результат красивый:

Время: 5 часов. Можно было бы и быстрее, но сама постановка задачи была не понятная, да и находить участки в коде 1С проблематично.