XML в структуру

1. LomayaZakat 06.11.19 14:22 Сейчас в теме
Помогите пожалуйста преобразовать ответ сервера в структуру. Интересует именно значение SKU_CreateUpdateResult.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <SKU_CreateUpdateResponse xmlns="http://cowms.ru/service">
            <SKU_CreateUpdateResult>211895</SKU_CreateUpdateResult>
            <ErrorMessage />
        </SKU_CreateUpdateResponse>
    </soap:Body>
</soap:Envelope>
Показать
По теме из базы знаний
Найденные решения
2. LomayaZakat 06.11.19 15:21 Сейчас в теме
Пришел к этому. Чувствую, что можно проще.
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку());
Фабрика = Новый ФабрикаXDTO();
ОбъектXDTO =  Фабрика.ПрочитатьXML(ЧтениеXML);
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
3. user-z99999 67 06.11.19 15:24 Сейчас в теме
(1)
&НаСервереБезКонтекста
Функция ПрочитатьXMLВСтруктуру(Строка)
	
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(Строка);
	Результат = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("Структура"));
	ЧтениеXML.Закрыть();
	
	Возврат Результат;
				
КонецФункции
Показать
4. LomayaZakat 06.11.19 15:26 Сейчас в теме
(3)
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(Строка);
Результат = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("Структура"));
ЧтениеXML.Закрыть();


по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: {http://schemas.xmlsoap.org/soap/envelope/}Envelope Форма: Элемент Тип: {http://v8.1c.ru/8.1/data/core}Structure
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: {http://schemas.xmlsoap.org/soap/envelope/}Body Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
2. LomayaZakat 06.11.19 15:21 Сейчас в теме
Пришел к этому. Чувствую, что можно проще.
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку());
Фабрика = Новый ФабрикаXDTO();
ОбъектXDTO =  Фабрика.ПрочитатьXML(ЧтениеXML);
5. Sashares 34 06.11.19 16:02 Сейчас в теме
(2)Куда уж проще.
aripos; LomayaZakat; +2 Ответить
6. AlexandrSmith 68 06.11.19 17:25 Сейчас в теме
(2) В каком направлении чувствуете?
7. LomayaZakat 06.11.19 18:05 Сейчас в теме
(6)В плане того, что мб есть метод по которому можно задав SKU_CreateUpdateResult получить значение, не обращаясь напрямую
8. Pashekka 06.11.19 20:53 Сейчас в теме
Вариант получить значение по реквизиту
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку());
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
ДокументДОМ.ПолучитьЭлементыПоИмени("SKU_CreateUpdateResult")[0].ТекстовоеСодержимое
9. starik-2005 3033 06.11.19 21:14 Сейчас в теме
Чета странное какое-то задание преобразования "ответа сервера в структуру". Вот есть у Вас сервер, на нем есть веб-сервис - SOAP. Вот вы создаете к нему подключение (надеюсь, пользуетесь стандартным механизмом платформы для "дергания" сервиса). В итоге у Вас должен какой-то такой код быть:
  Ответ = Сервис.ФункцияСервиса(Параметры);

Вот в переменной "Ответ" и так "Структура" (т.е. объект XDTO), который Вы "подсветили" как правильный ответ. Или опять велосипеды изобретаем и дергаем веб-сервис с помощью подножных COM-объектов? )))
10. LomayaZakat 08.11.19 13:42 Сейчас в теме
12. starik-2005 3033 08.11.19 14:28 Сейчас в теме
(10) https://infostart.ru/public/721872/ - вот неплохое пошаговое руководство о том, как дергать веб-сервисы из 1С.
Обработка результата
В рецепте 1 мы чаще всего получаем готовый XDTO-объект и работаем с ним как со структурой. Во всех остальных случаях можно преобразовывать xml-ответ в XDTO

Если Результат.КодСостояния = 200 Тогда

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку());
ОбъектОтвет = СвояФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
Сообщить(ОбъектОтвет.Body.Response.RESPONSE_ID);
Сообщить(ОбъектОтвет.Body.Response.RESPONSE_TEXT);

КонецЕсли; 
Показать

Тут все просто.
13. LomayaZakat 08.11.19 14:30 Сейчас в теме
(12)Ну я так и делал, 3 способ мой.
14. starik-2005 3033 08.11.19 14:30 Сейчас в теме
(13) ну как бы смысл-то так делать, если все-равно нужен объект?
15. LomayaZakat 08.11.19 14:33 Сейчас в теме
(14)Так смысл в том, что мне надо дернуть данные из ответа с структурированном виде.
Например тут, как мне их вытащить. Тут уже Фабрика не работает:

Код
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <Income_GetFactResponse xmlns="http://cowms.ru/inbound">
            <Income_GetFactResult>2019-11-08T09:18:15.268238+03:00</Income_GetFactResult>
            <Income_Positions>
                <Income_Positions>
                    <IncomeRequest_PositionCode>02a94191-6804-4ef4-9360-cc3500068966-1</IncomeRequest_PositionCode>
                    <Sku_id>211895</Sku_id>
                    <Unit_id>784</Unit_id>
                    <StockType_id>0</StockType_id>
                    <Qty>20.000000</Qty>
                    <ClientOrder_PositionCode />
                    <Serial />
                    <Series />
                    <ExpDate>2999-12-31T00:00:00</ExpDate>
                </Income_Positions>
                <Income_Positions>
                    <IncomeRequest_PositionCode>02a94191-6804-4ef4-9360-cc3500068966-2</IncomeRequest_PositionCode>
                    <Sku_id>211917</Sku_id>
                    <Unit_id>784</Unit_id>
                    <StockType_id>0</StockType_id>
                    <Qty>3.000000</Qty>
                    <ClientOrder_PositionCode />
                    <Serial />
                    <Series />
                    <ExpDate>2999-12-31T00:00:00</ExpDate>
                </Income_Positions>
            </Income_Positions>
            <ErrorMessage />
        </Income_GetFactResponse>
    </soap:Body>
</soap:Envelope>
Показать полностью
11. LomayaZakat 08.11.19 14:09 Сейчас в теме
Такой ответ таким способом не обрабатывает. Есть идеи?
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<Income_GetFactResponse xmlns="http://cowms.ru/inbound">
<Income_GetFactResult>2019-11-08T09:18:15.268238+03:00</Income_GetFactResult>
<Income_Positions>
<Income_Positions>
<IncomeRequest_PositionCode>02a94191-6804-4ef4-9360-cc3500068966-1</IncomeRequest_PositionCode>
<Sku_id>211895</Sku_id>
<Unit_id>784</Unit_id>
<StockType_id>0</StockType_id>
<Qty>20.000000</Qty>
<ClientOrder_PositionCode />
<Serial />
<Series />
<ExpDate>2999-12-31T00:00:00</ExpDate>
</Income_Positions>
<Income_Positions>
<IncomeRequest_PositionCode>02a94191-6804-4ef4-9360-cc3500068966-2</IncomeRequest_PositionCode>
<Sku_id>211917</Sku_id>
<Unit_id>784</Unit_id>
<StockType_id>0</StockType_id>
<Qty>3.000000</Qty>
<ClientOrder_PositionCode />
<Serial />
<Series />
<ExpDate>2999-12-31T00:00:00</ExpDate>
</Income_Positions>
</Income_Positions>
<ErrorMessage />
</Income_GetFactResponse>
</soap:Body>
</soap:Envelope>
16. LomayaZakat 08.11.19 16:36 Сейчас в теме
Был не прав. Всё так же:

ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.УстановитьСтроку(Данные);

ФактXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);

Для Каждого Строка из ФактXDTO.Body.Income_GetFactResponse.Income_Positions.Income_Positions Цикл
КонецЦикла;
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)