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