Имя: Пароль:
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) да не только в запрос. Искать строки по множественным, иногда взаимозависимым, условиям используя обход "Для каждого", то ещё приключение, на итак короткие выходные)
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший