A1sCode библиотека 1С

Пагинация seek (без смещений)

Надёжный обход больших выборок «после последнего ключа».

seek pagination A1sQ

Зачем

Надёжнее, чем OFFSET: не «скачивает» страницы при вставках/удалениях во время чтения.

Код


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

Подводные

  • Сортируйте по уникальному ключу (Ссылка) или составному ключу (Дата, Ссылка).
  • Для составного ключа см. пример.