Аналог SQL OFFSET и SKIP в 1С для разбития выборки запроса на страницы

Условие задачи

На языке запросов 1С необходимо с помощью языка запросов выбрать M записей начиная с записи N в справочнике или документе.

Отрезок M - M+N

Решение

Подобная задача часто используется, например, для пагинации выборки данных. Т.е. чтобы все записи выборки из результата выполнения запроса выбрать не сразу, а получать равными частями, чтобы было удобно их постранично выводить.

В MS SQL есть операторы TOP (ПЕРВЫЕ) и SKIP (ПРОПУСТИТЬ), которые позволяют это сделать. В запросах на платформе 1С нет оператора SKIP.
Подумаем, что можно с этим сделать.

Возьмем типовую 1С:Управление торговлей 11 и постараемся промоделировать ситуацию на реальной задаче.

Для справочника Номенклатура необходимо написать запрос, который выведет все элементы исключая группы с N = 10 и M = 10 с сортировкой по наименованию. Т.е. вывести элементы с десятого по девятнадцатый.

Мы имеем возможность в 1С использовать только получение первых записей. Поэтому идея решения на SQL следующая:

SELECT top N+M * FROM TABLE ORDER BY n
EXCEPT
SELECT top N * FROM TABLE ORDER BY n

Получим первые N+M элементов, и исключим из выборки первые N, в результате у нас останется искомое M элементов начиная с N. Схематично:

Отрезок от 0 до N и от N до N+M

Выбираем сначала от 0 до N+M и исключаем от 0 до N. А теперь переиначим на языке 1С. В результате получим вот такой запрос:

ВЫБРАТЬ ПЕРВЫЕ 10 // M
    Номенклатура.Ссылка КАК Ссылка
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ	
    НЕ Номенклатура.Ссылка В
                (ВЫБРАТЬ ПЕРВЫЕ 10 // N
                    Номенклатура.Ссылка КАК Ссылка
                ИЗ
                    Справочник.Номенклатура КАК Номенклатура
                ГДЕ
                    Номенклатура.ЭтоГруппа = ЛОЖЬ
                УПОРЯДОЧИТЬ ПО
                    Номенклатура.Наименование,
                    Ссылка)
    И Номенклатура.ЭтоГруппа = ЛОЖЬ

УПОРЯДОЧИТЬ ПО
    Наименование,
    Ссылка

Запрос результат

Проверяем в справочнике Номенклатура:

То, что должны получить

Получаем искомый результат. То, что и хотели получить

Важно! Выборки (то что в условии НЕ В ... и в главном запросе) должны быть с одинаковым упорядочиванием (у нас по наименованию и далее по ссылке) и упорядочивание должно быть всегда по какому-либо полю. Иначе запросы могут отработать не верно и вернуть не те результаты. Если поля упорядочивания нет, то можно использовать поле "Ссылка".

Выводы

В целом, этот способ достаточно хорош и может быть использован в реальной работе. Он работает достаточно быстро и позволяет обходить ограничение на использование оператора SKIP в запросах.

Фото автора записи

Основатель и директор по развитию Софтонит. Практикующий руководитель разработки. Эксперт в области автоматизации техподдержки

Системные решения для 1С
Аналог SQL OFFSET и SKIP в 1С для разбития выборки запроса на страницы
SoftOnIT.RU
В языке запросов 1С нет оператора SKIP, чтобы вернуть часть данных их выборки, начиная с какого-то элемента... 2022-12-14T10:40:11+03:00
Аналог SQL OFFSET и SKIP в 1С для разбития выборки запроса на страницы
Аналог SQL OFFSET и SKIP в 1С для разбития выборки запроса на страницы
https://softonit.ru
Будь вкурсе!

Сообщим о новых материалах, важных событиях и предложениях

Email заполнен не корректно
Нажимая на кнопку «Подписаться», вы даете согласие на обработку своих персональных данных.
Нажимая на кнопку «Подписаться», вы даете согласие на обработку своих персональных данных.
Поделитесь статьей
Рекомендуем почитать
Статьи Решение проблемы "Обнаружено нарушение целостности системы 1С"

На сегодняшний день любой, пользующийся популярностью у пользователей программный продукт подвергается "пиратским" взломам и соответственно нелегальному использованию. Не исключением будут и программы от всеми известной в России фирмы 1С. Каждый разработчик старается бороться с подобным незаконным использованием своих продуктов по-разному. Так, например, разработчики 1С с 1-ого февраля 2021 года, массово запустили механизм, который определяет легальность использования программы 1С. В случае, если программа была взломана и используется незаконно конечные пользователи получают ошибку "Обнаружено нарушение целостности системы". Сегодня в публикации разберем причины появления данной ошибки, а также расскажем как решить возникшую проблему. 

Статьи Ошибка HTTP 500.0 - Internal Server Error после публикации базы 1С на веб-сервере IIS

Рассмотрим ошибку, которая может возникать при публикации информационной базы 1С на web-сервере IIS.
Попытаемся ее решить. Ошибка называется HTTP 500.0 - Internal Server Error.

Статьи Настройка Apache для работы 1С через HTTPS (SSL)

Безопасность для многих всегда идет на первом месте, многие интернет-гиганты, типа Google даже добавляют в свои браузеры предупреждения, что соединение не безопасно, если на сайте не используется SSL-сертификат.
1С:Предприятие тоже может работать по протоколу HTTPS.
Мы предлагаем статью-инструкцию, как настроить HTTPS в Apache таким образом, чтобы 1С:Предприятие работало без проблем через SSL.

Статьи Как удалить данные по организации в базе 1С?

При ведении учета по нескольким организациям зачастую возникает необходимость очистить основную базу от всех данных какой-либо организации. Или разделить информационную базу на несколько, по организациям. Рассмотрим один из вариантов решения. Однако с помощью стандартной обработки удаления информации, это сделать будет проблемно и ресурсоемко. Поэтому в этой публикации рассмотрим вариант решения подобных проблем.

Статьи Подключение терминала сбора данных к 1С

В этой статье мы подключим терминал сбора данных к 1с поэтапно и поработаем документом "Поступление". Данное решение поможет Вам значительно ускорить процесс пересчета товара, а что еще немаловажно при правильной работе избавить от ошибок. Прочитав данную статью, Вы поймете, что все не так сложно и доступно для каждого. Для реализации выбран ТСД фирмы Urovo и "1С:Розница"

Статьи Как включить отладку на сервере 1С:Предприятия?

Все мы прекрасно знаем, что отладка это прекрасный механизм в платформе 1С, который позволяет быстро найти проблему и решить ее путем пошаговых операций и просмотра значений переменных. Но при использовании серверной базы 1С механизм отладки по умолчанию выключен. А как быть, если надо найти проблему? В этой статье давайте постараемся в этом вопросе разобраться.

0 / 0