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