Имя: Пароль:
1C
1С v8
Как добавить в Объект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
Всем Спасибо!
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс