Версия для печати темы (https://pro1c.org.ua/index.php?s=aec75509c1125ade9d6bce76cda14d2e&showtopic=67477)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Как выгрузить большой объём данных постранично в json?

Автор: burza 12.02.24, 12:51

подскажите как выгрузить большой объём данных постранично в json . В каждую страницу по 10 000. как через page передавать типо первая страница 10 000. вторая начиная с 10 001 по 20 000 и т.д

    ПараметрыИзЗапроса = Новый Структура;
    ПараметрыИзЗапроса.Вставить("token", Запрос["ПараметрыURL"].Получить("token"));
    //ПараметрыИзЗапроса.Вставить("page", Запрос["ПараметрыURL"].Получить("page"));


  Если ПараметрыИзЗапроса.token = "fxGXX13iRkE5y0f0NvQAz9mjrAFtF4sRT9QRqZXhifgypLGAF" тогда     
        
    ////Прайс //////////////////////////////////
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    dbo_Table_1.Артикул КАК Артикул,
        |    dbo_Table_1.Производитель КАК Производитель,
        |    dbo_Table_1.Наименование КАК Наименование,
        |    dbo_Table_1.Валюта КАК Валюта,
        |    dbo_Table_1.Поставщик КАК Поставщик,
        |    dbo_Table_1.Цена КАК Цена,
        |    dbo_Table_1.Наличие
        |ИЗ
        |    ВнешнийИсточникДанных.Price.Таблица.dbo_Table_1 КАК dbo_Table_1
        |
        |СГРУППИРОВАТЬ ПО
        |    dbo_Table_1.Артикул,
        |    dbo_Table_1.Цена,
        |    dbo_Table_1.Наименование,
        |    dbo_Table_1.Производитель,
        |    dbo_Table_1.Наличие,
        |    dbo_Table_1.Валюта,
        |    dbo_Table_1.Поставщик";
    

    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    
       МассивУслуг = Новый Массив;


    Пока Выборка.Следующий() Цикл

            МассивУслуг.Добавить(Новый Структура("Артикул, Производитель, Цена, Наименование, Наличие", Выборка.Артикул, Выборка.Производитель , Выборка.Цена, Выборка.Наименование, Выборка.Наличие));
        
    
        КонецЦикла;    

    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    
    ЗаписатьJSON(ЗаписьJSON, МассивУслуг);


    
    СтрокаДляОтвета = ЗаписьJSON.Закрыть();

    
    Ответ = Новый HTTPСервисОтвет(200);    
    Ответ.Заголовки.Вставить("Content-type", "application/json;  charset=utf-8");
    
    Ответ.УстановитьТелоИзСтроки(СтрокаДляОтвета, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);

Автор: Vofka 12.02.24, 13:54

В языке запросов есть функция АВТОНОМЕРЗАПИСИ(). Далее в ГДЕ добавляете условие

|ГДЕ
|   НомерЗаписи > &СтартовыйНомер


где СтартовыйНомер = (НомерСтраницы - 1) * КоличествоНаСтранице
И в ВЫБРАТЬ надо добавить ПЕРВЫЕ ххх, где ххх = НомерСтраницы * КоличествоНаСтранице

Автор: burza 12.02.24, 16:23

Vofka @ Сегодня, 13:54 * ,
АВТОНОМЕРЗАПИСИ() на ссылку делаю. таблица временая


burza @ Сегодня, 15:59 * ,
Всё ок) лохонулся

Автор: burza 17.02.24, 16:18

Vofka @ 12.02.24, 13:54 * ,
забыл упомянуть что лежит на sql. то есть АВТОНОМЕРЗАПИСИ() не работает через внешние источники. как быть?
внутри да всё ок работает как вы подсказали.

Автор: burza 19.02.24, 15:02

burza @ 17.02.24, 16:18 * ,
подскажите что как быть)?

Автор: Vofka 19.02.24, 15:05

burza @ Сегодня, 15:02 * ,
а во внешней базе данных id не целочисленный?

Автор: burza 19.02.24, 19:33

Vofka @ Сегодня, 15:05 * ,
делать Автоинкремент и пробывать запросами через саму sql делать? ну уже тоже так решил, ибо через 1С я так понял это ника как не решить

burza @ Сегодня, 18:55 * ,
что-то такое SELECT * FROM dbo.Table_1 ORDER BY Id OFFSET 1 ROWS FETCH NEXT 10 ROWS ONLY

как запросом через 1С получить данные и разобрать?)

Автор: Vofka 20.02.24, 9:41

Цитата(burza @ 19.02.24, 19:33) *
как запросом через 1С получить данные и разобрать?)

Точно так же, как вы это делали раньше. Просто вместо АВТОНОМЕРЗАПИСИ() используйте колонку Id:
|ГДЕ
|   Id > &СтартовыйНомер

Автор: sava1 20.02.24, 10:14

а не проще сформировать несколько файлов ЖСОН по одной выборке и не гемороиться с несколькими выборками?

Автор: burza 20.02.24, 10:46

Vofka @ Сегодня, 9:41 * ,
сейчас пробну

Автор: Vofka 20.02.24, 12:06

Цитата(burza @ 20.02.24, 10:46) *
сейчас пробну

Я сейчас подумал, что это не сработает именно так как вам надо, если в Id есть пробелы. Т.е. если ИД идут 1, 2, 3, 800, 801, 900 и т.п. Надо выбирать первые ххх без условия ГДЕ с сортировкой по ИД. В таком случае, если вам надо вернуть, например, вторую тысячу записей, то делаем так:
|ВЫБРАТЬ ПЕРВЫЕ 2000
|...
|УПОРЯДОЧИТЬ ПО
|  Ид

Потом открываете выборку и на уровне обхода выборки пропускаете 1000 записей и начинаете брать с 1001.

Автор: burza 20.02.24, 12:44

Vofka @ Сегодня, 12:06 * ,
Понял, сейчас гляну, спасибо!
и еще вопрос не по теме ну чтобы уже не создавть


 ! 

https://pro1c.org.ua/index.php?act=announce&id=2: 6
 

Автор: Vofka 20.02.24, 14:46

Цитата(burza @ 20.02.24, 12:44) *
и еще вопрос не по теме ну чтобы уже не создавть

Та создавайте.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua