|   |   | 
| 
 | Как быстро результат запроса выгрузить в JSON или XML, не перебирая отдельные записи? | ☑ | ||
|---|---|---|---|---|
| 0
    
        Гений 1С гуру 04.06.21✎ 14:49 | 
        Пишу веб-сервис, который выдает информацию по товарам из базы.
 Нужно выполнить запрос и быстро собрать JSON/XML, не перебирая отдельные записи. 1С в такое умеет? | |||
| 1
    
        Вафель 04.06.21✎ 14:49 | 
        таблицу можно вроде как     | |||
| 2
    
        acht 04.06.21✎ 14:49 | 
        Геня, какой же ты непосредсвенный...     | |||
| 3
    
        Вафель 04.06.21✎ 14:50 | 
        Сериализуется. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/core}. Имя типа XDTO: ValueTable.     | |||
| 4
    
        Жеглофф 04.06.21✎ 14:51 | 
        а "башляй ©" уже было?     | |||
| 5
    
        Гений 1С гуру 04.06.21✎ 14:52 | 
        Хотя нашел свою же ветку: https://forum.infostart.ru/forum9/topic57361/ 
 (3) ТЗ - это лишний дрыг к памяти. Я смотрю РезультатЗапроса можно сериализовать. | |||
| 6
    
        Garykom гуру 04.06.21✎ 14:52 | 
        (0) если xml/json нужен другого вида отличного от дефолтного (3) то один фиг перебирать записи     | |||
| 7
    
        Гений 1С гуру 04.06.21✎ 14:53 | 
        РезультатЗапроса (QueryResult)
 Доступность: Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер). Возможен обмен с сервером. <B>Сериализуется</B>. | |||
| 8
    
        1Сергей 04.06.21✎ 14:53 | 
        циклофобия     | |||
| 9
    
        Гений 1С гуру 04.06.21✎ 14:56 | 
        (8) Скорости для.
 Попробовал так: З = Новый Запрос("ВЫБРАТЬ * ИЗ Справочник.Валюты"); Р = З.Выполнить(); Сообщить(ЗначениеВСтрокуВнутр(Р)); Получил: 
 | |||
| 10
    
        Гений 1С гуру 04.06.21✎ 14:58 | 
        А вот так хренушки:
 З = Новый Запрос("ВЫБРАТЬ * ИЗ Справочник.Валюты"); Р = З.Выполнить(); ЗаписьXML = Новый ЗаписьXML(); ЗаписьXML.УстановитьСтроку(); СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Р); СтрокаXML = ЗаписьXML.Закрыть(); Сообщить(СтрокаXML); Несоответствие типов (параметр номер '2') (Ошибка отображения типов) {(7)}:СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Р); {ВнешняяОбработка.КонсольКода.Форма.Форма.Форма(13)}: Выполнить(ТекстДляВыполнения); по причине: Несоответствие типов (параметр номер '2') (Ошибка отображения типов) | |||
| 11
    
        Гений 1С гуру 04.06.21✎ 14:59 | 
        Если поменять на ЗаписатьXML(ЗаписьXML, Р);
 То: Значения данного типа не могут быть представлены в XML {(6)}:ЗаписатьXML(ЗаписьXML, Р); {ВнешняяОбработка.КонсольКода.Форма.Форма.Форма(13)}: Выполнить(ТекстДляВыполнения); по причине: Значения данного типа не могут быть представлены в XML | |||
| 12
    
        Гений 1С гуру 04.06.21✎ 15:01 | 
        А вот ТЗ да, сериализируется:
 З = Новый Запрос("ВЫБРАТЬ * ИЗ Справочник.Валюты"); Р = З.Выполнить().Выгрузить(); ЗаписьXML = Новый ЗаписьXML(); ЗаписьXML.УстановитьСтроку(); СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Р); СтрокаXML = ЗаписьXML.Закрыть(); Сообщить(СтрокаXML); 
 | |||
| 13
    
        Dzenn гуру 04.06.21✎ 15:02 | 
        Или просто сериализуй таблицу значений, или сделай свой ПакетXDTO и на основании него выгружай во что хочется     | |||
| 14
    
        Гений 1С гуру 04.06.21✎ 15:03 | 
        Гм, даже в JSON можно, прикольно:
 З = Новый Запрос("ВЫБРАТЬ * ИЗ Справочник.Валюты"); Р = З.Выполнить().Выгрузить(); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, Р, НазначениеТипаXML.Явное); СтрокаJSON = ЗаписьJSON.Закрыть(); Сообщить(СтрокаJSON); {
 | |||
| 15
    
        Dzenn гуру 04.06.21✎ 15:03 | 
        А перебирать всё равно придётся — если не ты, то за тебя это сделает платформа     | |||
| 16
    
        Гений 1С гуру 04.06.21✎ 15:06 | 
        (15) платформа шустрее сделает. Правда, хотелось бы по своему формату JSON, хз     | |||
| 17
    
        sikuda 04.06.21✎ 18:17 | 
        Выполнить() - результат в памяти
 Выгрузить() - копия результата в памяти И да можно ещё ОткрытьПоток и ограничить его вменяемым размером. | |||
| 18
    
        Гений 1С гуру 04.06.21✎ 18:26 | 
        (17) но без выгрузить не получится сериализовать средствами платформы. похоже тут в платформе пробел     | |||
| 19
    
        Ненавижу 1С гуру 04.06.21✎ 18:30 | 
        (18) так давно ждём freerad     | |||
| 20
    
        Гений 1С гуру 04.06.21✎ 18:49 | 
        (19) Терпение, моё юный друх, терпение.     | |||
| 21
    
        NorthWind 04.06.21✎ 18:55 | 
        (0) в таблю значений, а ее потом через сериализатор.     | |||
| 22
    
        NorthWind 04.06.21✎ 18:57 | 
        а, ну я поздно, уже ответили     | |||
| 23
    
        mistеr 04.06.21✎ 19:06 | 
        (14) Классический пример методологии "сначала бежим на Мисту, потом заглядываем в доку" от Гени.     | |||
| 24
    
        Гений 1С гуру 04.06.21✎ 19:14 | 
        (23) увы, РезультатЗапроса не сериализируется...     | |||
| 25
    
        rsv 04.06.21✎ 19:21 | 
        (0) возможно  через релизов 10 и сделают.
 Что то типа FOR XML | |||
| 26
    
        Вафель 04.06.21✎ 19:25 | 
        А в чем проблема выгрузить то? Не там ты оптимизируешь | |||
| 27
    
        ДенисЧ 04.06.21✎ 19:28 | 
        Результат запроса - по определению и построению механизм последовательного (или почти последовательного) обхода данных...
 Поэтому вряд ли оно можно одним махом всех забивахом... | |||
| 28
    
        Вафель 04.06.21✎ 19:29 | 
        Результат запроса нельзя обойти. Обойти можно выборку | |||
| 29
    
        Гений 1С гуру 04.06.21✎ 21:00 | 
        (28) как? или ты побуквоедить?     | |||
| 30
    
        Волшебник модератор 04.06.21✎ 21:05 | 
        (29) Он вообще-то лучше тебя понимает платформу.
 Выборка создаёт курсор на сервере, который может выдавать следующую запись результата запроса. Учись, студент. | |||
| 31
    
        Вафель 04.06.21✎ 21:12 | 
        (30) нет конечно же. Так же в память все грузится как и с таблицей     | |||
| 32
    
        Вафель 04.06.21✎ 21:13 | 
        (29) вообще то было денисычу замечание     | |||
| 33
    
        mistеr 04.06.21✎ 23:36 | 
        (31) На сервере 1С имелось в виду.     | |||
| 34
    
        mistеr 04.06.21✎ 23:39 | 
        (26) Проблемы нет, просто ему лень.     | |||
| 35
    
        Сергиус 05.06.21✎ 02:55 | 
        (0)Лучше замерь с какой скоростью твои данные придут туда, откуда вызываешь и будут там обработаны..возможно тормоз не в том месте)     | |||
| 36
    
        Гений 1С гуру 05.06.21✎ 10:42 | 
        (30) в данном случае он пришел сюда побуквоедить. Я спрашивал не о выборке, а о сериализации.     | |||
| 37
    
        Гений 1С гуру 05.06.21✎ 10:43 | 
        (34) не лень, просто выгрузка средствами 1С это потеря скорости     | |||
| 38
    
        Гений 1С гуру 05.06.21✎ 10:43 | 
        (35) там утверждают что миллионы записей из my SQL обрабатывают без проблем. удивлены, что 1С не умеет быстро отдавать     | |||
| 39
    
        acht 05.06.21✎ 11:22 | 
        (37) Пиши ВК, у тебя ж опыт есть. Заодно будет почва для пары статей, кучи вопросов на форумах и море развлечения для нас.     | |||
| 40
    
        acht 05.06.21✎ 11:23 | 
        (38) Ну ты тоже много чего утверждаешь, что уж.     | |||
| 41
    
        Вафель 05.06.21✎ 14:02 | 
        Проблема скорости вебсервисы не в скорости выборки или сериализации, а в скорости инициализации сеанса     | |||
| 42
    
        Гений 1С гуру 05.06.21✎ 14:13 | 
        (41) смотря какая выборка. Если тысяч 60, то 1с будет долго ее генерить.     | |||
| 43
    
        Гений 1С гуру 05.06.21✎ 14:16 | 
        Хотя я в конкретно данном случае решил использовать ODATA, там платформа генерит запрос, все норм по скорости     | |||
| 44
    
        acht 05.06.21✎ 14:16 | 
        (42) О, ну хоть какие-то числовые метрики начали появляться.
 А 60 тысяч чего ты собрался сериализовать для сайта каждые 2 секунды? | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |