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

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

Что такое конструктор запроса в 1С и как с ним работать

Что такое конструктор запроса в 1С, как открыть и настроить его, выбрать таблицы, условия и группировки. Пошаговая инструкция, типичные ошибки и FAQ.

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

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

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

Что умеет конструктор запроса и когда его применять

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

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

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

Как открыть конструктор запроса

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

Второй путь — через макет схемы компоновки данных: при создании отчёта на СКД в наборе данных типа «Запрос» есть кнопка «Конструктор запроса». Третий вариант — в макете типа «Текст запроса» при настройке движений документа через конструктор движений.

Как открыть и создать запрос
  1. 1
    Откройте конфигуратор и нужный модуль (например, модуль объекта документа)
  2. 2
    Поставьте курсор в место, где должен быть текст запроса
  3. 3
    Нажмите правую кнопку мыши и выберите «Конструктор запроса»
  4. 4
    Подтвердите создание нового запроса
  5. 5
    Выберите таблицы и поля на закладке «Таблицы и поля»
  6. 6
    Нажмите «ОК» — текст запроса появится в модуле

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

Основные закладки конструктора и что на них настраивается

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

Таблицы и поля

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

При выборе виртуальной таблицы конструктор предложит задать её параметры: период, условия отбора по измерениям. Это критически важный момент — отбор на уровне параметров виртуальной таблицы работает значительно быстрее, чем фильтрация уже выбранных данных в условии ГДЕ.

Связи

На закладке «Связи» настраиваются соединения между таблицами: внутреннее, левое, правое, полное. По умолчанию конструктор предлагает левое соединение по ссылочным полям. Условие связи можно редактировать, добавляя произвольные выражения и дополнительные условия.

Условия, группировка, порядок и итоги

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

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

Рассмотрим практическую задачу: получить остатки номенклатуры по конкретному складу на текущую дату. В конструкторе выбираем виртуальную таблицу регистра накопления «ТоварыНаСкладах.Остатки». В параметрах виртуальной таблицы указываем условие: Склад = &Склад. Из полей выбираем Номенклатура и КоличествоОстаток.

После нажатия «ОК» конструктор сформирует примерно такой текст:

ВЫБРАТЬ

ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,

ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток

ИЗ

РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ТоварыНаСкладахОстатки

В коде модуля останется создать объект Запрос, установить параметр и выполнить выборку:

Запрос = Новый Запрос;

Запрос.Текст = "..."; // сгенерированный текст

Запрос.УстановитьПараметр("Склад", Склад);

Результат = Запрос.Выполнить().Выбрать();

Пока Результат.Следующий() Цикл

// обработка строки результата

КонецЦикла;

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

Конструктор запроса vs ручное написание: что выбрать

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

Сравнение подходов

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

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

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

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

Конструктор СКД

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

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

Типичные ошибки при работе с конструктором

Типичные ошибки
01
Отбор по складу или организации в секции ГДЕ вместо параметров виртуальной таблицы — запрос читает весь регистр и работает медленно
02
Левое соединение там, где нужно внутреннее — в результате появляются строки с NULL, которые ломают дальнейшие расчёты
03
Забытый параметр в коде: текст запроса содержит &Параметр, но УстановитьПараметр не вызван — запрос падает с ошибкой при выполнении
04
Группировка не по всем неагрегатным полям — платформа выдаёт ошибку ещё на этапе проверки запроса
05
Получение остатков без указания периода — виртуальная таблица строится на границу актуальности итогов, что не всегда соответствует ожиданиям

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

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

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

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

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

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

Совпадает с ожидаемым по смыслу задачи

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

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

Суммы и остатки
Норма

Сходятся с типовым отчётом по тому же регистру

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

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

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

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

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

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

Значения соединённых полей
Норма

Нет неожиданных NULL в ключевых полях

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

NULL там, где данные обязаны быть — неверный тип соединения

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

Полезная привычка: после генерации запроса конструктором сразу переименуйте поля через КАК в понятные имена. Когда запросов в модуле несколько, осмысленные псевдонимы полей экономят массу времени при чтении кода.
ПЗ
Практическое замечание

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

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

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

Почему конструктор не открывает мой запрос, написанный вручную?

Конструктор не поддерживает некоторые конструкции и нестандартное форматирование. Если текст содержит сложные выражения или особенности синтаксиса, конструктор сообщит о невозможности разбора. Такой запрос редактируется только вручную — это ограничение инструмента, а не ошибка в запросе.

Чем конструктор запроса отличается от конструктора СКД?

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

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

Нет. Язык запросов 1С и его конструктор предназначены только для чтения данных. Изменение выполняется программно — через объекты (запись документов, наборы записей регистров) на встроенном языке.

Как протестировать запрос, не вставляя его в конфигурацию?

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

Почему запрос из конструктора работает медленно?

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

Итог

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

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