Имя: Пароль:
1C
1С v8
ОбъектXDTO, тип anyType, Текст
0 AlexSTAL
 
11.03.19
12:00
В прошлом году создавал тему, ответа не получил... нашёл обходной путь в конкретной задаче, забросил поиск решения.
Производитель обновил свой продукт, потребовалось всё же найти решение...

Один из аргументов вызываемого WS-сервисом метода имеет тип "anyType", хотя по факту должно быть число.
Разработчики прислали образец параметров XML-запроса:
<arg1 xsi:nil="true"/>
<arg2 xsi:type="xsd:int">0</arg2>

из него видно, что для arg2 добавляется атрибут "xsi:type" со значением "xsd:int", а само значение записывается в #text

В 1С создаю атрибут:

Объект1 = СервТехЭксперт.ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema";, "anyType"));
ЗначениеАтрибута = СервТехЭксперт.ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema";, "string"), "xsd:integer");
Объект1.Добавить(ФормаXML.Атрибут, "http://www.w3.org/2001/XMLSchema";, "xsi:type", ЗначениеАтрибута);

и пытаюсь добавить в Последовательность #Текст:

ТекПоследовательность = Объект1.Последовательность();
ТекПоследовательность.Добавить("777720109");

Выдаёт ошибку "Недостаточно фактических параметров", хотя в справке сказано:

ПоследовательностьXDTO (XDTOSequence)
Добавить (Add)
Вариант синтаксиса: Добавить текст
Синтаксис:
Добавить(<Текст>)
Параметры:
<Текст> (обязательный)
Тип: Строка.
Текст, добавляемый в последовательность.

На ИТС прочитал, что Появление элементов последовательности, представляющих фрагменты текста, допустимо только для объектов типов, у которых значение свойства Смешанный равно Истина. Посмотрел - Истина

Пошёл другим путём. Перед добавлением текста к последовательности записал в XML-файл ОбъектXDTO, добавил туда #text, загрузил обратно из XML-файла - работает! Бинго!
Но как добавить текст без такого извращения с записью/модификацией/чтением XML-файла?
1 Cyberhawk
 
11.03.19
12:02
Привыкай к извращениям
2 AlexSTAL
 
11.03.19
12:04
(1) Ну если это работает через загрузку, то и напрямую должно же!

На одном из форумов нашёл, что Последовательность() появляется только после ЗаписиXML (без конкретики)...
Испробовал множество вариантов, не взлетает
3 Cyberhawk
 
11.03.19
12:23
(2) Не должно. Вот тебе, например, пример, когда информация теряется при таких манипуляциях "туда-сюда" в объектной модели 1С: XSD: Аннотация, документация [дубль 2]
4 Fragster
 
гуру
11.03.19
12:38
проще всего сделать свой wsdl
5 Fragster
 
гуру
11.03.19
12:39
и вместо any type пихнуть туда int и nullable
6 AlexSTAL
 
11.03.19
13:15
(4) Может быть, но это то же как-то не правильно... Да и как туда добавить атрибут "xsi:type" со значением "xsd:int" не понимаю, потому что при выполнении запроса с просто числом происходит ошибка сервиса
7 AlexSTAL
 
11.03.19
13:17
В общем до выяснения сделал вот так вот:

Поток = Новый ПотокВПамяти();
Запись = Новый ЗаписьXML;
Запись.ОткрытьПоток(Поток);
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("anyType");
Запись.ЗаписатьАтрибут("xmlns", "http://www.w3.org/2001/XMLSchema";);
Запись.ЗаписатьАтрибут("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance";);
Запись.ЗаписатьТекст("777720109");
Запись.ЗаписатьКонецЭлемента();
Запись.Закрыть();
Поток.Перейти(0, ПозицияВПотоке.Начало);
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьПоток(Поток);
Объект1 = ФабрикаXDTO.ПрочитатьXML(Чтение);
Чтение.Закрыть();
Поток.Закрыть();
ЗначениеАтрибута = СервWS.ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema";, "string"), "xsd:integer");
Объект1.Добавить(ФормаXML.Атрибут, "http://www.w3.org/2001/XMLSchema";, "xsi:type", ЗначениеАтрибута);
8 AlexSTAL
 
22.03.19
12:06
Если кому интересно, то это ошибка платформы, исправлена в 8.3.14
В ранних платформах можно обойти:

ТекПоследовательность.Добавить("777720109", Неопределено);