Пагинация seek (без смещений)
Надёжный обход больших выборок «после последнего ключа».
seek pagination A1sQ
Зачем
Надёжнее, чем OFFSET: не «скачивает» страницы при вставках/удалениях во время чтения.
Код
Функция ПеребратьНоменклатуруПакетами(Пакет = 500) Экспорт
Последняя = Неопределено;
Пока Истина Цикл
Текст = "ВЫБРАТЬ ПЕРВЫЕ &N Ссылка, Наименование
ИЗ Справочник.Номенклатура
ГДЕ (&Last ЕСТЬ NULL) ИЛИ (Ссылка > &Last)
ПОРЯДОК ПО Ссылка";
Парам = Новый Структура("N,Last", Пакет, Последняя);
Таб = A1sQ.Unload( A1sQ.ExecuteQ( A1sQ.QT(Текст), Парам ) );
Если Таб.Количество() = 0 Тогда Прервать; КонецЕсли;
Для Каждого Р Из Таб Цикл
// ... обработка ...
КонецЦикла;
Последняя = Таб[Таб.Количество()-1].Ссылка;
КонецЦикла;
Возврат Истина;
КонецФункции
Подводные
- Сортируйте по уникальному ключу (Ссылка) или составному ключу (Дата, Ссылка).
- Для составного ключа см. пример.