|   |   | 
| 
 | Как добавить в ОбъектXDTO типа "ArrayOfString" новый элемент типа "string" | ☑ | ||
|---|---|---|---|---|
| 0
    
        desean 08.11.21✎ 17:12 | 
        Доброго дня!
 При написании процедур обмена со сторонней системой необходимо создать переменную типа ОбъектXDTO содержащую массив строк. Создать переменную типа ОбъектXDTO удалось, добавить в него "элемент массива" не получается. Я уверен, что на просторах этого форума/интернета эта проблема обсуждалась, но самостоятельно найти не смог, поэтому прошу помощи. Вероятно, ввиду прострации в данном вопросе, я кардинально неверно использую конструкцию "РезультирующийМассив.Добавить()". Кто знает, где собака порылась? Как добавить в ОбъектXDTO типа "ArrayOfString" новый элемент типа "string"? // Создаем подключение WSОпределения = WSСсылки[0].ПолучитьWSОпределения(); URIПространстваИмен = WSОпределения.Сервисы[0].URIПространстваИмен; ИмяСервиса = WSОпределения.Сервисы[0].Имя; ИмяПорта = WSОпределения.Сервисы[0].ТочкиПодключения[0].Имя; Местоположение = WSОпределения.Сервисы[0].ТочкиПодключения[0].Местоположение; WSПрокси = Новый WSПрокси( WSОпределения, URIПространстваИмен, ИмяСервиса, ИмяПорта, Новый ИнтернетПрокси, 20, Новый ЗащищенноеСоединениеOpenSSL, Местоположение, Истина ); //Создаем параметр, который будем передавать ТипВходногоПараметра = WSОпределения.Сервисы[0].ТочкиПодключения[0].Интерфейс.Операции[2].Параметры[0].Тип; ВходныеПараметры = WSПрокси.ФабрикаXDTO.Создать(ТипВходногоПараметра); // Создаем ОбъектXDTO - элемент входного параметра // из его названия понимаем, что это массив строк РезультирующийМассив = WSПрокси.ФабрикаXDTO.Создать(WSПрокси.ФабрикаXDTO.Тип(URIПространстваИмен,"ArrayOfString")); // Создаем ЗначениеXDTO – элемент массива строк // и записываем в него значение «[Содержание]» ЗначениеМассива = WSПрокси.ФабрикаXDTO.Создать(WSПрокси.ФабрикаXDTO.Тип(URIПространстваИмен,"ArrayOfString").Свойства[0].Тип, "[Содержание]" ); // Пытаемся добавить в массив новый элемент ЛокальноеИмя = "string"; РезультирующийМассив.Добавить( ФормаXML.Элемент, URIПространстваИмен, ЛокальноеИмя, ЗначениеМассива ); // при выполнении этой строки выдается ошибка: {ВнешняяОбработка.ТестПодключения.Форма.Форма.Форма(141)}: Ошибка при вызове метода контекста (Добавить) РезультирующийМассив.Добавить(ФормаXML.Элемент,URIПространстваИмен,ЛокальноеИмя,ЗначениеМассива); по причине: Несоответствие типов XDTO: Тип '{Integration1C}ArrayOfString' не найден Тип объекта не является открытым // Отправляем запрос стороннему серверу РезультатЗапроса = WSПрокси.GetItemInfo(ВходныеПараметры); | |||
| 1
    
        azernot 08.11.21✎ 18:10 | 
        Я может что-то не так понимаю, но как я делаю множественные элементы в XDTO:
 Я завожу тип объекта XDTO с именем "МойМассивДанных" и у этого типа добавляю свойство "ЭлементМоегоМассиваДанных" у которого указываю значение "Максимальное количество" = -1 (т.е. множественные данные). ЭлементМоегоМассиваДанных - может быть любого типа, в т.ч. сложного с множеством атрибутов, вложенных элементов и т.п. Далее, в коде это выглядит так: ТипМоегоМассиваДанных = МояФабрикаXDTO.Тип(ПространствоИмен, "МойМассивДанных"); ТипЭлементаМоегоМассиваДанных = ТипМоегоМассиваДанных.Свойства.Получить("ЭлементМоегоМассиваДанных").Тип; ПакетМойМассивДанных = МояФабрикаXDTO.Создать(ТипМоегоМассиваДанных); Пока [пербор нужной коллекции] Цикл ПакетЭлементМоегоМассиваДанных = МояФабрикаXDTO.Создать(ТипЭлементаМоегоМассиваДанных); ... // тут заполняется ПакетЭлементМоегоМассиваДанных ... ПакетМойМассивДанных.ЭлементМоегоМассиваДанных.Добавить(ПакетЭлементМоегоМассиваДанных); КонецЦИкла; | |||
| 2
    
        PaulBC 09.11.21✎ 04:01 | 
        (0) у меня так:
 ТипМассив = Сервис.ФабрикаXDTO.Тип(Настройка.ПространствоИмен, "ArrayOfString"); МассивXDTO = Сервис.ФабрикаXDTO.Создать(ТипМассив); Для Каждого ЭлементМассива Из МассивСтрок Цикл МассивXDTO.string.Add(ЭлементМассива); КонецЦикла; Здесь Сервис - WSПрокси | |||
| 3
    
        Strogg 09.11.21✎ 08:25 | 
        (0) если я правильно понимаю вопрос, то твое свойство "массив" должно иметь тип элемент массива(включающим в себя все элементы из того же пространства имен), который ты опишешь в другом свойстве.     | |||
| 4
    
        desean 10.11.21✎ 15:11 | 
        Заработала конструкция:
 РезультирующийМассив.string.Добавить( ЗначениеМассива ); | |||
| 5
    
        desean 10.11.21✎ 15:12 | 
        Всем Спасибо!     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |