|   |   | 
| 
 | Объект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", Неопределено); | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |