Разработка и Конфигурация · 13 мин
Как выполнить запрос в конфигураторе 1С
Как выполнить запрос в конфигураторе 1С: конструктор запроса, консоль запросов, проверка кода через отладку, типовые ошибки и способы проверить результат запроса.
Выполнить запрос в конфигураторе 1С можно несколькими способами: через конструктор запроса при написании кода, через внешнюю обработку «Консоль запросов» в режиме предприятия и через отладку с вычислением выражений. Каждый способ решает свою задачу: конструктор помогает правильно составить текст запроса, консоль — проверить его на реальных данных, отладка — увидеть результат в момент выполнения прикладного кода.
Важно понимать, что сам конфигуратор не исполняет запросы к данным напрямую: он работает с метаданными и кодом. Результат запроса всегда получается в режиме 1С:Предприятие — либо при выполнении модуля, либо через специальные инструменты разработчика. Поэтому рабочая схема выглядит так: текст запроса пишется и проверяется синтаксически в конфигураторе, а фактическое выполнение и просмотр выборки происходят в пользовательском режиме.
Ниже разобраны практические сценарии: как составить запрос конструктором, как выполнить его через консоль, как проверить результат в отладчике и какие ошибки встречаются чаще всего.
Как устроен запрос в 1С и где он выполняется
Запрос в 1С — это объект встроенного языка, который обращается к таблицам информационной базы: справочникам, документам, регистрам сведений и накопления. Текст запроса пишется на языке запросов, похожем на SQL, но оперирующем именами объектов метаданных, а не физических таблиц СУБД.
Типовой код выполнения запроса состоит из четырёх шагов: создание объекта Запрос, присвоение текста, установка параметров, вызов метода Выполнить() и получение выборки или таблицы значений:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Родитель = &Группа";
Запрос.УстановитьПараметр("Группа", ГруппаНоменклатуры);
Результат = Запрос.Выполнить().Выгрузить();
Конфигуратор проверяет только синтаксис модуля — он не знает, вернёт ли запрос строки. Фактическое обращение к базе происходит в режиме предприятия, поэтому любую отладку запроса по данным нужно проводить там.
Составление запроса через конструктор в конфигураторе
Конструктор запроса — основной инструмент конфигуратора для работы с текстом запроса. Чтобы открыть его, установите курсор внутрь строковой константы с текстом запроса в модуле, нажмите правую кнопку мыши и выберите «Конструктор запроса». Если текст пустой, конструктор предложит создать запрос с нуля.
В конструкторе доступны вкладки: «Таблицы и поля», «Связи», «Группировка», «Условия», «Дополнительно», «Объединения/Псевдонимы» и «Порядок». На первой вкладке из дерева метаданных перетаскиваются нужные таблицы и поля, на вкладке «Условия» задаются отборы, в том числе через параметры вида &ИмяПараметра.
Для сложных запросов полезна кнопка «Запрос» внутри конструктора — она открывает текст с подсветкой и позволяет проверить синтаксис языка запросов, не выходя из конструктора. После нажатия «ОК» текст автоматически вставляется в модуль с корректным форматированием переносов строк.
- 1Откройте модуль и установите курсор в строку с текстом запроса
- 2Нажмите правую кнопку мыши и выберите «Конструктор запроса»
- 3На вкладке «Таблицы и поля» выберите источник данных и нужные поля
- 4На вкладке «Условия» задайте отборы с параметрами через &
- 5Нажмите «ОК» и проверьте, что текст корректно вставился в модуль
- 6Сохраните конфигурацию и проверьте синтаксис модуля (Ctrl+F7)
Выполнение запроса через консоль запросов
Консоль запросов — самый быстрый способ проверить запрос на реальных данных без изменения кода конфигурации. Обработка входит в состав типовых инструментов разработчика, а также доступна в библиотеке стандартных подсистем и на диске ИТС. Запускается она в режиме 1С:Предприятие через меню «Файл → Открыть».
Порядок работы простой: вставьте текст запроса в верхнее поле, на закладке параметров заполните значения (тип параметра важен — для ссылок нужно выбрать конкретный тип, а не строку), затем нажмите кнопку выполнения. Результат появится в виде таблицы, где видны все выбранные поля и количество строк.
Консоль особенно полезна для проверки временных таблиц и пакетных запросов: многие версии обработки показывают результат каждого пакета отдельно и позволяют смотреть содержимое временных таблиц. Это ускоряет отладку сложных отчётов, где итоговая выборка собирается из нескольких промежуточных.
Проверка запроса через отладку
Отладчик конфигуратора позволяет увидеть результат запроса в момент выполнения прикладного кода. Установите точку останова на строке после Запрос.Выполнить(), запустите отладку (F5) и дождитесь остановки. Дальше есть два рабочих приёма.
Первый — табло (Shift+F9): вычислите выражение Запрос.Выполнить().Выгрузить() и откройте полученную таблицу значений кнопкой просмотра (F2 или лупа). Таблицу можно пролистать и убедиться, что поля и строки соответствуют ожиданиям. Второй приём — вычислить Результат.Пустой(), чтобы быстро понять, вернул ли запрос хотя бы одну строку.
Если запрос выполняется долго, в отладчике удобно проверять его по частям: временно закомментировать условия или заменить пакетный запрос на одиночный. Также через табло можно вычислить сам текст запроса после подстановки параметров — это помогает убедиться, что условия сформированы именно так, как задумано.
// Вычислить в табло (Shift+F9) на точке останова:
Запрос.Выполнить().Выгрузить() // таблица результата, F2 для просмотра
Запрос.Выполнить().Пустой() // Истина, если строк нет
Запрос.Текст // фактический текст запросаТиповые ошибки при выполнении запросов
Большинство проблем при выполнении запросов делится на три группы: ошибки синтаксиса языка запросов, ошибки типов параметров и логические ошибки в соединениях и условиях. Первая группа выявляется сразу — платформа выдаёт сообщение вида «Ошибка при выполнении запроса» с указанием позиции. Вторая и третья коварнее: запрос выполняется, но возвращает пустой или завышенный результат.
Завышенное количество строк почти всегда означает проблему соединения: либо не задано условие связи таблиц, либо связь идёт по полю, не уникальному в одной из таблиц. Проверяйте результат сравнением количества строк до и после добавления соединения — если число выросло, связь дублирует данные.
Отдельный источник ошибок — обращение к табличным частям и виртуальным таблицам регистров. Для виртуальных таблиц (Остатки, Обороты, СрезПоследних) параметры задаются в круглых скобках после имени таблицы, и их пропуск или неверный порядок приводит к ошибке выполнения, которая видна только в режиме предприятия.
Безопасная работа с запросами на рабочей базе
Запросы на чтение не изменяют данные, но тяжёлый запрос на большой рабочей базе может надолго заблокировать таблицы и затормозить работу пользователей. Особенно это касается запросов без отборов по регистрам накопления и соединений нескольких крупных таблиц.
Перед выполнением нового запроса на продуктивной базе проверьте его на копии или ограничьте выборку: добавьте ВЫБРАТЬ ПЕРВЫЕ 100 и условие по периоду. Если запрос используется в коде, который меняет данные (например, выборка документов для обработки), сначала выполните его в консоли и убедитесь, что в выборку попали именно те объекты.
Для экспериментов с изменением данных всегда делайте резервную копию или выгрузку информационной базы через конфигуратор (Администрирование → Выгрузить информационную базу). Восстановление из выгрузки — единственный гарантированный способ откатить последствия ошибочной пакетной обработки.
Выбор инструмента под задачу
Разные способы выполнения запроса подходят для разных этапов работы. Конструктор незаменим при написании нового запроса, консоль — при исследовании данных и проверке гипотез, отладчик — при поиске причин ошибок в готовом коде. Опытные разработчики комбинируют все три: текст рождается в конструкторе, шлифуется в консоли, финально проверяется в отладке в реальном контексте выполнения.
Сравнение способов выполнения запроса
Подходит для написания и правки текста запроса. Не показывает данные, проверяет только синтаксис языка запросов.
Подходит для проверки запроса на реальных данных без изменения кода. Требует запуска в режиме предприятия и прав на чтение данных.
Подходит для анализа запроса в контексте выполняющегося кода, включая динамически формируемые тексты. Требует настройки отладки и точки останова.
Если запрос формируется динамически (текст собирается строковой конкатенацией в зависимости от условий), консоль не поможет напрямую — сначала нужно в отладчике получить итоговый текст через Запрос.Текст, скопировать его и уже затем анализировать в консоли.
Как выбрать способ
Как убедиться, что запрос работает правильно
Проверка результата запроса — не формальность, а обязательный этап. Минимальный набор действий: убедиться, что запрос вообще вернул строки, что количество строк соответствует ожиданию, и что значения ключевых полей корректны. Для запросов с группировкой дополнительно сверьте итоги с данными, полученными другим способом — например, через стандартный отчёт.
Полезный приём — контрольный пример: выберите в базе один конкретный объект (документ, элемент справочника), для которого вы точно знаете, что должен показать запрос, и проверьте, что он присутствует в выборке с правильными значениями. Это быстрее и надёжнее, чем просмотр всей таблицы.
Как проверить результат запроса
Совпадает с ожидаемым числом объектов или объяснимо отборами
Строк сильно больше или меньше ожидаемого — проверяйте соединения и условия
Поля содержат реальные ссылки, открываются двойным кликом
Поля пустые или содержат NULL — проблема в соединении или отборе
Суммы сходятся с данными стандартного отчёта
Расхождения — проверяйте дублирование строк и параметры виртуальных таблиц
Запрос выполняется за приемлемое время на реальном объёме
Заметная задержка — добавьте индексируемые отборы и ограничьте период
Частые вопросы о выполнении запросов в 1С
Можно ли выполнить запрос прямо в конфигураторе, не запуская предприятие?
Нет. Конфигуратор работает с метаданными и кодом, но не имеет доступа к данным информационной базы. Выполнение запроса возможно только в режиме 1С:Предприятие — вручную через консоль запросов или автоматически при выполнении кода под отладкой.
Запрос возвращает пустой результат, хотя данные в базе есть. В чём причина?
Чаще всего неверно задан параметр: передана строка вместо ссылки, не та дата или пустое значение. Также проверьте условия соединений и отборы — избыточное условие в секции ГДЕ отсекает все строки. Выполните запрос в консоли, поочерёдно убирая условия, чтобы найти проблемное.
Как посмотреть содержимое временной таблицы в пакетном запросе?
В консоли запросов большинство версий показывают результат каждого запроса пакета отдельно — выберите нужный из списка. В отладчике можно разбить пакет: выполнить первую часть, затем вычислить выборку из временной таблицы отдельным запросом с тем же менеджером временных таблиц.
Чем отличаются Выбрать(), Выгрузить() и ВыбратьОбходРезультатаЗапроса?
Метод Выбрать() возвращает выборку для построчного обхода в цикле — экономит память на больших объёмах. Выгрузить() возвращает таблицу значений целиком — удобно для просмотра в отладчике и произвольного доступа к строкам. Для небольших результатов разница несущественна, для больших предпочтительнее выборка.
Почему запрос работает в консоли, но падает с ошибкой в коде?
Проверьте, что в коде установлены все параметры, которые используются в тексте: консоль может подставлять значения автоматически, а в коде пропущенный параметр вызовет ошибку. Также сравните тексты — в модуле запрос может дополнительно изменяться через СхемуЗапроса или строковые подстановки.
Опасно ли выполнять запросы на рабочей базе?
Запросы на чтение не меняют данные, но тяжёлый запрос без отборов может вызвать блокировки и замедлить работу пользователей. Перед запуском на продуктивной базе ограничьте выборку (ВЫБРАТЬ ПЕРВЫЕ, отбор по периоду) и по возможности проверьте запрос на копии базы.
Что важно запомнить
Текст запроса пишется в конфигураторе через конструктор, а выполняется только в режиме предприятия — через консоль запросов или код под отладкой. Проверяйте параметры, количество строк и итоги результата, а на рабочей базе ограничивайте тяжёлые запросы и экспериментируйте на копии.