Создание запросов — это базовый навык любого разработчика на платформе 1С:Предприятие 8.3. В данной статье мы подробно разберем процесс создания запроса с именем «Запрос 1»‚ используя инструменты консоли запросов и программный интерфейс. Материал будет полезен как начинающим программистам‚ так и тем‚ кто хочет систематизировать знания о языке запросов 1С.
Подготовительный этап: Консоль запросов
Прежде чем писать код‚ необходимо понять структуру данных. Основным инструментом для отладки и составления текста запроса является Консоль запросов.
Как открыть консоль запросов:
- Запустите 1С в режиме Конфигуратора.
- В меню выберите Администрирование → Консоль запросов.
- В открывшемся окне вы увидите дерево метаданных слева и область редактирования текста запроса справа.
Совет: Используйте кнопку «Проверить» (или F7) для валидации синтаксиса перед выполнением.
Синтаксис создания запроса «Запрос 1»
В языке запросов 1С имя запроса задается в контексте пакетного запроса (когда несколько запросов выполняются последовательно) или при программном создании объекта Запрос. Рассмотрим оба варианта.
Вариант А: Пакетный запрос (в тексте консоли)
Если вы работаете непосредственно в консоли запросов‚ имя присваивается через ключевое слово Запрос с указанием имени в кавычках.
// Пример пакетного запроса
Запрос "Запрос 1"
ВЫБРАТЬ
Номенклатура.Ссылка КАК Номенклатура‚
Номенклатура.Наименование КАК Наименование
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.ПометкаУдаления = ЛОЖЬ
;
////////////////////////////////////////////////////////////////////////////////
// Следующий запрос пакета (если нужен)
Запрос "Запрос 2"
ВЫБРАТЬ ...
; После нажатия Выполнить (F5) в области результатов появится вкладка с названием «Запрос 1»‚ содержащая таблицу данных.
Вариант Б: Программное создание (в модуле формы/объекта)
В реальном прикладном решении запросы создаются в коде. Имя запроса в этом случае — это имя переменной‚ ссылающейся на объект Запрос‚ либо свойство Имя при использовании схемы компоновки данных (СКД). Классический пример:
&НаКлиенте
Процедура СформироватьОтчет(Команда)
// 1. Создаем объект Запрос
Запрос1 = Новый Запрос;
// 2. Устанавливаем текст запроса
Запрос1.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Контрагент‚
| Контрагенты.Наименование КАК Наименование
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.ПометкаУдаления = ЛОЖЬ";
// 3. Установка параметров (если есть)
// Запрос1.УстановитьПараметр("ДатаОт"‚ НачалоДня(ТекущаяДата));
// 4. Выполнение
Результат = Запрос1.Выполнить;
// 5. Обработка результата
Выборка = Результат.Выбрать;
Пока Выборка.Следующий Цикл
Сообщить(Выборка.Наименование);
КонецЦикла;
КонецПроцедуры В данном примере переменная Запрос1 и есть наш «Запрос 1». Это стандартная практика именования переменных для наглядности.
Структура универсального запроса (Best Practices)
Исходя из рекомендаций сообщества (в частности‚ материалов Инфостарт)‚ «универсальный» запрос должен соответствовать следующим принципам:
- Явное перечисление полей: Избегайте ВЫБРАТЬ *. Перечисляйте только необходимые поля для снижения нагрузки на СУБД и сети.
- Использование псевдонимов (КАК): Обязательно дайте понятные имена полям и таблицам (Номенклатура КАК Н). Это упрощает чтение кода и доступ к полям в результате (Выборка.Н.Наименование).
- Фильтрация на уровне СУБД: Условия ГДЕ должны отсекать максимум записей до передачи данных в 1С.
- Виртуальные таблицы: Для регистров накопления и сведений всегда используйте виртуальные таблицы (Остатки‚ Обороты‚ Последние) вместо прямых выборок из таблиц регистров.
Пример «Универсального» шаблона для «Запроса 1»:
ВЫБРАТЬ
Товары.Ссылка КАК Товар‚
Товары.Наименование КАК НаименованиеТовара‚
ЕСТЬNULL(Остатки.КоличествоОстаток‚ 0) КАК КоличествоНаСкладе
ИЗ
Справочник.Номенклатура КАК Товары
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
&МоментВремени‚
Склад = &Склад
) КАК Остатки
ПО Товары.Ссылка = Остатки.Номенклатура
ГДЕ
Товары.ПометкаУдаления = ЛОЖЬ
И Товары.ЭтоГруппа = ЛОЖЬ
УПОРЯДОЧИТЬ ПО
НаименованиеТовара Работа с параметрами запроса
Параметризация — ключ к безопасности и производительности. В тексте запроса параметры обозначаются символом & (амперсанд).
Основные типы параметров:
| Тип параметра | Пример в тексте | Установка в коде |
|---|---|---|
| Дата/Время | &ДатаОтчета | Запрос1.УстановитьПараметр(«ДатаОтчета»‚ ТекущаяДата); |
| Справочник/Документ (Ссылка) | &Контрагент | Запрос1.УстановитьПараметр(«Контрагент»‚ Справочники.Контрагенты.НайтиПоНаименованию(«*»)); |
| Массив/Список значений (В) | &СписокСкладов | Запрос1.УстановитьПараметр(«СписокСкладов»‚ МассивСкладов); |
Важно: Имена параметров в тексте запроса и в методе УстановитьПараметр должны совпадать без учета регистра‚ но без символа & в коде.
Типичные ошибки при создании «Запроса 1»
- Ошибка синтаксиса «Неполный запрос»: Забыта точка с запятой ; в конце текста запроса в консоли.
- Поле не найдено: Обращение к полю‚ которого нет в таблице‚ или опечатка в имени поля/псевдонима.
- Несовпадение типов в соединении: Попытка соединить поле типа Строка с полем типа Число или Ссылка.
- Игнорирование индексов: Использование функций над полями в условии ГДЕ (например‚ ГДЕ НачалоПериода(Дата) = …) делает невозможным использование индексов СУБД. Правильно: ГДЕ Дата МЕЖДУ &Нач И &Кон.
Отладка и анализ плана запроса
Если «Запрос 1» работает медленно:
- В консоли запросов нажмите кнопку «План запроса» (или Ctrl+F7).
- Анализируйте операции Table Scan (полное сканирование таблицы) — их нужно устранить добавлением индексов или переписыванием условий.
- Обратите внимание на Estimated Rows (ожидаемое кол-во строк) vs Actual Rows (фактическое) — большая разница говорит об устаревшей статистике СУБД.
Создание запроса с названием «Запрос 1» — это первый шаг к мастерству работы с данными в 1С. Главное — помнить о трех китах: читаемость кода (псевдонимы‚ отступы)‚ безопасность (параметризация) и производительность (виртуальные таблицы‚ правильные индексы‚ анализ плана). Начинайте с консоли запросов‚ тестируйте логику на малых выборках‚ и только затем переносите код в модули конфигурации.
Статья подготовлена на основе открытых материалов сообщества 1С (Infostart.ru) и документации платформы 1С:Предприятие 8.3. Дата актуальности: .