8.х Преобразовать Структуру в Объект XDTO

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем znepok, 21 окт 2011.

  1. TopicStarter Overlay
    znepok
    Offline

    znepok

    Регистрация:
    21 окт 2011
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Добрый день!

    Реализую веб-интерфейс, который получает данные из 1С через веб-службу.

    Веб-служба возвращает ответ в виде Объекта XDTO.
    Ответ:
    Статус - int
    Сообщение - string
    Результат - anyType

    Одна из функций должна вернуть простую структуру. Поэтому мне нужно преобразовать структуру в объект XDTO, чтобы записать ее в св-во Результат

    Пробовал так:
    Код:
    StructureТип = ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core", "Structure");
    StructureХДТО = ФабрикаXDTO.Создать(StructureТип);
    
    Результат = Новый Структура;
    Результат.Вставить("ААА", 1);
    Результат.Вставить("БББ", "ВВВ");
    
    StructureХДТО = СериализаторXDTO.ЗаписатьXDTO(Результат);
    ОтветХДТО.Результат = StructureХДТО;
    
    Выбрасывается ошибка в предпоследней строке "Ошибка при вызове метода контекста (ЗаписатьXDTO)"


    Подскажите как правильно сделать преобразование.

    Или подскажите, как работать с объектом StructureХДТО, чтобы добавить значения.
    StructureХДТО.Add("AAA") ругается на недостаточное кол-во аргументов,
    а StructureХДТО.Add("AAA", "БББ") на ошибку при вызове метода контекста


    Создавать специально тип объекта для результата данной функции в пакете XDTO не хочется.

    Спасибо!
  2. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    Выбирай на вкус:
    1 - перед этим конверти свою структуру в формат XMLки
    2 - превращай структуру в формат строки с разделителями
    3 - воспользуйся функцией
    Код:
    ЗначениеВСтрокуВнутр
    
    
    Короче преобразуй свое хитрое значение в простой формат.
    Только это, а кто сервисом пользоваться будет? Если другая 1Ска, то можно и ЗначениеВСтрокуВнутр, а если нет - то либо строку в формате XML (типа стандарт же), либо строку с разделителями (+ получателям описалово что это за строка такая и как с ней работать)
  3. TopicStarter Overlay
    znepok
    Offline

    znepok

    Регистрация:
    21 окт 2011
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Такие варианты мне не подходят.

    Ведь в синтаксис-помощнике написано, что объект Структура может быть сериализован в ОбъектXDTO

    Сделал так:
    Код:
    Результат = Новый Структура;
    Результат.Вставить("ААА", 1);
    Результат.Вставить("БББ", "ВВВ");
    
    Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
    ОбъектХДТО = Сериализатор .ЗаписатьXDTO(Результат);
    
    
    Но ОбъектХДТО принял тип СписокXDTO и из-за этого элементы необходимо получать по индексу.


    Пусть не получается преобразование сделать. Черт с ним.

    Но как работать с объектом XDTO Structure?
    Как мне добавить в нее хоть одну связку ключ-значение?

    Объект Structure выглядит так:
    Structure -> Property (complexType) { Value, name }
  4. Orkrist
    Offline

    Orkrist

    Регистрация:
    13 янв 2015
    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    1
    На платформе 8.3.5.1068 сработал вот такой код:

    Код:
    докРозница = Новый Структура;
    докРозница.Вставить("Дата", Дата);
    докРозница.Вставить("Номер", Номер);
    докРозница.Вставить("ПометкаУдаления", ПометкаУдаления);
    докРозница.Вставить("Проведен", Проведен);
    докРозница.Вставить("Клиент", Клиент);
    
    Результат = СериализаторXDTO.ЗаписатьXDTO(докРозница);
    В переменной "Результат" получил тип объекта XDTO - Structure (http://v8.1c.ru/8.1/data/core)

Поделиться этой страницей