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

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

Конструктор запроса 1С: как пользоваться на практике

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

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

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

Где находится конструктор запроса и как его открыть

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

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

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

Выбор таблиц и полей: первый запрос

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

Перенесите таблицу в среднюю колонку двойным щелчком или кнопкой со стрелкой. После этого в правой части появится список её полей: реквизиты, стандартные поля (Ссылка, Код, Наименование и подобные). Отметьте галочками нужные поля — именно они попадут в секцию ВЫБРАТЬ запроса. Если нужны все поля, есть команда выбора всех, но в рабочих запросах этого лучше избегать: лишние поля замедляют выполнение и засоряют результат.

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

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

Связи между таблицами и объединения

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

Тип соединения выбирают осознанно. Внутреннее соединение вернёт только строки, для которых есть совпадения в обеих таблицах. Левое соединение вернёт все строки левой таблицы, даже если в правой совпадений нет — тогда поля правой таблицы будут пустыми. Правое и полное соединения встречаются реже. Ошибка в выборе типа соединения — одна из главных причин «пропавших» или «лишних» строк в отчёте.

Объединения (конструкция ОБЪЕДИНИТЬ) используют, когда нужно склеить результаты нескольких запросов с одинаковым набором полей — например, движения по двум разным регистрам. В конструкторе для этого есть отдельная закладка «Объединения/Псевдонимы», где добавляют дополнительный запрос и сопоставляют поля. Учтите, что ОБЪЕДИНИТЬ удаляет дубликаты строк, а ОБЪЕДИНИТЬ ВСЕ сохраняет их и работает быстрее.

Условия, параметры и произвольные выражения

Закладка «Условия» формирует секцию ГДЕ. Условие строится из поля, оператора сравнения и значения. Вместо конкретного значения почти всегда используют параметр — имя с амперсандом, например &НачалоПериода. Параметры потом заполняются в коде через метод УстановитьПараметр, что делает запрос универсальным и защищает от подстановки небезопасных значений.

Конструктор поддерживает типовые операторы: равенство, сравнения, В (список значений), МЕЖДУ, ПОДОБНО для строк, а также проверку на NULL. Условия можно группировать скобками и соединять логическими И и ИЛИ. При сложной логике внимательно проверяйте приоритет: без скобок И выполняется раньше ИЛИ, что меняет смысл отбора.

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

Типичные ошибки
01
Отбор по виртуальной таблице в секции ГДЕ вместо параметров виртуальной таблицы — запрос сначала выбирает все данные, а потом фильтрует, что резко замедляет выполнение
02
Использование левого соединения там, где достаточно внутреннего — в результат попадают строки с пустыми значениями и ломают итоги
03
Сравнение составного поля без учёта типов — условие молча не срабатывает, и строки теряются
04
Выбор всех полей таблицы — лишняя нагрузка и трудночитаемый результат
05
Забытый псевдоним у произвольного поля — к нему нельзя обратиться при обходе выборки

Группировки, итоги и порядок

Закладка «Группировка» отвечает за агрегирование: поля делятся на группировочные (по которым сворачиваются данные) и суммируемые (к которым применяются функции Сумма, Количество, Максимум, Минимум, Среднее). Типичный пример — остатки по складу: группировочное поле «Склад», суммируемое — «КоличествоОстаток» с функцией Сумма.

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

Упорядочивание настраивается на закладке «Порядок»: укажите поля и направление сортировки. Помните, что сортировка по полю, не входящему в выборку, требует включения этого поля в запрос. Для динамических списков порядок в запросе имеет ограниченный смысл — платформа может переопределять его настройками списка.

Получение готового текста и проверка результата

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

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

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

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

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

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

Совпадает с ожиданием по стандартному отчёту или ручной выборке

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

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

Суммы по числовым полям
Норма

Сходятся с эталонным отчётом за тот же период

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

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

Значения в полях
Норма

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

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

NULL в полях — причина в левом соединении без совпадений

Частые вопросы и ограничения конструктора

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

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

Итог

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

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

FAQ

Как открыть конструктор запроса, если текст запроса уже написан?

Поставьте курсор внутрь существующего текста запроса (между кавычками) и вызовите «Конструктор запроса» из контекстного меню. Платформа разберёт текст и откроет его в визуальном виде. Если текст содержит конструкции, которые конструктор не поддерживает, он предложит редактировать запрос вручную.

Чем конструктор запроса отличается от конструктора запроса с обработкой результата?

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

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

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

Как передать в запрос список значений или таблицу значений?

Создайте параметр, например &СписокСкладов, и используйте условие «Поле В (&СписокСкладов)». В коде передайте массив или список значений через УстановитьПараметр. Таблицу значений передают так же, но её сначала помещают во временную таблицу конструкцией ПОМЕСТИТЬ — это уже ручная доработка текста запроса.

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

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

Где безопасно отлаживать запросы на рабочей базе?

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