Имя: Пароль:
1C
 
Как нарезать 1С запрос ровными ломтиками по 1000 записей ?
0 Repattern
 
23.09.19
13:53
Как нарезать 1С запрос ровными ломтиками по 1000 записей ?
1 Волшебник
 
23.09.19
13:56
упорядочить по полю, выбрать первые 1000
для выбора следующий 1000 добавить условие ГДЕ поле > последнийВыбранный
2 palsergeich
 
23.09.19
13:57
(1) при наличии больше 1 измерения соответственно где Измерение1 ... Измерениеn > чем в последней записи
3 palsergeich
 
23.09.19
13:57
(2) но да без упорядочивания никак
4 Repattern
 
23.09.19
14:00
(1) если это в самом запросе - то мне не подойдёт.  

У меня 10.000 записей
Каждую 1000 мне надо сохранить в файл
если я выберу упорядочить по полю, выбрать первые 1000 то остальные 9000 не попадут в запрос
5 Repattern
 
23.09.19
14:05
(1) могу ли попросить более развёрнутый ответ ? :-)
6 Конструктор1С
 
23.09.19
14:07
(0)(4) а зачем это делать в запросе?
7 CrushBy
 
23.09.19
14:08
(6) Иногда бывает нужно, когда все данные в память сервера приложений не пролазят одновременно
8 Волшебник
 
23.09.19
14:09
ВЫБРАТЬ ПЕРВЫЕ 1000 Код, Ссылка
ИЗ Справочник.Номенклатура
ГДЕ Код > &ПоследнийКод
УПОРЯДОЧИТЬ ПО Код ВОЗР

Запрос.УстановитьПараметр("ПоследнийКод", 0);

Далее обработка результата запроса в цикле и в конце запоминаем &ПоследнийКод для следующего запроса
9 Repattern
 
23.09.19
14:11
(6)

Задача в том что бы записать данные в csv файл по 1000 строк.

У меня есть запрос который выбирает все записи.

идея была в том чтобы както розделить результат запроса по 1000 строк
И строки передавать в функцию "записи файла"
Результат.Выполнить().Выгрузить(Первая1000)
Результат.Выполнить().Выгрузить(Вторая1000)
И тд
10 1Сергей
 
23.09.19
14:12
ох уж эта Выполнить().Выгрузить()

:)
11 shuhard
 
23.09.19
14:13
(9) не дели в запросе, дели в цикле выгрузки =)
12 Repattern
 
23.09.19
14:15
(8) благодарю
13 d4rkmesa
 
23.09.19
14:34
(0) Я вот думаю, если 8.3.13+, можно попробовать заюзать АвтоНомерЗаписи в запросе.
14 Вафель
 
23.09.19
14:51
(9) тогда каждые 1000 строк делай файл.записать(); новый файл
15 Вафель
 
23.09.19
14:51
(13) это только для временных
16 Anarki
 
23.09.19
15:13
(15) А в условии где то написано что нужно это сделать без временных таблиц?
Как раз можно пронумеровать все записи, положить в ВТ, потом сделать запрос к ней, добавтить поле "Тыша", которое будет хранить номер тысячи и сгруппировать по нему, или 10 пакетных запросов сделать каждый будем свою тысячу выводить.
17 Anarki
 
23.09.19
15:21
ВЫБРАТЬ
    Номенклатура.Ссылка,
    АВТОНОМЕРЗАПИСИ() КАК НомерЗаписи
ПОМЕСТИТЬ ВТ
ИЗ
    Справочник.Номенклатура КАК Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.Ссылка,
    ВТ.НомерЗаписи,
    ВЫБОР
        КОГДА ВТ.НомерЗаписи <= 1000
            ТОГДА 1
        КОГДА ВТ.НомерЗаписи <= 2000
            ТОГДА 2
        КОГДА ВТ.НомерЗаписи <= 3000
            ТОГДА 3
        КОГДА ВТ.НомерЗаписи <= 4000
            ТОГДА 4
        КОГДА ВТ.НомерЗаписи <= 5000
            ТОГДА 5
        // и т.д.    
            
        ИНАЧЕ 10
    КОНЕЦ КАК ПартияПо1000
ИЗ
    ВТ КАК ВТ
ИТОГИ ПО
    ПартияПо1000
18 Fragster
 
гуру
23.09.19
15:22
учу пользоваться выражениями встроенного языка: Пока, Если, =, +
19 Fragster
 
гуру
23.09.19
15:22
но очень дорого
20 Fragster
 
гуру
23.09.19
15:23
нах это в запросе делать?
21 Sapiens_bru
 
23.09.19
15:31
(13) Сделал. Получается не очень красиво, но из внешних параметров передаётся только порция на которую надо нарезать)

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Ссылка,
    АВТОНОМЕРЗАПИСИ() КАК Номер
ПОМЕСТИТЬ вт
ИЗ
    Справочник.Номенклатура КАК Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    МАКСИМУМ(вт.Номер) КАК Номер
ПОМЕСТИТЬ втМакс
ИЗ
    вт КАК вт
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    вт.Номер * &П КАК Номер
ПОМЕСТИТЬ втШкала
ИЗ
    вт КАК вт,
    втМакс КАК втМакс
ГДЕ
    вт.Номер * &П < втМакс.Номер + &П
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    вт.Ссылка КАК Ссылка,
    вт.Номер КАК Номер,
    МИНИМУМ(ЕСТЬNULL(втШкала.Номер, 0)) КАК Шкала
ПОМЕСТИТЬ втПочтиИтог
ИЗ
    вт КАК вт
        ЛЕВОЕ СОЕДИНЕНИЕ втШкала КАК втШкала
        ПО (вт.Номер < втШкала.Номер)

СГРУППИРОВАТЬ ПО
    вт.Ссылка,
    вт.Номер
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    втПочтиИтог.Шкала КАК Шкала,
    втПочтиИтог.Ссылка КАК Ссылка
ИЗ
    втПочтиИтог КАК втПочтиИтог
ИТОГИ ПО
    Шкала
22 Repattern
 
23.09.19
16:19
Благодарю всех уже сделал
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн