Работа с запросами — одна из ключевых компетенций разработчика 1С:Предприятия 8.3. Язык запросов позволяет эффективно извлекать, фильтровать и группировать данные, хранящиеся в базе, не перебирая их в циклах на встроенном языке. В этой статье подробно разберем, где писать запросы в 1С, какие инструменты для этого существуют, как пользоваться консолью запросов и конструктором, а также рассмотрим нюансы работы в управляемых формах.
Основные способы написания и выполнения запросов
В платформе 1С:Предприятие 8.3 существует три основных сценария работы с запросами:
- Программный код (встроенный язык): Создание объекта
Запрос, установка текста, параметров и выполнение методаВыполнить. Это основной способ для бизнес-логики, отчетов и обработок. - Консоль запросов (внешняя обработка): Отдельное приложение для отладки, тестирования и составления текста запроса «на коленке» без изменения конфигурации.
- Конструктор запросов (встроенный визуальный редактор): Графический интерфейс для построения запроса «мышкой» по таблицам и полям метаданных.
Консоль запросов 1С: главный инструмент отладки
Консоль запросов — это универсальная внешняя обработка, поставляемая фирмой 1С на портале ИТС (its.1c.ru). Она позволяет писать, проверять и оптимизировать запросы, не внося изменения в конфигурацию (сохраняя её на поддержке).
Где найти и как запустить
- Портал ИТС: Раздел «Методическая поддержка» → «Дополнительные средства разработки» → «Универсальные отчеты и обработки» → «Запросы и отчеты» → Консоль запросов для управляемого приложения.
- Прямые ссылки: Часто распространяется как файл
.epf(например, Универсальная консоль запросов 1С 8.3 (8.2)). - Запуск: Файл → Открыть → выбираем
.epf→ нажимаем «Выполнить» в режиме предприятия или «Открыть» в конфигураторе.
Структура окна консоли
Классическая консоль запросов (например, версия для управляемых форм) обычно содержит 3 основные секции:
- Параметры: Область для объявления и задания значений параметров запроса (даты, ссылки, перечисления).
- Текст запроса: Редактор кода с подсветкой синтаксиса; Здесь пишется сам SQL-подобный текст.
- Результат запроса: Табличное поле, выводящее выборку после нажатия кнопки «Выполнить».
Полезные возможности консоли
- Сохранение шаблонов: Разработчики часто пишут похожие запросы. Консоль позволяет сохранять текст как шаблон и загружать одной кнопкой.
- Контекстное меню (ПКМ): В секции «Текст запроса» по правой кнопке мыши доступны команды: «Конструктор запроса», «Текст запроса для конфигуратора» (экранирование кавычек для вставки в код), «Форматировать запрос».
- Работа с вложенными запросами: При редактировании произвольного выражения (например, в полях «Пользовательские настройки компоновки данных») иногда не срабатывает вызов отдельного окна конструктора через пробел. В таком случае используйте контекстное меню → «Конструктор запроса».
Конструктор запросов: визуальное построение
Конструктор запросов встроен в платформу и доступен в двух местах:
- В Конфигураторе: При редактировании текста запроса в модуле (кнопка «Конструктор» на панели инструментов или ПКМ → Конструктор запроса).
- В Консоли запросов: Через контекстное меню в поле «Текст запроса».
Преимущества для начинающих
- Не нужно знать синтаксис наизусть: таблицы и поля выбираются из дерева метаданных.
- Автоматическое формирование связей (JOIN) по внешним ключам.
- Визуальная настройка условий отбора, группировки, упорядочивания.
- Генерация корректного текста запроса, который можно скопировать в код.
Нюанс работы с вложенными запросами
Как отмечают разработчики на форумах (например, Курсы-по-1С.рф), при редактировании выражений в настройках компоновки данных (СКД) «лайфхак» с постановкой пробела для вызова конструктора вложенного запроса может не срабатывать в версиях 8.2 и 8.3. Решение: используйте вызов конструктора через контекстное меню (ПКМ) прямо в поле редактирования текста.
Программное выполнение: объект «Запрос»
Когда текст запроса отлажен в консоли, его переносят в программный код. Базовый шаблон:
// 1. Создаем объект
Запрос = Новый Запрос;
// 2. Устанавливаем текст (лучше через параметры, а не склеивание строк)
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Номенклатура,
| Номенклатура.Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ПометкаУдаления = ЛОЖЬ
| И Номенклатура;Владелец = &Владелец";
// 3. Устанавливаем параметры (БЕЗОПАСНОСТЬ: защита от инъекций)
Запрос.УстановитьПараметр("Владелец", Справочники.Пользователи.НайтиПоНаименованию("Иванов"));
// 4. Выполняем
Результат = Запрос.Выполнить;
// 5. Работаем с выборкой
Выборка = Результат.Выбрать;
Пока Выборка.Следующий Цикл
Сообщить(Выборка.Наименование);
КонецЦикла;
Важно: Всегда используйте УстановитьПараметр для передачи данных. Никогда не собирайте текст запроса строковой конкатенацией с данными пользователя — это уязвимость (SQL-инъекции) и ошибки форматирования дат/строк.
Специфика управляемых форм (УФ) и клиент-сервер
В современной разработке (Управляемые формы) код выполнения запросов должен находиться на сервере.
- &НаСервере — процедура/функция выполняется на сервере 1С:Предприятия. Здесь есть прямой доступ к БД, объект
Запросработает максимально быстро. - &НаКлиенте — прямого доступа к БД нет. Вызов
Новый Запросна клиенте вызовет ошибку (кроме редких случаев с локальной БД в файловом варианте, но это плохая практика).
Паттерн: На клиенте вызывается серверная функция, которая выполняет запрос и возвращает результат (ТаблицуЗначений, Массив, Структуру или Текст).
Пакетные запросы и виртуальные таблицы
Консоль запросов и язык запросов поддерживают продвинутые возможности:
- Пакетные запросы: Несколько запросов, разделенных точкой с запятой (;), выполняются за одно обращение к СУБД. В консоли они выполняются последовательно, результат показывает последнюю выборку (или все, в зависимости от реализации консоли).
- Виртуальные таблицы: Остатки, Обороты, СрезПоследних и др. Позволяют получать агрегированные данные мгновенно без ручного JOIN и GROUP BY. Доступны в конструкторе в дереве метаданных под узлом «Виртуальные таблицы».
- Временные таблицы (ВРЕМЕННАЯ ТАБЛИЦА): Для сложных многошаговых расчетов внутри одного пакета.
Современные инструменты: AI-Консоль запросов (Aether Lab)
На рынке появляются инструменты нового поколения, например, AI-Консоль запросов 1С (Aether Lab). Они интегрируются с метаданными вашей конфигурации и используют ИИ для:
- Автодополнения кода (IntelliSense) с учетом реальных таблиц и полей.
- Генерации запроса по естественному языку («Покажи продажи за январь по магазинам»).
- Поиска ошибок и оптимизации (предложение индексов, переписывание подзапросов на JOIN).
- Объяснения плана запроса.
Чек-лист: где писать запрос в конкретной ситуации
| Задача | Инструмент / Место | Комментарий |
|---|---|---|
| Быстрая проверка гипотезы / разовая выгрузка данных | Консоль запросов (файл .epf) | Не требует изменения конфигурации, есть история, шаблоны, экспорт в Excel. |
| Написание сложного запроса «с нуля» (новичок) | Конструктор запросов (в Консоли или Конфигураторе) | Визуальный выбор таблиц, автоматическое соединение, проверка синтаксиса; |
| Внедрение запроса в бизнес-логику (документ, отчет, обработка) | Модуль объекта / Модуль менеджера / Общий модуль (с директивой &НаСервере) | Объект Запрос, параметризация, обработка выборки. |
| Настройка СКД (Схема компоновки данных) | Вкладка «Наборы данных» → Запрос или «Пользовательские настройки» | Текст запроса пишется прямо в схеме. Для вложенных запросов в настройках — ПКМ → Конструктор. |
| Отладка запроса, который «летит» из кода | Консоль запросов + Профайлер / План запроса | Скопируйте текст (ПКМ → «Текст для конфигуратора» → обратная замена), подставьте реальные параметры, посмотрите план выполнения. |
Типичные ошибки и лучшие практики
- Использование * (звездочки): Пишите явный список полей. Это ускоряет работу и защищает от ошибок при изменении метаданных.
- Игнорирование индексов: Условия в ГДЕ и соединения (СОЕДИНЕНИЕ) должны использовать поля, по которым есть индексы в БД (обычно это Измерения регистров, Ссылки справочников/документов).
- Левое соединение (ЛЕВОЕ СОЕДИНЕНИЕ) без необходимости: Оно дороже внутреннего (ВНУТРЕННЕЕ СОЕДИНЕНИЕ). Используйте только если нужны записи, не имеющие пары.
- Выполнение запросов в цикле: Катастрофично для производительности. Соберите все параметры во временную таблицу / таблицу значений и сделайте один запрос с ВРЕМЕННОЙ ТАБЛИЦЕЙ или СОЕДИНЕНИЕМ.
- Кодировка и кавычки при копировании: При переносе из Консоли в код используйте ПКМ → «Текст запроса для конфигуратора» — он сам экранирует кавычки и переносы строк.
Ответ на вопрос «Запросы в 1С: где писать?» зависит от этапа разработки:
- Проектирование и отладка: Консоль запросов (внешняя обработка с ИТС) + Конструктор запросов (встроенный визуальный редактор).
- Продакшн-код: Серверные модули (Общие модули, Модули объектов) через объект Запрос с обязательной параметризацией.
- Отчеты СКД: Прямо в схеме компоновки на вкладке «Наборы данных».
Освоение Консоли запросов и Конструктора — первый шаг к написанию эффективного, быстрого и безопасного кода на платформе 1С:Предприятие 8.3.