Как добавить элемент в ОбъектXDTO #697184


#0 by ВаликТР
<yml_catalog xmlns="; xmlns:xsi="; xsi:type="anyType" date="2006-11-30 16:46"> Кодом читаю Объект = ФабрикаXDTO.(Чтение...) - читается нормально. Как добавить элементы currency перебирая справочник Валют. Если можно привести код - буду признателен.
#1 by zladenuw
типа так.
#2 by Armando
Мне кажется тут наоборот, надо в эту XML засунуть данные из спр. валют.
#3 by zladenuw
тогда ему букву Я справа. и все прекрасно найти можно :)
#4 by ВаликТР
Все верно. Нужно в Список <currencies> добавить все записи из справочника через XDTO Не поверите, куча примеров работает, а мой конкретный - нет. 99% примеров с XDTO используют схему XML. А у меня ее нет. Есть уже готовый XML, который я читаю через ФабрикаXDTO.ПрочитатьXML(...) Может кто может набросать как создать/добавить этот элемент списка?
#5 by Armando
Надо на основе XML создать схему. На основе схемы создать фабрику. Тогда будет работать. Вроде так.
#6 by Serginio1
Табличная часть не заполняется через ЗаполнитьЗначенияСвойств(Об, Клиент); Нужно построчно записывать Вообще читай сразу через СерриализаторXDTO или приводи объект Объект=СериализаторXDTO.ПрочитатьXDTO(Клиент );
#7 by Serginio1
Создай схему и записывай и читай по ней. Либо считывай в таблицу значений и работай с ней
#9 by Maxus43
чего сёдня за день? каждый час тема про фабрики XDTO... обострение?
#10 by zladenuw
пошли умные начальники. сказали юзать XDTO, молодые падаваны учят :)
#11 by ВаликТР
СериализаторXDTO Выдает ошибку преобразования данных
#12 by Serginio1
Конечно выдаст yml_catalog. Ну так выбирай Для каждого Элем из Объект.currencies Цикл Проблемы могут возникнуть когда будет один элемент  currencies так как он будет считаться как единичный смотри
#13 by ВаликТР
Спасибо за РЕАЛЬНЫЙ код, а не слова. Задача - добавить в <currencies> те самые <currency> с заполненными из справочника реквизитами. Что это за искомые буквосочетания (???) и (!!!) ?
#14 by Serginio1
Можно Добавлять так СтрокаXDTO=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(";, "decimal"), Выборка.Курс);     Объект.Добавить(ФормаXML.Элемент, ";, "rate",СтрокаXDTO);
#15 by Serginio1
Можно создавать любой объект из anyType Объект = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(";, "anyType"));        ЗначениеАтрибута=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(";, "string"), "Значение атрибута");     Объект.Добавить(ФормаXML.Атрибут, ";, "atr",ЗначениеАтрибута);     СтрокаXDTO=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(";, "decimal"), 3.14); Объект.Добавить(ФормаXML.Атрибут, ";, "atr2",ЗначениеАтрибута);          (ФормаXML.Атрибут,";,ЗначениеАтрибута);     Объект.Добавить(ФормаXML.Элемент, ";, "elem",ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(";, "string"), "Значение Элемента"));     СтрокаXDTO=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(";, "decimal"), 3.14);     Объект.Добавить(ФормаXML.Элемент, ";, "elem",СтрокаXDTO); (";, "string"), "Значение элемента"));
#16 by Serginio1
А лучше посмотреть в отладчике. Или схему. Обчно это делается так Тип=ФабрикаXDTO.Тип(Пространствоимен, ИмяТипа)); ИмяТипа в твоем случае currency
#17 by Serginio1
смотри ссылки
#18 by ВаликТР
Большое спасибо. Под вашим чутким руководством сдвинулся с мертвой точки. Записал вот так:    Объект.Добавить(ФормаXML.Элемент, ";, "currency", СтрокаXDTO);    КонецЦикла; в результате мне добавило вот так... <yml_catalog xmlns="; xmlns:xsi="; date="2006-11-30 16:46"> <shop xmlns="" xmlns:xs="; а как же его засунуть в <currencies> да еще и в виде атрибутов?
#19 by Serginio1
Объект.Добавить(ФормаXML.Атрибут, ";;, "currency", СтрокаXDTO); Сделай пакет и создай типы и по нему записывай.
#20 by ВаликТР
СтрокаXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("; target="_blank" rel="nofollow" class="extralink">;;, "string"), ???);    Объект.Добавить(ФормаXML.Элемент, ";;, "currency", СтрокаXDTO); какое значение вместо ???. Если "", не сделает ли он мне
#21 by Serginio1
Сделай пакет по ссылкам из и Вчастности и используй их.
#22 by Serginio1
Или ЗначениеАтрибута=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(";, "string"), "840"); currency=Объект.currencies[n]; currency.Добавить(ФормаXML.Элемент, ";, "id",ЗначениеАтрибута); Посмотри в отладчике
#23 by Serginio1
Вернее Объект.currencies.currency[н]
#24 by Serginio1
В общем схема такая об = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(";, "anyType")); ЗначениеАтрибута=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(";, "string"), "840"); об.Добавить(ФормаXML.Атрибут, ";, "id",ЗначениеАтрибута); Объект.currencies.Добавить(ФормаXML.Элемент, ";, "currency",об);
#25 by medved_kot
ufd
#26 by ВаликТР
ФАНТАСТИКА. Все гениальное - просто. Если есть голова у человека. Поборол с вашей помощью. Полгода в поисках ... :-) Спасибо большое. Осталась самая малость выводится файл <?xml version="1.0" encoding="UTF-8"?> <yml_catalog xmlns="; xmlns:d1p1="; xmlns:xsi="; d1p1:date="">             <d4p1:currency xmlns:d4p1="; d4p1:id="RUB" d4p1:rate="1" d4p1:plus=""/>             <d4p1:currency xmlns:d4p1="; d4p1:id="USD" d4p1:rate="31.0685" d4p1:plus=""/>             <d4p1:currency xmlns:d4p1="; d4p1:id="EUR" d4p1:rate="37.8476" d4p1:plus=""/> Как избавиться от этих "xmlns", "d4p1", чтоб остались чистые атрибуты? Есть надежда?
#27 by Лодырь
Строго типизировать свойства.
#28 by Serginio1
А зачем? XML будет прекрасно читаться и с этими атрибутами. Попробуй записывать без пространства имен Кроме того можно управлять префиксами через ЗаписьXML.ЗаписатьНачалоЭлемента(XMLСтрока("Данные"));     ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("", ";);     ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", ";);     ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xs", ";);
#29 by Serginio1
А вообще можешь напрямую писать в ЗаписьXML Запись.ЗаписатьНачалоЭлемента("apple"); Запись.ЗаписатьСоответствиеПространстваИмен("nsp", ";); Запись.ЗаписатьАтрибут("weight", ";, "12.5");
#30 by ВаликТР
Вы опять правы. Все лишнее убралось. Подскажите, в файле ... ... как получить значение "Дисплеи"? Это Свойство ОбъектаXDTO или что? У меня в свойствах "category" не появляется свойство с ФормаXML.Текст? В каком Объекте отладчика можно увидеть Форма:ФормаXML.Текст.
#31 by Serginio1
Потому, что записывали его без использования фабрики. Это нарушение типов.
#32 by ВаликТР
А если xml с "Дисплеем" прочитать фабрикой, тогда это свойство будет доступно? И где, каким кодом его можно узнать?
#33 by Serginio1
#34 by ВаликТР
Вы привели пример, как читать XML построчно. Но я имел в виду, если XML следующего содержания то, напимер id="00000001" получаем так Объект.shop.categories.category[0].id А как у Объекта получить "Дисплеи"?
#35 by Serginio1
Да никакак. С такой записью ты должен обращаться как Объект.shop.categories.category[0], но он считает что это комплексный тип и не возвращает Дисплеи.
#36 by Serginio1
Вон тут народ до тебя уже извращался
#37 by ВаликТР
Если можете, подскажите, как добавить в Объект.categories.category сначала Текст потом Атрибут?
#38 by Эмбеддер
так не пойдет <1C> ...
#39 by Эмбеддер
? т.е. пройти по исходному файлу и создать новый
#40 by Serginio1
Например
#41 by sapphire
XPath
#42 by Serginio1
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С