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

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