Как с помощью запроса организовать выборку значений справочника пакетами по 100 элементов?

возможно следует использовать по ГРУППИРУЮЩИМ НАБОРАМ?
---
вот что получилось

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

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВЫРАЗИТЬ(ВТ.НомерЗаписи / &КоличествоВГруппе КАК ЧИСЛО(12, 0)) КАК НомерГруппы,
    ВТ.Ссылка КАК Ссылка
    ИЗ
    ВТ КАК ВТ
    ИТОГИ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Ссылка)
    ПО
    НомерГруппы
```

такое решение имеет сугубо академический интерес, тк временная таблица сопоставима с размером таблицы всей номенклатуры и на больших базах создание такой вт критично
---
В языке запросов реализована поддержка GROUPING SETS (ГРУППИРУЮЩИМ НАБОРАМ). Поддержка данной конструкции предназначена для группировки по нескольким группам за одно сканирование таблицы, другими словами она эквивалентна конструкции ОБЪЕДИНИТЬ ВСЕ с запросами с СГРУППИРОВАТЬ ПО для указанных групп. Поля списка выборки, не попадающие в текущую группу, заменяются на NULL.
Не ваш случай.
---
почему нет? если как то привязать критерий группировки к количеству записей
---
тут только отталкиваться от задачи.
Например, если код справочника числовой, то можно сделать так:

```1c
    ВЫБРАТЬ
    ВЫРАЗИТЬ(Справочник1.Код / &ПорядокГруппы КАК ЧИСЛО(12, 0)) КАК НомерГруппы,
    Справочник1.Ссылка КАК Ссылка
    ИЗ
    Справочник.Справочник1 КАК Справочник1
    ИТОГИ
    КОЛИЧЕСТВО(Ссылка)
    ПО
    НомерГруппы
```
---
так только при условии непрерывности ;((
---
А как насчёт использования АВТОНОМЕРЗАПИСИ() вместо кода справочника?
---
АВТОНОМЕРЗАПИСИ
неплохо! тогда группировка по номеру группы даст паджинацию
---
вот что получилось

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

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВЫРАЗИТЬ(ВТ.НомерЗаписи / &КоличествоВГруппе КАК ЧИСЛО(12, 0)) КАК НомерГруппы,
    ВТ.Ссылка КАК Ссылка
    ИЗ
    ВТ КАК ВТ
    ИТОГИ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Ссылка)
    ПО
    НомерГруппы
```

такое решение имеет сугубо академический интерес, тк временная таблица сопоставима с размером таблицы всей номенклатуры и на больших базах создание такой вт критично
---
Этот вариант может дать разный результат, т.к. Автономерзаписи() формируется по не известному алгоритму.
Итоги считаю лишними.
---
почему по неизвестному? будет выдана неразрывная последовательность, но не гарантируется ее начало с 1 для всех субд. для этой задачи вполне подходит
---
Оно не гарантирует повторение номеров двух разных итераций запроса данных.
---
но тут одна итерация в любом случае - при построении ВТ
как я писал, вообще способ с построением ВТ - зло

можете предложить альтенраниву без ВТ?

вопрос КАК НУМЕРОВАТЬ - не важен, есть несколько способов
---
Это частный случай :)
---
можете предложить альтенраниву без ВТ?

```1c
    Выбрать
    T1.Ссылка КАК Ссылка,
    СУММА(1) КАК НомерСтроки
    ИЗ
    Справочник.Номенклатура Т1
    Левое Соединение Справочник.Номенклатура КАК НомераСтрок
    ПО Т1.Ссылка > НомераСтрок.Ссылка
    СГРУППИРОВАТЬ ПО
    T1.Ссылка
```

ВСЕ. Никаких ВТ.

Далее делаем:

```1c
    Сч = 1;
    Пока Выборка.Следующий() Цикл
    ........
    Если Выборка.НомерСтроки%100 = 0 Тогда
    //что-то там делаем с набором в 100 элементов
    Сч = 1;
    Иначе
    Сч = Сч + 1;
    КонецЕсли;
    КонецЦикла;

    Если Сч >= 1 Тогда
    //что-то там делаем с оставшимся набором в <100 элементов
    КонецЕсли;
```
---
группировка должна быть получена в гапросе, а не в пост обработке.
для постобработки и номер строки то не нужен - ставьте счетчик в цикл - это кошернее
---
Почему вы трактуете "пакетами по 100 элементов" - это обязательно группировка и при этом должно быть строго 1 выполнение запроса?
для постобработки и номер строки то не нужен - ставьте счетчик в цикл - это кошернее
Нужен, либо нужен строго упорядоченный набор, т.к. другая итерация запроса неупорядоченных данных не факт что вернет записи в той же последовательности.
---
может быть можно посмотреть в сторону СКД и поля с нарастающим итогом, но я не уверен, что потом по нему можно будет группировать.
---
каждый следующий запрос с невхождением в результаты предыдущих всех
---
это цикл запросов. считатеся что эта задача решается ОДНИМ запросом. вот в чем прикол
---
тут у этих знатоков вызнать бы, что они обозначают термином "выборку пакетами"
---
любой способ разделить выборку по n записей (за исключением последнего пакета)
---
это цикл запросов. считатеся что эта задача решается ОДНИМ запросом. вот в чем прикол
Вы пишите получить "пакетами по 100", это или один "пакетный запрос" или несколько запросов с указанием смещения.

Вот такой вариант как то на собеседовании попадался. Сам вопрос был в том что если нет поля по которому можно организовать смещение выборки то можно это делать по ссылке.

```1c
    ВЫБРАТЬ ПЕРВЫЕ 100
    Сотрудник.Ссылка КАК Ссылка
    ИЗ
    Справочник.Сотрудники КАК Сотрудник
    ГДЕ
    Сотрудник.Ссылка > &Ссылка

    УПОРЯДОЧИТЬ ПО
    Ссылка
```

В "ссылку" передают последнюю ссылку из первой выборки.
---
да, такое решение тоже считаю оптимальным. но условие было про единственный запрос
---
В таком случае пронумеруйте записи запросом, получите их все и уже постобработку выполняйте по нужному количеству объектов.
---
тогда и нумеровать не надо
---
—