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