Разработка и Конфигурация · 11 мин
Что такое конструктор запроса в 1С и как с ним работать
Что такое конструктор запроса в 1С, как открыть и настроить его, выбрать таблицы, условия и группировки. Пошаговая инструкция, типичные ошибки и FAQ.
Конструктор запроса в 1С — это встроенный в конфигуратор визуальный инструмент, который позволяет создавать запросы к базе данных без ручного написания текста на языке запросов. Разработчик выбирает таблицы, поля, условия отбора и группировки в диалоговых окнах, а платформа автоматически формирует готовый текст запроса на языке 1С.
Инструмент доступен в любой типовой и самописной конфигурации на платформе 1С:Предприятие 8. Он одинаково полезен начинающим разработчикам, которые ещё не помнят синтаксис языка запросов, и опытным специалистам, которым нужно быстро собрать сложный запрос с соединениями нескольких таблиц без риска допустить синтаксическую ошибку.
Конструктор не заменяет понимания языка запросов: чтобы осознанно выбирать типы соединений, ставить условия и читать результат, базовые знания всё равно нужны. Но он существенно ускоряет работу и снижает количество ошибок, особенно при обращении к регистрам с виртуальными таблицами — остаткам, оборотам, срезам последних.
Что умеет конструктор запроса и когда его применять
Конструктор позволяет выполнить полный цикл построения запроса: выбрать источники данных (справочники, документы, регистры сведений и накопления), указать нужные поля, задать соединения таблиц, наложить условия отбора, настроить группировку и итоги, определить порядок сортировки, добавить объединения и параметры.
Типичные сценарии применения: написание запроса для отчёта на СКД, получение данных в модуле объекта или формы, заполнение движений документа по регистрам, выборка остатков или оборотов для анализа. Во всех этих случаях конструктор избавляет от необходимости помнить точные имена виртуальных таблиц и их параметров.
Важно понимать ограничение: конструктор строит только текст запроса. Обход результата, работу с выборкой, передачу параметров в коде и обработку данных разработчик пишет сам на встроенном языке. Конструктор отвечает только за часть «что выбрать», но не за часть «что с этим делать дальше».
Как открыть конструктор запроса
Существует несколько способов вызвать инструмент. Самый распространённый — в модуле (объекта, формы, общего модуля) поставить курсор в то место кода, где должен появиться текст запроса, нажать правую кнопку мыши и выбрать пункт «Конструктор запроса». Платформа предложит создать новый запрос или открыть существующий, если курсор стоит внутри уже написанного текста запроса.
Второй путь — через макет схемы компоновки данных: при создании отчёта на СКД в наборе данных типа «Запрос» есть кнопка «Конструктор запроса». Третий вариант — в макете типа «Текст запроса» при настройке движений документа через конструктор движений.
- 1Откройте конфигуратор и нужный модуль (например, модуль объекта документа)
- 2Поставьте курсор в место, где должен быть текст запроса
- 3Нажмите правую кнопку мыши и выберите «Конструктор запроса»
- 4Подтвердите создание нового запроса
- 5Выберите таблицы и поля на закладке «Таблицы и поля»
- 6Нажмите «ОК» — текст запроса появится в модуле
Если конструктор открывается для уже существующего текста, он попытается распарсить запрос. Запросы, написанные вручную с нестандартными конструкциями, иногда открываются в конструкторе с ошибкой — в этом случае текст придётся править вручную, и это нормальная ситуация, а не сбой платформы.
Основные закладки конструктора и что на них настраивается
Интерфейс конструктора разбит на несколько закладок, каждая из которых отвечает за свою часть итогового запроса. Разберём ключевые из них.
Таблицы и поля
Здесь выбираются источники данных. Слева отображается дерево объектов метаданных: справочники, документы, регистры, перечисления. Выбранные таблицы попадают в среднюю колонку, а из них в правую колонку перетаскиваются нужные поля. Для регистров накопления и сведений здесь же доступны виртуальные таблицы — например, «Остатки», «Обороты», «СрезПоследних».
При выборе виртуальной таблицы конструктор предложит задать её параметры: период, условия отбора по измерениям. Это критически важный момент — отбор на уровне параметров виртуальной таблицы работает значительно быстрее, чем фильтрация уже выбранных данных в условии ГДЕ.
Связи
На закладке «Связи» настраиваются соединения между таблицами: внутреннее, левое, правое, полное. По умолчанию конструктор предлагает левое соединение по ссылочным полям. Условие связи можно редактировать, добавляя произвольные выражения и дополнительные условия.
Условия, группировка, порядок и итоги
На закладке «Условия» формируется секция ГДЕ — отборы по значениям полей, параметрам, вложенным запросам. Закладка «Группировка» отвечает за свёртку данных и агрегатные функции (СУММА, КОЛИЧЕСТВО, МАКСИМУМ). «Порядок» задаёт сортировку результата, а «Итоги» — подведение итогов по группам с возможностью иерархии.
Пример: запрос остатков по складу через конструктор
Рассмотрим практическую задачу: получить остатки номенклатуры по конкретному складу на текущую дату. В конструкторе выбираем виртуальную таблицу регистра накопления «ТоварыНаСкладах.Остатки». В параметрах виртуальной таблицы указываем условие: Склад = &Склад. Из полей выбираем Номенклатура и КоличествоОстаток.
После нажатия «ОК» конструктор сформирует примерно такой текст:
ВЫБРАТЬ
ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ТоварыНаСкладахОстатки
В коде модуля останется создать объект Запрос, установить параметр и выполнить выборку:
Запрос = Новый Запрос;
Запрос.Текст = "..."; // сгенерированный текст
Запрос.УстановитьПараметр("Склад", Склад);
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
// обработка строки результата
КонецЦикла;
Признак правильно построенного запроса: он выполняется без ошибок, возвращает ожидаемое количество строк, а суммы совпадают с данными типового отчёта по остаткам. Если цифры расходятся — проверяйте период виртуальной таблицы и условия отбора.
Конструктор запроса vs ручное написание: что выбрать
Оба подхода дают одинаковый результат, разница — в скорости работы и контроле. Конструктор выигрывает, когда запрос сложный, с несколькими соединениями, вложенными запросами и итогами: он гарантирует корректный синтаксис и подсказывает имена полей. Ручное написание быстрее для простых выборок из одной таблицы и удобнее при точечной правке готового запроса.
Сравнение подходов
Подходит для сложных запросов с соединениями и итогами, для изучения структуры метаданных. Ограничение: медленнее при мелких правках, нестандартные конструкции может не распарсить.
Подходит для простых выборок и точечных исправлений. Требует знания синтаксиса и имён полей, выше риск опечаток.
Подходит для отчётов: запрос создаётся внутри схемы компоновки, а настройки отбора и группировки делает пользователь. Ограничение: только в рамках отчётов.
Практичная стратегия — комбинировать: каркас запроса собрать в конструкторе, а затем при необходимости доработать текст вручную. Так делают большинство разработчиков в повседневной работе.
Типичные ошибки при работе с конструктором
Отдельно стоит предупреждение о работе с реальной базой. Запрос на выборку сам по себе безопасен — он не меняет данные. Но если результат запроса используется для записи движений или изменения объектов, любая ошибка в условиях отбора приведёт к порче данных. Перед отладкой таких механизмов на рабочей базе сделайте копию или проверьте логику на тестовой.
Как проверить, что запрос работает правильно
После построения запроса его нужно проверить до внедрения в рабочий код. Самый простой способ — использовать консоль запросов (внешнюю обработку или встроенную в некоторые конфигурации) либо временно вывести результат в табличный документ из отладчика.
Как проверить результат
Совпадает с ожидаемым по смыслу задачи
Строк больше из-за дублирования при соединении или пустой результат
Сходятся с типовым отчётом по тому же регистру
Расхождения — проверить период и параметры виртуальной таблицы
Запрос отрабатывает за секунды на рабочем объёме данных
Выполняется минутами — перенести отборы в параметры виртуальных таблиц, проверить индексы
Нет неожиданных NULL в ключевых полях
NULL там, где данные обязаны быть — неверный тип соединения
Если запрос используется в отчёте на СКД, дополнительно проверьте его в режиме предприятия под учётной записью с ограниченными правами: механизм RLS может изменить результат, и это нужно учитывать при оценке корректности.
Полезная привычка: после генерации запроса конструктором сразу переименуйте поля через КАК в понятные имена. Когда запросов в модуле несколько, осмысленные псевдонимы полей экономят массу времени при чтении кода.
Частые вопросы о конструкторе запроса 1С
Можно ли пользоваться конструктором без знания языка запросов?
Частично. Конструктор сформирует синтаксически верный текст, но без понимания типов соединений, группировок и виртуальных таблиц легко получить неверный по смыслу результат — например, задвоенные строки или неправильные итоги. Базовые знания языка запросов нужны обязательно.
Почему конструктор не открывает мой запрос, написанный вручную?
Конструктор не поддерживает некоторые конструкции и нестандартное форматирование. Если текст содержит сложные выражения или особенности синтаксиса, конструктор сообщит о невозможности разбора. Такой запрос редактируется только вручную — это ограничение инструмента, а не ошибка в запросе.
Чем конструктор запроса отличается от конструктора СКД?
Конструктор запроса формирует только текст выборки данных. Конструктор схемы компоновки данных (СКД) — более широкий инструмент: он включает запрос как набор данных, но дополнительно настраивает отборы, группировки, поля и оформление отчёта, которые пользователь сможет менять без программирования.
Можно ли через конструктор изменить данные в базе?
Нет. Язык запросов 1С и его конструктор предназначены только для чтения данных. Изменение выполняется программно — через объекты (запись документов, наборы записей регистров) на встроенном языке.
Как протестировать запрос, не вставляя его в конфигурацию?
Используйте консоль запросов — внешнюю обработку, которая позволяет вставить текст запроса, задать параметры и посмотреть результат в режиме предприятия. Это стандартный способ отладки запросов без изменения конфигурации.
Почему запрос из конструктора работает медленно?
Чаще всего причина в том, что отборы заданы в секции ГДЕ вместо параметров виртуальных таблиц, либо в соединении таблиц по неиндексированным полям. Перенесите условия в параметры виртуальных таблиц и проверьте, по каким полям строятся соединения.
Что важно запомнить
Конструктор запроса 1С — визуальный инструмент конфигуратора, который генерирует текст запроса по выбранным таблицам, полям, условиям и итогам. Открывается из контекстного меню в модуле. Отборы по регистрам задавайте в параметрах виртуальных таблиц, результат проверяйте в консоли запросов, а тяжёлые запросы отлаживайте на копии базы.