Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Преобразование СписокXDTO в ТаблицаЗначений

Преобразование СписокXDTO в ТаблицаЗначений
Я
   Mentos1C
 
20.07.21 - 09:28
Всем привет. Делаю запрос к API, получаю списокXDTO. Хотелось бы преобразовать в таблицу значений каким-нибудь максимально коротким, и максимально универсальным кодом, ибо получаю несколько разных СписокXDTO, с различной структурой. Ваши предложения? И где про это почитать? Ни с .Net ни с сериализаторами незнаком, и даже не понимаю зачем они нужны. Всем спасибо
   Галахад
 
1 - 20.07.21 - 09:31
Что за странное API?
   mikecool
 
2 - 20.07.21 - 09:35
(0) как "с различной структурой" преобразовать в 1 ТЗ?
   Mentos1C
 
3 - 20.07.21 - 09:41
(2) разные списки в разные ТЗ. Это ж логично)
(1) Да вроде дефолтное апи. Пишу запрос, получаю Объект, а внутри списки, которые нужно раскидать по таблицам значений
   END
 
4 - 20.07.21 - 09:42
(3) Дефолтное API для кого дефолтное?
   Mentos1C
 
5 - 20.07.21 - 09:42
API на сайте магазина
   END
 
6 - 20.07.21 - 09:43
(5) Пригласите программиста...
   Mentos1C
 
7 - 20.07.21 - 09:44
(4) SOAP протокол... Это имеет значение? Какие то другие объекты можно получить при десериализации XML?
   Kassern
 
8 - 20.07.21 - 09:48
(0) я правильно понимаю, вы получаете xml схему с данными на выходе? Если да, то можно так:
Преобразование_ПВЗ = Новый ПреобразованиеXSL;
Преобразование_ПВЗ.ЗагрузитьИзСтроки(Схема);
СтрокаXML_ПВЗ = Преобразование_ПВЗ.ПреобразоватьИзСтроки(СтрокаXML);
ЧтениеXML_ПВЗ = Новый ЧтениеXML();
ЧтениеXML_ПВЗ.УстановитьСтроку(СтрокаXML_ПВЗ);
ТЗ2 = СериализаторXDTO.ПрочитатьXML(ЧтениеXML_ПВЗ);
Взято из https://forum.infostart.ru/forum9/topic131918/
   Mentos1C
 
9 - 20.07.21 - 09:58
(8) Очень интересный вариант. Если я правильно понимаю, XSL описание это и есть новая, пока не созданная и не заполненная таблица, с фиксированым количество, и наименованием колонок, что не соответствует постановке вопроса :( Но решение действительно хорошее, создать XDTOПакет и с его помощью формировать ТЗ. Просто я заранее не могу знать о структуре списков, это усложняет задачу
   Kassern
 
10 - 20.07.21 - 10:05
(9) как то странно, обычно у апишек статичная структура ответа. Если что то и меняется, то это за несколько недель предупреждается.
   Mentos1C
 
11 - 20.07.21 - 15:08
(10) Да я могу перебрать все возможные списки которые я буду преобразовывать в ТЗ. Но тоже, получается не универсальный метод) У меня получилось вот так

Функция XDTOВТаблицуЗначений(XDTOСписок)
    
    ТаблицаЗначений = Новый ТаблицаЗначений;
    
    //Создание колонок идентично колонкам в списке ХДТО

    Если XDTOСписок.Количество() > 0 тогда
        
        Для каждого Строка из XDTOСписок[1].Свойства() цикл
            
            ТаблицаЗначений.Колонки.Добавить(Строка.Имя);
            
        КонецЦикла;
        
    КонецЕсли;
    
    //Копирование ХДТО списка в таблицу значений

    Для каждого Строка из XDTOСписок цикл
        
        НоваяСтрока = ТаблицаЗначений.Добавить();
        
        Для каждого Колонка из ТаблицаЗначений.Колонки цикл
            
            НоваяСтрока[Колонка.Имя] = Строка[Колонка.Имя];    
            
        КонецЦикла;
        
    КонецЦикла;
    
    Возврат ТаблицаЗначений;
КонецФункции
   Mentos1C
 
12 - 20.07.21 - 15:10
Я не правильно вопрос сформулировал или мое решение жуткий костыль, который никому даже в голову не приходит? Или тут помощь только на платной основе?
   Вафель
 
13 - 20.07.21 - 15:31
А смысл?
Этот список можно обходить через для каждого по месту требования.
Ну может если только в запрос
   fisher
 
14 - 20.07.21 - 15:36
(11) Ну, норм. Куда уж проще-то?
В цикле обхода строк можно попробовать избавиться от вложенного цикла обхода колонок через ЗаполнитьЗначенияСвойств()
   Mentos1C
 
15 - 20.07.21 - 17:39
(13) да не только в запрос. Искать строки по множественным, иногда взаимозависимым, условиям используя обход "Для каждого", то ещё приключение, на итак короткие выходные)

Список тем форума
 
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.