Разработка и Конфигурация · 12 мин
Конструктор запросов 1С: для чего нужен и как с ним работать
Зачем нужен конструктор запросов в 1С, как открыть и собрать запрос без кода, типовые задачи, ограничения и частые ошибки новичков.
Конструктор запросов в 1С — это визуальный инструмент, который позволяет собрать запрос к базе данных без ручного написания текста на встроенном языке запросов. Он встроен в конфигуратор и доступен в любом месте, где платформа ожидает текст запроса: в отчётах, динамических списках, обработках, модулях объектов. Вы выбираете таблицы, поля, условия и связи мышью, а конструктор сам формирует корректный синтаксис.
Главная ценность инструмента — снижение порога входа и количества ошибок. Язык запросов 1С похож на SQL, но имеет свои особенности: виртуальные таблицы регистров, иерархические справочники, разделители пакетных запросов. Новичок легко ошибается в именах полей или забывает параметры виртуальной таблицы. Конструктор показывает только существующие объекты метаданных и подсказывает допустимые варианты, поэтому синтаксически неверный запрос собрать практически невозможно.
При этом конструктор — не замена пониманию языка запросов, а ускоритель. Опытные разработчики используют его как стартовую точку: быстро собирают каркас запроса, а затем дорабатывают текст вручную, добавляя конструкции, которые визуальный редактор не поддерживает или реализует неудобно.
Какие задачи решает конструктор запросов
Инструмент применяется везде, где нужно получить или изменить выборку данных. Типовые сценарии: построение отчёта через систему компоновки данных, настройка динамического списка в форме, выборка данных в обработке для последующей обработки, заполнение табличной части документа по остаткам или оборотам.
Конструктор закрывает полный цикл формирования запроса:
- выбор таблиц-источников: справочники, документы, регистры сведений и накопления, их виртуальные таблицы;
- выбор полей с возможностью переименования (псевдонимов) и применения агрегатных функций;
- настройка связей между таблицами (левое, внутреннее соединение и др.);
- условия отбора, в том числе с параметрами;
- группировка, сортировка, итоги, ограничение количества записей;
- объединение нескольких запросов и пакетные запросы с временными таблицами.
Отдельный плюс — работа с виртуальными таблицами. Например, для таблицы «Остатки» регистра накопления конструктор показывает параметры (период, условие) и предупреждает, если они заданы неоптимально. Это помогает избежать типичной ошибки — отбора по виртуальной таблице через секцию «ГДЕ» вместо параметров, что замедляет выполнение.
Как открыть конструктор и собрать первый запрос
Конструктор вызывается из конфигуратора. Самый частый путь — кнопка «Конструктор запроса» в свойствах набора данных отчёта на СКД или в поле текста запроса динамического списка. Также можно поставить курсор в модуль, нажать правую кнопку мыши и выбрать «Конструктор запроса» — тогда готовый текст будет вставлен прямо в код.
После нажатия «ОК» конструктор формирует текст, который можно сразу выполнить или доработать. Если запрос уже существовал в этом поле, конструктор откроется с его текущей структурой — удобно для правки готовых запросов без риска сломать синтаксис.
Полезная деталь: на закладке «Таблицы и поля» есть кнопка «Заполнить» и переключатель группировки объектов. Если метаданных много, быстрее найти таблицу через строку поиска в дереве базы данных, чем прокручивать список вручную.
Ключевые закладки конструктора и что на них настраивается
Окно конструктора разбито на закладки, каждая отвечает за свою часть запроса. Понимание их назначения избавляет от путаницы, почему «поле есть, а в результате его нет».
| Закладка | Что настраивается | Типичная ошибка |
|---|---|---|
| Таблицы и поля | Источники данных и выбираемые поля | Выбраны не все нужные поля — их придётся добавлять заново |
| Связи | Типы соединений и условия связи таблиц | Все связи — левые соединения, хотя нужны внутренние: лишние пустые строки |
| Условия | Отборы (ГДЕ), условия по агрегатам (ИМЕЮЩИЕ) | Жёстко прописанные значения вместо параметров |
| Объединения/Псевдонимы | ОБЪЕДИНИТЬ, переименование полей результата | Разный состав полей в объединяемых запросах |
| Порядок | Сортировка результата | Сортировка по полю, которого нет в выборке |
| Итоги | Группировки и итоговые функции | Итоги включены там, где нужен плоский список, — замедление |
Обратите внимание на закладку «Дополнительно»: там включаются опции «Первые N записей», «Различные» (без дублей), «Разрешённые» (с учётом прав доступа) и «Для изменения». Эти настройки сильно влияют на результат и производительность, но новички их часто игнорируют.
Конструктор в отчётах на СКД и динамических списках
Запрос для системы компоновки данных
В отчётах на СКД конструктор запроса — стандартная точка входа: именно его текст становится источником данных набора. Здесь важно не смешивать роли: запрос должен выбрать данные максимально полно, а отборы, группировки и оформление пользователь настраивает уже средствами СКД. Если зашить отбор жёстко в запрос, пользователь отчёта не сможет его изменить в режиме предприятия.
Для СКД также имеет смысл использовать конструктор вместе с расширением языка запросов: фигурные скобки с условиями, которые СКД подставит динамически. Конструктор запросов их не редактирует напрямую — эти конструкции добавляют через «Конструктор настроек» или вручную после формирования базового текста.
Запрос динамического списка
В динамических списках форм конструктор помогает заменить стандартную выборку на произвольную: например, показать документы вместе с текущими остатками по связанному регистру. Ограничение: у произвольного запроса динамического списка должна быть ключевая колонка (обычно ссылка), иначе список не сможет корректно позиционироваться и обновляться.
Ограничения конструктора и когда текст лучше писать вручную
Конструктор покрывает большинство повседневных задач, но не весь синтаксис языка запросов. Сложные конструкции — вложенные запросы с хитрой логикой, специфические операторы, тонкая настройка пакетных запросов — иногда удобнее и надёжнее писать руками. Кроме того, конструктор может «не понять» вручную написанный запрос: при открытии он предупредит, что текст не может быть отредактирован визуально.
Ещё одна граница — производительность. Конструктор формирует синтаксически правильный, но не обязательно оптимальный запрос. Он не подскажет, что соединение идёт по неиндексированному полю или что условие лучше перенести в параметры виртуальной таблицы. Эти вопросы решаются анализом плана запроса и пониманием структуры данных, а не визуальным редактором.
Конструктор или ручной текст
Подходит для типовых выборок, обучения, быстрого прототипа и правки чужих запросов. Ограничение: не весь синтаксис поддерживается визуально.
Подходит для сложной логики, пакетных запросов и тонкой оптимизации. Требует знания языка запросов и аккуратности с синтаксисом.
Оптимальный режим для практики: каркас собирается визуально, специфические части дописываются в тексте.
Типичные ошибки при работе с конструктором
Большинство проблем возникает не из-за самого инструмента, а из-за непонимания, что именно было настроено на его закладках. Запрос выполняется, но возвращает не те данные — и разработчик ищет ошибку не там.
Отдельно стоит сказать про параметры. Всегда используйте параметры (&Имя) вместо конкатенации значений в текст запроса. Это не только удобнее, но и защищает от ошибок с типами данных и от потенциальной подстановки вредоносного текста, если значение приходит извне.
Как проверить результат
Количество строк совпадает с ожидаемым по тестовым данным, нет дублей
Строки задваиваются или пропадают — проверяйте соединения и опцию «Различные»
Суммы сходятся с данными, видимыми в стандартных отчётах конфигурации
Расхождения — проверяйте параметры виртуальных таблиц и период
Запрос отрабатывает за приемлемое время на реальном объёме данных
Заметная задержка — переносите условия в параметры виртуальных таблиц, проверяйте индексы
Как проверить и отладить собранный запрос
Простейшая проверка — выполнить запрос на тестовых данных и сравнить результат с ожиданием. В конфигураторе для этого удобно использовать консоль запросов (внешнюю обработку) или временный отчёт на СКД: вставляете текст, задаёте параметры, смотрите выборку. Это быстрее, чем запускать полноценный отчёт или форму.
Для диагностики производительности используйте технологический журнал и замеры производительности: они покажут, сколько времени занял запрос и какие операции доминируют. Если запрос медленный, первым делом смотрите на виртуальные таблицы и соединения — именно там чаще всего скрывается проблема.
Удобный приём: соберите запрос в конструкторе, скопируйте текст в консоль запросов и прогоните его на копии рабочей базы с реальными параметрами. Так вы увидите и состав данных, и время выполнения до того, как запрос попадёт в отчёт или форму.
Проверять результат стоит минимум на трёх сценариях: пустая выборка (нет данных под условия), одна строка и массовая выборка. Ошибки соединений и группировок чаще всего всплывают именно на краевых случаях, а не на «средних» данных.
Что важно запомнить
Конструктор запросов 1С — визуальный сборщик текста запроса: он ускоряет разработку и защищает от синтаксических ошибок, но не заменяет понимания языка запросов. Используйте параметры вместо жёстких значений, настраивайте виртуальные таблицы через их параметры, проверяйте результат на тестовой базе, а сложную логику дорабатывайте вручную.
Частые вопросы
Можно ли пользоваться конструктором запросов без знания языка запросов?
Для простых выборок — да: конструктор сам сформирует корректный текст. Но для понимания результата, отладки и оптимизации базовое знание языка запросов всё равно потребуется. Конструктор стоит воспринимать как помощника в обучении: полезно сравнивать свои действия в окне конструктора с итоговым текстом.
Почему конструктор отказывается открывать мой запрос?
Значит, в тексте есть конструкции, которые визуальный редактор не поддерживает, либо запрос содержит синтаксическую ошибку. Платформа покажет соответствующее предупреждение. Выход — редактировать такой запрос вручную или пересобрать его в конструкторе заново, упрощая спорные фрагменты.
Где взять консоль запросов для проверки результата?
Консоль запросов — это внешняя обработка, она не входит в типовую поставку платформы. Подобные обработки распространяются в составе инструментов разработчика и на профильных ресурсах. Перед использованием в рабочей базе убедитесь, что обработка получена из доверенного источника и проверена вашим администратором.
Чем конструктор запросов отличается от конструктора настроек СКД?
Конструктор запросов формирует текст выборки данных — что и откуда выбрать. Конструктор настроек СКД определяет, как эти данные будут сгруппированы, отфильтрованы и оформлены в отчёте. Это разные слои: сначала запрос, затем настройки компоновки поверх него.
Нужно ли использовать конструктор, если я уже хорошо знаю язык запросов?
Это вопрос скорости, а не обязанности. Многие разработчики собирают в конструкторе каркас с таблицами и связями — это быстрее, чем набирать имена полей вручную и без риска опечаток, — а затем дописывают специфические части текстом. Для простых запросов ручной ввод может быть быстрее.
Почему запрос, собранный в конструкторе, работает медленно?
Конструктор гарантирует синтаксическую правильность, но не оптимальность. Частые причины медленной работы: условия наложены на результат виртуальной таблицы вместо её параметров, соединения по неиндексированным полям, выбрано слишком много полей, включены ненужные итоги. Диагностируйте такие запросы замерами производительности и анализом плана выполнения.