|
Формирование XML из XDTO | ☑ | ||
---|---|---|---|---|
0
DanJer74
08.01.16
✎
12:57
|
Приветствую!
Не могу сообразить, как добавить в XDTO вложенный тег. В схеме есть root - это главный узел, куда я все собираю. Есть еще item внутри - это номенклатура. Как бы в выходной xml файл загнать что-то типа вот такого: <items> <item> Номенклатура 1 </item> <item> Номенклатура 2 </item> <item> Номенклатура 3 </item> </items> Все остальное заполняется нормально - застрял только тут. |
|||
1
DES
08.01.16
✎
13:14
|
покажи как делаешь остальное
|
|||
2
DanJer74
08.01.16
✎
13:25
|
Это схема
<xs:schema xmlns:tns="documents.upload" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="documents.upload" attributeFormDefault="unqualified" elementFormDefault="qualified"> <xs:element name="items"> <xs:complexType> <xs:sequence> <xs:element name="item" type="tns:items" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="contractor"> <xs:sequence> <xs:element name="userId" type="xs:string"/> <xs:element name="name" type="xs:string"/> <xs:element name="address" type="xs:string"/> <xs:element name="inn" type="xs:string"/> <xs:element name="kpp" type="xs:string"/> </xs:sequence> </xs:complexType> <xs:complexType name="doc"> <xs:sequence> <xs:element name="type" type="xs:byte"/> <xs:element name="operation" type="xs:byte"/> <xs:element name="document" type="xs:string"/> <xs:element name="date" type="xs:dateTime"/> <xs:element name="number" type="xs:string"/> <xs:element name="contract" type="xs:string"/> <xs:element name="sum" type="xs:float"/> <xs:element name="barcode" type="xs:string"/> </xs:sequence> </xs:complexType> <xs:complexType name="items"> <xs:sequence> <xs:element name="itemId" type="xs:string"/> <xs:element name="orderItemId" type="xs:string"/> <xs:element name="brand" type="xs:string"/> <xs:element name="number" type="xs:string"/> <xs:element name="title" type="xs:string"/> <xs:element name="measureCode" type="xs:string"/> <xs:element name="measure" type="xs:string"/> <xs:element name="excise" type="xs:string"/> <xs:element name="count" type="xs:int"/> <xs:element name="price" type="xs:float"/> <xs:element name="sum" type="xs:float"/> <xs:element name="percent" type="xs:string"/> <xs:element name="sumNDS" type="xs:float"/> <xs:element name="sumTotal" type="xs:float"/> <xs:element name="countryId" type="xs:int"/> <xs:element name="country" type="xs:string"/> <xs:element name="gtd" type="xs:string"/> </xs:sequence> </xs:complexType> <xs:complexType name="org"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="address" type="xs:string"/> <xs:element name="inn" type="xs:string"/> <xs:element name="kpp" type="xs:string"/> <xs:element name="ogrn" type="xs:string"/> <xs:element name="okpo" type="xs:string"/> <xs:element name="rs" type="xs:string"/> <xs:element name="ks" type="xs:string"/> <xs:element name="bank" type="xs:string"/> <xs:element name="bik" type="xs:string"/> <xs:element name="director" type="xs:string"/> <xs:element name="accountant" type="xs:string"/> </xs:sequence> </xs:complexType> <xs:complexType name="root"> <xs:sequence> <xs:element name="UniqueID" type="xs:string"/> <xs:element name="isDel" type="xs:byte"/> <xs:element name="doc" type="tns:doc" maxOccurs="unbounded"/> <xs:element name="org" type="tns:org" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="contractor" type="tns:contractor" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="item" type="tns:items" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:schema> |
|||
3
DanJer74
08.01.16
✎
13:27
|
Это обработка. ПТИУ - поле ввода с типом Документ.ПоступлениетоваровУслуг. Делал для УТ 10
НашПакет = ФабрикаXDTO.Пакеты.Получить("documents.upload"); НашДокумент = ФабрикаXDTO.Тип("documents.upload","root"); ТипOrg = ФабрикаXDTO.Тип("documents.upload","org"); Типdoc = ФабрикаXDTO.Тип("documents.upload","doc"); Типcontractor = ФабрикаXDTO.Тип("documents.upload","contractor"); //Типitem = ФабрикаXDTO.Тип("documents.upload","items"); Типitem = НашПакет.КорневыеСвойства[0].Тип.Свойства[0].Тип; КореньОрг = ФабрикаXDTO.Создать(ТипOrg); КореньКонтрактор = ФабрикаXDTO.Создать(Типcontractor); Кореньdoc = ФабрикаXDTO.Создать(Типdoc); КореньНашДокумент = ФабрикаXDTO.Создать(НашДокумент); ДокументЗагрузки = ПТИУ.Ссылка; ОбъектДок = ДокументЗагрузки.ПолучитьОбъект(); КореньНашДокумент.UniqueID = Строка(ДокументЗагрузки.УникальныйИдентификатор()); КореньНашДокумент.isdel = 0; Кореньdoc.contract = Строка(ДокументЗагрузки.ДоговорКонтрагента.Ссылка); Кореньdoc.date = ДокументЗагрузки.Дата; Кореньdoc.number = ДокументЗагрузки.Номер; Кореньdoc.document = Строка(ДокументЗагрузки.Ссылка); Кореньdoc.sum = ДокументЗагрузки.СуммаДокумента; Кореньdoc.type = 1; ЗапросШтрихКод = Новый Запрос; ЗапросШтрихКод.Текст = "ВЫБРАТЬ | ШтрихКодыДокументовТоваровИУслуг.ШтрихКод КАК ШтрихКод |ИЗ | РегистрСведений.ШтрихКодыДокументовТоваровИУслуг КАК ШтрихКодыДокументовТоваровИУслуг |ГДЕ | ШтрихКодыДокументовТоваровИУслуг.ДокументТоваровУслуг = &ДокументТоваровУслуг"; ЗапросШтрихКод.УстановитьПараметр("ДокументТоваровУслуг", ПТИУ.Ссылка); РезультатШтрихКод = ЗапросШтрихКод.Выполнить(); Если НЕ РезультатШтрихКод.Пустой() Тогда ВыборкаДетальныеЗаписиШтрихкод = РезультатШтрихКод.Выбрать(); ВыборкаДетальныеЗаписиШтрихкод.Следующий(); Кореньdoc.barcode = ВыборкаДетальныеЗаписиШтрихкод.ШтрихКод; Иначе Кореньdoc.barcode = ""; КонецЕсли; КореньНашДокумент.doc.Добавить(Кореньdoc); ///Организация КореньОрг.name =Строка(ПТИУ.Организация); ЗапросАдрес = Новый Запрос; ЗапросАдрес.Текст = "ВЫБРАТЬ | КонтактнаяИнформация.Представление КАК Адрес |ИЗ | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ | КонтактнаяИнформация.Тип = &Тип | И КонтактнаяИнформация.Вид = &Вид | И КонтактнаяИнформация.Объект = &Объект"; ЗапросАдрес.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.ЮрАдресОрганизации); ЗапросАдрес.УстановитьПараметр("Объект", ПТИУ.Организация); ЗапросАдрес.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес); РезультатЗапросаАдрес = ЗапросАдрес.Выполнить(); ВыборкаДетальныеЗаписиАдрес = РезультатЗапросаАдрес.Выбрать(); ВыборкаДетальныеЗаписиАдрес.Следующий(); КореньОрг.address = (СокрЛП(Строка(ВыборкаДетальныеЗаписиАдрес.Адрес))); КореньОрг.inn = (Строка(ПТИУ.Организация.ИНН)); КореньОрг.kpp= Строка(ПТИУ.Организация.КПП); КореньОрг.ogrn = Строка(ПТИУ.Организация.ОГРН); КореньОрг.okpo = Строка(ПТИУ.Организация.КодПоОКПО); КореньОрг.rs = (Строка(ПТИУ.Организация.ОсновнойБанковскийСчет.НомерСчета)); КореньОрг.ks = Строка(ПТИУ.Организация.ОсновнойБанковскийСчет.Банк.КоррСчет); КореньОрг.bank = Строка(ПТИУ.Организация.ОсновнойБанковскийСчет.Банк.Наименование); КореньОрг.bik = (Строка(ПТИУ.Организация.ОсновнойБанковскийСчет.Банк.Код)); ЗапросОтветственные = Новый Запрос; ЗапросОтветственные.Текст = "ВЫБРАТЬ | ОтветственныеЛицаОрганизацииСрезПоследних.Период, | ОтветственныеЛицаОрганизацииСрезПоследних.СтруктурнаяЕдиница, | ОтветственныеЛицаОрганизацииСрезПоследних.ОтветственноеЛицо, | ОтветственныеЛицаОрганизацииСрезПоследних.ФизическоеЛицо, | ОтветственныеЛицаОрганизацииСрезПоследних.Должность |ИЗ | РегистрСведений.ОтветственныеЛицаОрганизации.СрезПоследних(&Период, СтруктурнаяЕдиница = &Организация) КАК ОтветственныеЛицаОрганизацииСрезПоследних"; ЗапросОтветственные.УстановитьПараметр("Организация", ПТИУ.Организация); ЗапросОтветственные.УстановитьПараметр("Период", КонецДня(ТекущаяДата())); РезультатОтв = ЗапросОтветственные.Выполнить().Выгрузить(); Для Каждого Строка Из РезультатОтв цикл Если Строка.ОтветственноеЛицо = Перечисления.ОтветственныеЛицаОрганизации.Руководитель Тогда Директор = Строка.ФизическоеЛицо.Наименование; КонецЕсли; Если Строка.ОтветственноеЛицо = Перечисления.ОтветственныеЛицаОрганизации.ГлавныйБухгалтер Тогда ГлавныйБухгалтер = Строка.ФизическоеЛицо.Наименование; КонецЕсли; КонецЦикла; КореньОрг.director = (ОбщегоНазначения.ФамилияИнициалыФизЛица(Директор)); КореньОрг.accountant = (ОбщегоНазначения.ФамилияИнициалыФизЛица(ГлавныйБухгалтер)); КореньНашДокумент.org.Добавить(КореньОрг); ///Организация //Контрактор КореньКонтрактор.userId = (Строка(ПТИУ.Контрагент.КлиентId_ССайта)); КореньКонтрактор.name = (Строка(ПТИУ.Контрагент.Наименование)); ЗапросПоКонтрагенту = Новый Запрос; ЗапросПоКонтрагенту.Текст = "ВЫБРАТЬ | КонтактнаяИнформация.Представление КАК Адрес |ИЗ | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ | КонтактнаяИнформация.Тип = &Тип | И КонтактнаяИнформация.Вид = &Вид | И КонтактнаяИнформация.Объект = &Объект"; ЗапросПоКонтрагенту.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента); ЗапросПоКонтрагенту.УстановитьПараметр("Объект", ПТИУ.Контрагент); ЗапросПоКонтрагенту.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес); РезультатПоКонтрагенту = ЗапросПоКонтрагенту.Выполнить(); ВыборкаДетальныеЗаписиПоконтрагенту = РезультатПоКонтрагенту.Выбрать(); Если Не РезультатПоКонтрагенту.Пустой() Тогда ВыборкаДетальныеЗаписиПоконтрагенту.Следующий(); Адресок = (Строка(ВыборкаДетальныеЗаписиПоконтрагенту.Адрес)); Иначе Адресок = ""; КонецЕсли; КореньКонтрактор.address = Адресок; КореньКонтрактор.inn =(ПТИУ.Контрагент.ИНН); КореньКонтрактор.kpp = ПТИУ.Контрагент.КПП; КореньНашДокумент.contractor.Добавить(КореньКонтрактор); //Контрактор Для Каждого Строчка Из ДокументЗагрузки.Товары Цикл КореньИтем = ФабрикаXDTO.Создать(Типitem); КореньИтем.brand = Строчка.Номенклатура.ФирмаИзготовитель.Наименование; КореньИтем.number =Строчка.Номенклатура.Артикул; КореньИтем.excise = "Без акциза"; КореньИтем.title =СокрЛП(Строчка.номенклатура.Наименование); КореньИтем.measure = Формат(Строчка.ЕдиницаИзмерения.ЕдиницаПоКлассификатору); КореньИтем.count = Число(Строка(Строчка.Количество)); КореньИтем.price = Число(Формат(Строчка.Цена, "ЧГ=0")); КореньИтем.sum = Число(Формат(Строчка.Сумма, "ЧГ=0")); КореньИтем.percent = Формат(Строчка.СтавкаНДС); КореньИтем.sumNDS = Число(Формат(Строчка.СуммаНДС, "ЧГ=0")); КореньИтем.sumTotal = Число(Формат(Строчка.Сумма, "ЧГ=0")); КореньНашДокумент.item.Добавить(КореньИтем); КонецЦикла; Запись = Новый ЗаписьXML; Запись.ОткрытьФайл("s:\test.xml"); ФабрикаXDTO.ЗаписатьXML(Запись,КореньНашДокумент,,,,); Запись.Закрыть(); |
|||
4
DanJer74
08.01.16
✎
13:28
|
Всю голову сломал. И еще - как со свойствами работать? Из документации стандартной не понял ровно нифига.....
|
|||
5
DES
08.01.16
✎
13:38
|
.Добавить()
.Удалить() смотрел ? |
|||
6
DanJer74
08.01.16
✎
13:49
|
Не понял....
|
|||
7
DanJer74
08.01.16
✎
14:05
|
Как мне схему создать и как потом выводить данные - не понимаю :(
|
|||
8
DES
08.01.16
✎
14:46
|
можно так:
Запись = Новый ЗаписьXML(); Запись.УстановитьСтроку(); Запись.ЗаписатьНачалоЭлемента("items"); Для Каждого твоего ИЗ набора Цикл Запись.ЗаписатьНачалоЭлемента("item"); Запись.ЗаписатьТекст(твоего."тут твой текст значения"); Запись.ЗаписатьКонецЭлемента(); КонецЦикла; Запись.ЗаписатьКонецЭлемента(); СтрXML = Запись.Закрыть(); |
|||
9
DanJer74
09.01.16
✎
11:55
|
Это я знаю - от этого мы хотим уйти
|
|||
10
DanJer74
09.01.16
✎
11:56
|
Мне надо с веб-сервисами работу наладить
|
|||
11
Serginio1
09.01.16
✎
12:16
|
Что типа такого
Фабрика = СоздатьФабрикуXDTO("ПутьКФайлу.xsd"); // Создаем ОбъектXDTO используя Фабрика ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); ЗаписьXML.ЗаписатьОбъявлениеXML(); Фабрика.ЗаписатьXML(ЗаписьXML, ОбъектXDTO); СтрокаXML = ЗаписьXML.Закрыть(); ////////////////////////// в объек |
|||
12
Serginio1
09.01.16
✎
12:22
|
У объектаXdto есть метод
Добавить(<Форма>, <URIПространстваИмен>, <ЛокальноеИмя>, <ЭлементДанных>) v8: Как добавить элемент в ОбъектXDTO |
|||
13
DanJer74
09.01.16
✎
15:48
|
Все, я разобрался :)
|
|||
14
4St
09.01.16
✎
17:04
|
(13) Добрый день! Похоже, мы занимаемся в чем-то пересекающимися задачами. http://catalog.mista.ru/public/439926/
Исходники описанного сервиса лежат тут: https://github.com/volodkindv/CloudCat1C/tree/demo Есть желание поучаствовать? (в части обмена документами, например) |
|||
15
DanJer74
09.01.16
✎
19:14
|
Можно попробовать
|
|||
16
DanJer74
12.01.16
✎
12:07
|
И все-таки остался вопрос. Как заполнять значения свойств и выводить их в xml.
|
|||
17
Serginio1
12.01.16
✎
14:16
|
Список=Фабрика.Создать(Фабрика.Создать(ФабрикаXDTO.Тип("documents.upload", "root"));
ТипЭлемента=ФабрикаXDTO.Тип("documents.upload", "items"); Элемент=Фабрика.Создать(ТипЭлемента); Элемент.itemId=траляля; root.item.Добавить(Элемент); Итак для всех doc,org contractor |
|||
18
Serginio1
12.01.16
✎
14:17
|
Фабрика это ФабрикаXDTO если схема загружена в конфигуратор
или создана из файла через СоздатьФабрикуXDTO("ПутьКФайлу.xsd"); |
|||
19
Serginio1
12.01.16
✎
15:41
|
||||
20
DanJer74
13.01.16
✎
07:52
|
Спасибо, я уже это реализовал, только вот как работать со свойствами? Как их добавлять в xml тегами? Интересуюсь в связи с тем, что есть xml файлик, из которого делаю схему, а там свойства - так вот как их выводить, чтобы не переделывать ничего?
|
|||
21
Serginio1
13.01.16
✎
08:36
|
Есть куча онлайн генераторов XSD по XML. Только все свой ства будут строковые. Это несложно назначить их типю
https://www.google.ru/webhp#newwindow=1&q=xml+to+xsd |
|||
22
Serginio1
13.01.16
✎
08:40
|
Кроме того в 12 я тебе дал ссылку как можно добавить свойства без схемы.
|
|||
23
DanJer74
20.01.16
✎
12:47
|
В продолжении темы - мне нужно перекинуть из одной базы в другую Реализацию товаров услуг. Я ее формирую, все норм - формирование через вот это
РТИУТИп = ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config","DocumentObject.РеализацияТоваровУслуг"); Создаю все, заполняю, все норм. Когда пытаюсь записать XML, все формируется, но хотелось бы вместо уникальных идентификаторов получать наименования. Возможно такое или нужно руками собирать весь ХМЛ? |
|||
24
Serginio1
20.01.16
✎
12:50
|
Создавай свой пакет. Только по уму тебе нужно передавать еще и значения всех ссылочных типов присутствующих в накладной.
|
|||
25
DanJer74
20.01.16
✎
12:53
|
То есть значит типовым не прокатит
|
|||
26
DanJer74
20.01.16
✎
12:55
|
Как раз это и не очень хотелось делать, но заготовка есть. Хотелось бы побольше типовыми средствами обойтись :(
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |