К статье
Практический материал

Разработка и Конфигурация · 11 мин

Конструктор запросов в 1С: что это и как с ним работать

Что такое конструктор запросов в 1С, как открыть его в конфигураторе, собрать запрос без кода, настроить группировки и итоги, избежать типичных ошибок разработчика.

Конструктор запросов в 1С — это встроенный в конфигуратор визуальный инструмент, который позволяет собрать текст запроса на языке запросов 1С без ручного написания кода. Разработчик выбирает таблицы, поля, условия и группировки в диалоговых окнах, а платформа автоматически формирует корректный текст запроса с учётом синтаксиса и имён метаданных конкретной конфигурации.

Инструмент доступен в любой типовой и самописной конфигурации на платформе 1С:Предприятие 8. Его используют как начинающие разработчики, которые ещё не помнят синтаксис языка запросов, так и опытные специалисты — для ускорения работы и снижения числа ошибок в именах таблиц и полей. Особенно полезен конструктор при работе с виртуальными таблицами регистров, где легко перепутать параметры.

Важно понимать: конструктор не заменяет знания языка запросов, а ускоряет его написание. Полученный текст можно и часто нужно дорабатывать вручную — например, оптимизировать соединения или добавлять конструкции, которые конструктор формирует не самым удачным образом.

Где находится конструктор запросов и как его открыть

Конструктор запросов встроен в конфигуратор и вызывается несколькими способами. Самый частый — из модуля: поставьте курсор в то место кода, где нужен запрос, нажмите правую кнопку мыши и выберите пункт «Конструктор запроса». Если курсор стоит внутри уже существующего текста запроса (между кавычками), конструктор откроет его для редактирования; если в пустом месте — предложит создать новый.

Второй путь — через схему компоновки данных: при создании отчёта на СКД на закладке «Набор данных» есть кнопка «Конструктор запроса». Третий вариант — в консоли запросов (внешней обработке), которую используют для отладки: там конструктор помогает быстро набросать текст и тут же проверить результат на реальных данных.

Из каких вкладок состоит конструктор

Диалог конструктора разбит на закладки, каждая из которых отвечает за свою секцию запроса. На первой закладке «Таблицы и поля» вы выбираете источники данных из дерева метаданных (справочники, документы, регистры сведений и накопления, включая их виртуальные таблицы) и перетаскиваете или двойным щелчком переносите нужные поля в список выборки.

Дальнейшие закладки соответствуют структуре запроса: «Связи» — настройка соединений таблиц (левое, внутреннее и другие), «Условия» — отборы (секция ГДЕ), «Объединения/Псевдонимы» — объединение нескольких запросов и переименование полей, «Порядок» — сортировка результата, «Итоги» — группировки, агрегатные функции и итоги по группам, «Построитель» и «Компоновка данных» — дополнительные настройки для отчётов.

Внизу каждой закладки есть кнопка «Запрос» или «Показать запрос», которая отображает текущий текст в том виде, в каком его сгенерирует платформа. Полезно периодически смотреть этот текст — так вы параллельно учите синтаксис и контролируете, что конструктор понял ваши действия правильно.

Как собрать простой запрос по шагам

Разберём типовую задачу: получить список товаров из справочника «Номенклатура» с отбором по признаку «не помечен на удаление» и сортировкой по наименованию. Эта последовательность одинаково работает в любой конфигурации, отличаются только имена объектов.

Порядок действий
  1. 1
    Откройте модуль, поставьте курсор в нужное место и вызовите «Конструктор запроса» из контекстного меню.
  2. 2
    На закладке «Таблицы и поля» найдите в дереве справочник «Номенклатура» и перенесите его в список таблиц.
  3. 3
    Раскройте таблицу и перенесите в поля: Ссылка, Код, Наименование.
  4. 4
    На закладке «Условия» добавьте условие: ПометкаУдаления = ЛОЖЬ (или &ПометкаУдаления с параметром).
  5. 5
    На закладке «Порядок» добавьте сортировку по полю Наименование по возрастанию.
  6. 6
    Нажмите «ОК» — конструктор вставит готовый текст запроса в модуль.
  7. 7
    Допишите код: создание объекта Запрос, установку параметров и выполнение (Выбрать или Выгрузить).

После нажатия «ОК» конструктор вставляет только текст запроса в виде строкового литерала. Сам программный код — создание объекта Запрос, присвоение текста, установка параметров через УстановитьПараметр() и вызов Выполнить() — нужно написать вручную или воспользоваться вставкой с созданием обрамляющего кода, если она предлагается.

bsl
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ПометкаУдаления
|УПОРЯДОЧИТЬ ПО
| Наименование";
Результат = Запрос.Выполнить().Выгрузить();

Работа с виртуальными таблицами и параметрами

Одна из главных ценностей конструктора — корректная работа с виртуальными таблицами регистров: Остатки, Обороты, СрезПоследних, СрезПервых. При выборе такой таблицы конструктор открывает диалог «Параметры виртуальной таблицы», где задаются период, условия отбора по измерениям и другие настройки. Вручную эти параметры часто указывают с ошибками — конструктор подставляет их в правильном синтаксисе.

Ключевое правило: отборы по виртуальным таблицам задавайте в их параметрах, а не в секции ГДЕ. Например, условие по складу в таблице «Остатки» правильно передать как параметр виртуальной таблицы — тогда платформа отберёт данные до вычисления остатков, а не после. Это существенно влияет на скорость выполнения запроса на больших базах.

Параметры запроса в конструкторе обозначаются символом «&» — например, &НачалоПериода. При редактировании условия просто введите имя параметра в правую часть сравнения. Не забудьте потом установить значение каждого параметра в коде: пропущенный параметр — одна из самых частых причин ошибки выполнения запроса.

Группировки, итоги и соединения таблиц

На закладке «Итоги» конструктор позволяет настроить группировку: перенесите поля-измерения в «Группировочные поля», а числовые поля — в «Суммируемые поля», выбрав агрегатную функцию (Сумма, Количество, Максимум, Среднее). Конструктор сам сформирует секцию СГРУППИРОВАНО ПО и, при необходимости, предложение ИТОГИ ПО для получения иерархических итогов.

Соединения настраиваются на закладке «Связи»: конструктор часто предлагает связь автоматически по одноимённым полям, но её нужно проверить. Убедитесь, что выбран правильный тип соединения — для справочных данных чаще нужно левое соединение (все записи основной таблицы плюс совпавшие данные присоединяемой), а внутреннее соединение отсечёт записи без пары, что может исказить результат.

Типичные ошибки
01
Отбор по виртуальной таблице в секции ГДЕ вместо параметров — запрос работает, но медленно сканирует весь регистр.
02
Внутреннее соединение вместо левого — из результата пропадают записи, у которых нет пары во второй таблице.
03
Забытый параметр в коде — ошибка «Переменная не определена» или пустой результат без видимой причины.
04
Соединение по неуникальному полю — строки дублируются, суммы в отчёте завышаются.
05
Выборка всех полей таблицы «на всякий случай» — лишняя нагрузка на СУБД и сеть.

Когда конструктор не нужен: альтернативы и ограничения

Конструктор не единственный способ получить данные. Для простых выборок по одному объекту иногда быстрее использовать методы встроенного языка: НайтиПоКоду(), НайтиПоНаименованию(), ПолучитьСсылку(). Для отчётов чаще применяют схему компоновки данных, где запрос — лишь источник, а группировки и отборы настраиваются в настройках СКД.

Есть и ограничения самого конструктора. Он не всегда оптимально расставляет соединения и вложенные запросы, а некоторые конструкции (например, хитрые объединения с разными наборами полей) проще написать руками. Опытные разработчики часто используют гибридный подход: каркас запроса собирают в консоли запросов с конструктором, затем дорабатывают текст вручную.

Сравнение вариантов

Конструктор запросов

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

Ручное написание

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

Консоль запросов

Лучший вариант для отладки: текст плюс немедленный просмотр результата на реальных данных. Требует установки внешней обработки.

Схема компоновки данных

Для отчётов с гибкими пользовательскими настройками. Избыточна для простых служебных выборок в коде.

Как проверить, что запрос работает правильно

После сборки запроса проверьте его до внедрения в рабочий код. Самый надёжный способ — консоль запросов: вставьте текст, задайте параметры, выполните и посмотрите результат глазами. Сверьте количество строк и контрольные суммы с данными, которые можно получить штатными отчётами конфигурации.

Контрольные точки

Как проверить результат

Количество строк результата
Норма

Совпадает с ожиданием или штатным отчётом за тот же период

Тревожный признак

Строк больше из-за дублей соединения или меньше из-за внутреннего соединения

Суммы по числовым полям
Норма

Сходятся с контрольным отчётом (например, оборотно-сальдовой ведомостью)

Тревожный признак

Суммы завышены кратно — признак декартова произведения при связи

Время выполнения
Норма

Запрос выполняется за секунды на рабочем объёме данных

Тревожный признак

Выполняется минутами — проверьте параметры виртуальных таблиц и индексы

Параметры
Норма

Все параметры установлены в коде до вызова Выполнить()

Тревожный признак

Ошибка выполнения или неожиданно пустой результат

Частые вопросы о конструкторе запросов

Можно ли пользоваться конструктором без знания языка запросов?

Да, для простых выборок конструктор сформирует рабочий текст даже без знания синтаксиса. Но для отладки, оптимизации и понимания результата базовое знание языка запросов необходимо — конструктор лишь ускоряет написание, а не заменяет понимание.

Почему конструктор не открывается в тонком клиенте?

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

Как отредактировать существующий запрос через конструктор?

Поставьте курсор внутрь строкового литерала с текстом запроса в модуле и вызовите «Конструктор запроса» из контекстного меню. Если текст синтаксически корректен, конструктор распарсит его и откроет для визуального редактирования. Запросы с нестандартными конструкциями могут не открыться — тогда их правят вручную.

Что делать, если запрос в конструкторе собран верно, но возвращает пустой результат?

Проверьте три вещи: установлены ли все параметры в коде, не слишком ли жёсткие условия отбора (например, неверный период), и не отсекает ли внутреннее соединение все строки. Выполните запрос в консоли по шагам, убирая условия по одному, чтобы найти то, которое обнуляет выборку.

Формирует ли конструктор оптимальный по скорости запрос?

Нет, конструктор гарантирует синтаксическую корректность, но не производительность. Оптимизация — задача разработчика: перенос отборов в параметры виртуальных таблиц, выбор только нужных полей, правильные типы соединений и проверка плана запроса на больших объёмах данных.

Можно ли использовать конструктор для запросов в схеме компоновки данных?

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

Итог

Что важно запомнить

Конструктор запросов — визуальный инструмент конфигуратора, который собирает синтаксически корректный текст запроса по выбранным таблицам, полям, условиям и итогам. Используйте его для ускорения разработки и работы с виртуальными таблицами, но проверяйте результат в консоли запросов и помните: оптимизация и установка параметров в коде остаются на разработчике.