[Alimir_BootModal_Login]

Система компоновки данных 1С 8.3 для начинающих: делаем отбор и сортировку на уровне запроса

Автор уроков и преподаватель школы: Владимир Милькин

На прошлом уроке мы написали простейший запрос, который выбирает из базы все города и передает их системе компоновки данных (СКД).

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

Я ещё раз повторюсь. Наш предыдущий отчёт выбирает из базы ВСЕ города. А что если у нас в справочнике будет не два десятка городов, а 2000?

В этом случае наш отчёт будет тормозить, потому что мы заставляем его читать из базы лишнюю информацию, которую можно было бы и не читать (я имею в виду города с численностью меньше заданной в параметрах отбора).

Чтобы не читать лишнюю информацию и не передавать её в СКД - достаточно вынести сортировку и отбор по численности на уровень запроса. В этом случае запрос сам сделает всю работу по сортировке и отбору, а системе компоновки данных останется только оформить этот результат в виде списка.

В этом уроке я покажу вам как это можно сделать.

Ставим цель

  • Повторить предыдущий отчёт, но сделать его более быстрым.
  • Для этого сделать сортировку и отбор по численности на уровне запроса, не прибегая к возможностям системы компоновки данных в этой части.
Итак, поехали :-)

Создаём новый отчёт в конфигураторе

Открываем базу "Гастроном" в конфигураторе и через главное меню "Файл"->"Новый..." создаём новый отчет:

В качестве вида документа выбираем "Внешний отчет":

В новом отчёте указываем имя "Урок6" и нажимаем кнопку "Открыть схему компоновки данных":

Соглашаемся с именем схемы по умолчанию:

Добавляем набор данных - запрос:

Указываем в запросе все поля

Вызываем конструктор запроса:

Указываем поля, которые будут выбираться запросом из таблицы "Города":

Указываем в запросе сортировку

Переходим на вкладку "Порядок" и перетаскиваем поле "Численность" из первой колонки во вторую:

При этом указываем сортировку "Возрастание":

Указываем в запросе условие

Переходим на вкладку "Условия" и перетаскиваем поле "Численность" из первой колонки во вторую:

При этом указываем в качестве сравнения знак больше или равно, а в качестве имени параметра условия придумываем и пишем "МинимальнаяЧисленность":

Закрываем конструктор запроса:

И видим в тексте запроса и сортировку (секция УПОРЯДОЧИТЬ ПО) и отбор по численности (секция ГДЕ):

Настраиваем доступность параметра запроса для пользователя

Переходим на вкладку "Параметры" и видим, что сюда автоматически попал наш параметр из запроса (тот перед которым стоит амперсанд).

Снимаем у этого параметра галку "Ограничение доступности", чтобы пользователь смог редактировать этот параметр самостоятельно:

Переходим на вкладку "Настройки" и нажимаем на волшебную палочку, чтобы вызвать конструктор настроек:

Выбираем тип отчета "Список...":

Выбираем поля, которые будут отображаться в отчете:

Переходим на вкладку "Настройки", выбираем пункт "Отчет", ниже выбираем вкладку "Параметры" и видим здесь наш параметр из вкладки "Параметры":

Ставим галку рядом с параметром "Минимальная численность" и указываем значение 1000000:

Сохраняем отчет и проверяем в режиме пользователя:

Отлично. В отчете присутствуют только города с численностью больше миллиона. Осталось только вынести значение параметра на форму, чтобы пользователь смог его редактировать.

Сделать это легко. Снова выделим параметр "Минимальная численность" и нажмём на зелёный плюсик справа от параметра:

В пользовательских настройках элемента поставим галку "Включать в пользовательские настройки":

Снова сохраним отчёт и откроем в режиме пользователя:

Отлично. Параметр стал доступен для редактирования пользователю.

Мы увидели, что при построении отчётов при помощи СКД некоторые возможности можно делать двумя способами: на уровне запроса или на уровне СКД.

И если нас заботит производительность - мы должны стараться всю обработку данных делать на стороне запросов (там где это, конечно, возможно и уместно).

Мы же в следующих уроках продолжим использовать для этих целей систему компоновки данных, так как целью этого модуля всё же является изучение СКД, а не запросов (их мы уже изучили в предыдущих модулях).

Эталонная обработка, после выполнения всех шагов этого урока

Для учеников

Прибегайте к изучению эталонного варианта только после самостоятельного выполнения всех шагов.

На вопросы учеников — отвечаю по почте,  но прежде загляните в ЧАВО (ссылка) .

С уважением, Владимир Милькин

[Alimir_BootModal_Login]