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