Добрый день, создала внешнюю обработку чтобы выгрузить документ в xml, хочу задать структуру выгрузки, то есть какие реквизиты выгружать, а какие нет
//ЗаписатьXML(ЗаписьXML,Выборка.ПолучитьОбъект(), НазначениеТипаXML.Явное)- эта строка работала, весь документ выгружала, но построчно выгрузить не получается
Выборка не работает, появляется ошибка "Несоответствие параметров 2"
Да и таб часть так не получить
//ЗаписатьXML(ЗаписьXML,Выборка.ПолучитьОбъект(), НазначениеТипаXML.Явное)- эта строка работала, весь документ выгружала, но построчно выгрузить не получается
&НаСервере
Процедура ЗаписатьДанные()
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("D:\126.xml");
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("Документы");
ЗаписьXML.ЗаписатьНачалоЭлемента("Документ");
Выборка=Документы.ПриходнаяНакладная.Выбрать().ПолучитьОбъект();
Пока Выборка.Следующий() Цикл
ЗаписьXML.ЗаписатьАтрибут("Номер",Выборка.Номер);
ЗаписьXML.ЗаписатьАтрибут("Дата",Выборка.Дата);
ЗаписьXML.ЗаписатьАтрибут("СуммаДокумента",Выборка.СуммаПоДокументу);
//ЗаписатьXML(ЗаписьXML,Выборка.ПолучитьОбъект(), НазначениеТипаXML.Явное)
КонецЦикла;
ЗаписьXML.ЗаписатьНачалоЭлемента("СписокНоменклатуры");
Выборка=Документы.ПриходнаяНакладная.Выбрать();
Пока Выборка.Следующий() Цикл
ЗаписьXML.ЗаписатьАтрибут("НоменклатураКод",Выборка.СписокНоменклатуры.Код);
ЗаписьXML.ЗаписатьАтрибут("НоменклатураНаим",Выборка.СписокНоменклатуры.Номенклатура);
ЗаписьXML.ЗаписатьАтрибут("Количество",Выборка.СписокНоменклатуры.Количество);
ЗаписьXML.ЗаписатьАтрибут("Цена",Выборка.СписокНоменклатуры.Цена);
ЗаписьXML.ЗаписатьАтрибут("Сумма",Выборка.СписокНоменклатуры.Сумма);
//ЗаписатьXML(ЗаписьXML,Выборка.ПолучитьОбъект(), НазначениеТипаXML.Явное);
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента(); //СписокНоменклатуры
ЗаписьXML.ЗаписатьКонецЭлемента(); //Документ
ЗаписьXML.ЗаписатьКонецЭлемента(); //Документы
ЗаписьXML.Закрыть();
КонецПроцедуры
ПоказатьВыборка не работает, появляется ошибка "Несоответствие параметров 2"
Да и таб часть так не получить
По теме из базы знаний
- Групповая выгрузка налоговых документов в XML (M.E.Doc). Управление торговлей для Украины ред. 3.1
- Запись/Чтение XML, пример обмена по COM соединению
- Загрузка документов поступления из XML формата 820 (Контур.Диадок) в 1С:УТ10/11, БП 3.0, КА2.5, УПП1.3 и обработка выгрузки УПД в Контур Диадок и СБИС для 1С:Бухгалтерии 3.0
- Выгрузка документа в XML-файл из формы списка документа по правилам конвертации данных 2.1, 3.0 для конфигурации Управление торговлей 11.4
- Выгрузка документов обработкой XML с отбором по реквизиту. Частичная выгрузка документов обработкой XML
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Ну во первых что бы обратиться к документу не нужно использовать Выборка=Документы.ПриходнаяНакладная.Выбрать().ПолучитьОбъект();
Достаточно просто выбрать и перебирать ссылки.
Вот так.
Второе было бы удобней весь этот код перенести в запрос с наложением условий, не знаю конечную цель задачи но думаю не проведенные документы, а так же документы помеченные на удаления не нужны.
Так же когда перебираете циклом "СписокНоменклатуры" нужно делать немного по другому.
Достаточно просто выбрать и перебирать ссылки.
Выборка=Документы.ПриходнаяНакладная.Выбрать();
Пока Выборка.Следующий() Цикл
ЗаписьXML.ЗаписатьАтрибут("Номер",Выборка.Номер);
ЗаписьXML.ЗаписатьАтрибут("Дата",Выборка.Дата);
ЗаписьXML.ЗаписатьАтрибут("СуммаДокумента",Выборка.СуммаПоДокументу);
//ЗаписатьXML(ЗаписьXML,Выборка.ПолучитьОбъект(), НазначениеТипаXML.Явное)
КонецЦикла;
Вот так.
Второе было бы удобней весь этот код перенести в запрос с наложением условий, не знаю конечную цель задачи но думаю не проведенные документы, а так же документы помеченные на удаления не нужны.
Так же когда перебираете циклом "СписокНоменклатуры" нужно делать немного по другому.
Выборка=Документы.ПриходнаяНакладная.Выбрать();
Пока Выборка.Следующий() Цикл
//Вот тут нужно обратиться к табличной части
Для каждого стр из Выборка.Товары цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("Номенклатура").
ЗаписьXML.ЗаписатьАтрибут("НоменклатураКод",стр.Номенклатура.Код);
ЗаписьXML.ЗаписатьАтрибут("НоменклатураНаим",стр.Номенклатура);
ЗаписьXML.ЗаписатьАтрибут("Количество",стр.Количество);
ЗаписьXML.ЗаписатьАтрибут("Цена",стр.Цена);
ЗаписьXML.ЗаписатьАтрибут("Сумма",стр.Сумма);
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;
КонецЦикла;
Показать
(3)Сделала вот так, если писать Документы.ПриходнаяНакладная.Выбрать() и пытаться записать в в атрибут, то все равно ошибка параметров
Выборка=Документы.ПриходнаяНакладная.Выбрать();
Пока Выборка.Следующий() Цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("Номер");
ЗаписьXML.ЗаписатьТекст(Строка(Выборка.Номер));
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента("Дата");
ЗаписьXML.ЗаписатьТекст(Строка(Выборка.Дата));
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента("СуммаДокумента");
ЗаписьXML.ЗаписатьТекст(Строка(Выборка.СуммаПоДокументу));
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;
ЗаписьXML.ЗаписатьНачалоЭлемента("СписокНоменклатуры");
Выборка= Документы.ПриходнаяНакладная.Выбрать();
Пока Выборка.Следующий() Цикл
Для каждого стр из Выборка.СписокНоменклатуры цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("Код");
ЗаписьXML.ЗаписатьТекст(Строка(стр.Номенклатура.Код));
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента("НоменклатураНаим");
ЗаписьXML.ЗаписатьТекст(Строка(стр.Номенклатура));
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента("Количество");
ЗаписьXML.ЗаписатьТекст(Строка(стр.Количество));
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента("Цена");
ЗаписьXML.ЗаписатьТекст(Строка(стр.Цена));
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента("Сумма");
ЗаписьXML.ЗаписатьТекст(Строка(стр.Сумма));
ЗаписьXML.ЗаписатьКонецЭлемента();
//ЗаписатьXML(ЗаписьXML,Выборка.ПолучитьОбъект(), НазначениеТипаXML.Явное);
КонецЦикла;
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента(); //СписокНоменклатуры
ЗаписьXML.ЗаписатьКонецЭлемента(); //Документ
Показать
Для каждого строки табличной части (номенклатуры) создайте ЭЛЕМЕНТ - ЗаписьXML.ЗаписатьНачалоЭлемента("ЭлементНоменклатуры"). А в этот элемент записывайте уже атрибуты той самой номенклатуры. А у Вас получается что в один элемент Вы пишите несколько одинаковых атрибутов.
здесь необходимо понимание что такое ЗаписатьНачалоЭлемента, ЗаписатьКонецЭлемента,ЗаписатьАтрибут, ЗаписатьXML и все у васполучится.
вот вам ниже пример рабочий.
вот вам ниже пример рабочий.
ПолноеИмяФайла = "\\HRANILSHE\store\UATKeyEx\KEY_HAND"+СтрЗАменить(Формат(ТекущаяДата(),"ДФ=""ггггММддЧЧммсс"""),".","")+ ".xml";
ФайлСчФ = Новый Файл(ПолноеИмяФайла);
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл( ПолноеИмяФайла, "UTF-8");
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента( "KEY" );
ЗаписатьXML(ЗаписьXML,Формат(ДатаДляОтправки,"ДФ=""yyyy-MM-dd"""),"Date");
//////////////////////////////////////////////////////////// ///////////////////
Если ТаблицаДляОтправки.Количество() > 0 Тогда
НомерСтроки = 0;
Для каждого стр из ТаблицаДляОтправки Цикл
Если ЗначениеЗаполнено(Стр.DRIVERCODE) Тогда
НомерСтроки = НомерСтроки +1;
ЗаписьXML.ЗаписатьНачалоЭлемента( "POSITION" );
ЗаписатьXML(ЗаписьXML, НомерСтроки ,"POSITIONNUMBER");
ЗаписатьXML(ЗаписьXML, Стр.AUTONUMBER ,"AUTONUMBER" );
ЗаписатьXML(ЗаписьXML,?(ЗначениеЗаполнено(Стр.DRIVERCODE),Стр.DRIVERCODE,"НЕОПРЕДЕЛЕНО"),"DRIVERCODE" );
ЗаписатьXML(ЗаписьXML, Стр.FIRSTNAME ,"FIRSTNAME" );
ЗаписатьXML(ЗаписьXML, Стр.MIDDLENAME ,"MIDDLENAME" );
ЗаписатьXML(ЗаписьXML, Стр.SURNAME ,"SURNAME" );
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЕсли;
КонецЦикла;
//
КонецЕсли;
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.Закрыть();
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот