К статье
Практический материал

Разработка и Конфигурация · 13 мин

Консоль запросов 1С: как создать и отладить запрос

Как создать запрос в консоли запросов 1С: открытие обработки, конструктор запроса, параметры, временные таблицы, отладка и типичные ошибки новичков.

Консоль запросов — внешняя обработка, которая позволяет писать и выполнять запросы на встроенном языке запросов 1С без изменения конфигурации. Она незаменима, когда нужно быстро проверить данные в базе, подготовить текст запроса для отчёта или найти причину ошибки в уже существующем коде. Вместо создания тестового отчёта или написания процедуры в конфигураторе вы открываете консоль, набираете текст запроса и сразу видите результат в виде таблицы.

Работа с консолью сводится к четырём действиям: открыть обработку, сформировать текст запроса (вручную или через конструктор), задать параметры и выполнить запрос. Дальше результат можно выгрузить в табличный документ, сводную таблицу или использовать для отладки сложных выборок с временными таблицами и пакетными запросами.

Ниже разобран практический порядок работы: где взять консоль, как написать первый запрос, как пользоваться конструктором, как передавать параметры и проверять результат, а также какие ошибки чаще всего мешают получить корректные данные.

Где взять консоль запросов и как её открыть

Консоль запросов не входит в типовую поставку конфигурации — это внешняя обработка с расширением .epf. Её можно найти на диске ИТС (в разделе инструментов разработчика), в составе поставки некоторых типовых конфигураций в каталоге EXTLIBR или скачать с ресурсов для разработчиков 1С. Существует несколько популярных вариантов консоли: классическая с диска ИТС, консоль запросов с поддержкой СКД и расширенные версии с подсветкой синтаксиса и автоподстановкой.

Открывается обработка в режиме 1С:Предприятие через меню «Файл → Открыть» с указанием файла .epf. Для открытия нужны права на запуск внешних обработок: если база работает под управлением типовой конфигурации с ограничениями, администратор должен добавить обработку в справочник «Дополнительные отчеты и обработки» или выдать право интерактивного открытия внешних файлов.

Важный момент: консоль работает с реальными данными текущей информационной базы. Сам по себе запрос на выборку ничего не изменяет в базе, но консоль даёт доступ к любым данным, доступным вашему пользователю. Поэтому эксперименты безопаснее проводить на копии базы, особенно если вы только осваиваете инструмент.

Интерфейс консоли: что где находится

Типовая консоль запросов состоит из нескольких областей. В верхней части — список запросов: консоль позволяет хранить несколько запросов в одном файле и переключаться между ними. Центральную часть занимает поле текста запроса, куда вводится запрос на встроенном языке запросов. Рядом или на отдельной вкладке располагается таблица параметров, а в нижней части выводится результат выполнения — таблица значений с данными выборки.

На панели инструментов находятся ключевые кнопки: «Выполнить» (обычно с вариантами «Выполнить» и «Выполнить пакет»), вызов конструктора запроса, заполнение параметров из запроса, сохранение и загрузка списка запросов в файл. В расширенных версиях добавлены кнопки выгрузки результата в табличный документ, дерево или сводную таблицу.

Перед началом работы полезно сразу сохранить файл консоли с запросами в отдельный каталог: так наработанные запросы не потеряются, и их можно будет переиспользовать в других базах с аналогичной структурой метаданных.

Создание первого запроса вручную

Простейший запрос состоит из обязательных секций ВЫБРАТЬ и ИЗ. В секции ВЫБРАТЬ перечисляются поля, которые нужно получить, в секции ИЗ указывается источник данных — таблица объекта метаданных. Имя таблицы строится по шаблону: тип объекта, точка, имя объекта, как оно задано в конфигураторе. Например, справочник «Номенклатура» адресуется как Справочник.Номенклатура, документ «РеализацияТоваровУслуг» — как Документ.РеализацияТоваровУслуг.

bsl
ВЫБРАТЬ
	Номенклатура.Ссылка КАК Номенклатура,
	Номенклатура.Код КАК Код,
	Номенклатура.Наименование КАК Наименование
ИЗ
	Справочник.Номенклатура КАК Номенклатура
ГДЕ
	НЕ Номенклатура.ПометкаУдаления
УПОРЯДОЧИТЬ ПО
	Наименование

Обратите внимание на типовые приёмы в примере. Таблице назначен псевдоним (КАК Номенклатура) — через него обращаются к полям, это обязательно для виртуальных таблиц и сильно упрощает чтение. Поля в списке выборки тоже получают понятные псевдонимы — именно они станут заголовками колонок результата. Секция ГДЕ отсекает помеченные на удаление элементы, а УПОРЯДОЧИТЬ ПО сортирует выборку.

После ввода текста нажмите «Выполнить». Если синтаксис корректен, в нижней части появится таблица с данными. Если платформа вернула ошибку, прочитайте её текст: чаще всего это опечатка в имени таблицы или поля, либо обращение к полю без псевдонима таблицы. Ошибка указывает строку и позицию, где анализатор запроса остановился.

Сборка запроса конструктором

Конструктор запроса — визуальный инструмент, который избавляет от необходимости помнить синтаксис и имена таблиц. Он вызывается кнопкой «Конструктор» или «Конструктор запроса» на панели консоли. В левой части конструктора отображается дерево метаданных: справочники, документы, регистры сведений и накопления с их виртуальными таблицами (остатки, обороты, срез первых и последних).

Порядок работы в конструкторе: разверните нужный тип объектов, перенесите таблицу в список таблиц запроса, затем перенесите нужные поля в список выбранных полей. На закладке «Условия» задайте отборы, на закладке «Порядок» — сортировку, на закладке «Группировка» — итоги и агрегатные функции (СУММА, КОЛИЧЕСТВО, МАКСИМУМ). После нажатия «ОК» конструктор сформирует готовый текст запроса, который можно дополнить вручную.

Порядок создания запроса конструктором
  1. 1
    Откройте консоль запросов и создайте новый запрос в списке
  2. 2
    Нажмите кнопку вызова конструктора запроса
  3. 3
    Выберите таблицу-источник в дереве метаданных и перенесите её в список таблиц
  4. 4
    Перенесите нужные поля в список выбранных полей
  5. 5
    Добавьте условия отбора, группировку и сортировку на соответствующих закладках
  6. 6
    Нажмите «ОК», проверьте сформированный текст и выполните запрос
  7. 7
    Убедитесь, что результат содержит ожидаемые колонки и разумное число строк

Конструктор особенно полезен при работе с виртуальными таблицами регистров. Например, для таблицы РегистрНакопления.ТоварыНаСкладах.Остатки конструктор предложит задать параметры виртуальной таблицы — период и условия отбора. Эти параметры влияют на производительность: отбор, заданный в параметрах виртуальной таблицы, выполняется на уровне СУБД до соединения с другими данными.

Параметры запроса: задание и использование

Параметры позволяют выполнять один и тот же запрос с разными условиями, не редактируя текст. В тексте запроса параметр обозначается символом амперсанда перед именем: &Период, &Склад, &Контрагент. Типичное применение — отбор по дате, организации или конкретному элементу справочника.

bsl
ВЫБРАТЬ
	Продажи.Номенклатура КАК Номенклатура,
	СУММА(Продажи.КоличествоОборот) КАК Количество,
	СУММА(Продажи.СтоимостьОборот) КАК Сумма
ИЗ
	РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Продажи
СГРУППИРОВАТЬ ПО
	Продажи.Номенклатура

Перед выполнением параметры нужно заполнить. В консоли есть отдельная таблица параметров: имя, тип и значение. Кнопка «Заполнить из запроса» (или аналогичная) автоматически собирает все параметры, встречающиеся в тексте. Далее для каждого параметра укажите значение: дату, ссылку на объект (выбирается из соответствующего списка), число или строку. Если параметр оставить пустым, запрос либо вернёт ошибку, либо отработает с пустым значением — и результат будет пустым или неверным.

Проверка результата и отладка

Получить таблицу с данными — только половина задачи. Результат нужно проверить на адекватность: соответствует ли число строк ожиданиям, нет ли задвоений, корректно ли заполнены суммы. Простой способ контроля — сравнить итог по запросу с итогом типового отчёта по тем же данным за тот же период. Расхождение означает ошибку в условиях, соединениях или параметрах виртуальных таблиц.

Наиболее коварная проблема — размножение строк при соединении таблиц. Если к одной строке левой таблицы подходят несколько строк правой, итоговые суммы завышаются кратно. Признак — суммы в результате заметно больше ожидаемых, а после добавления РАЗЛИЧНЫЕ или пересмотра соединения картина меняется. Проверяйте соединения на малом наборе данных: выберите один документ или один элемент и убедитесь, что строк ровно столько, сколько должно быть.

Контрольные точки

Как проверить результат запроса

Число строк в результате
Норма

Соответствует ожидаемому количеству объектов или движений

Тревожный признак

Строк кратно больше — вероятно, ошибка в соединении таблиц

Итоговые суммы
Норма

Сходятся с типовым отчётом за тот же период

Тревожный признак

Суммы завышены или занижены — проверьте отборы и группировку

Заполнение колонок
Норма

Все ключевые поля заполнены осмысленными значениями

Тревожный признак

Много NULL — соединение не находит пар, проверьте условия связи

Для сложных запросов используйте пакетное выполнение: запрос разбивается на части, разделённые точкой с запятой, где промежуточные результаты помещаются во временные таблицы (конструкция ПОМЕСТИТЬ ИмяТаблицы). Расширенные консоли показывают результат каждого пакета отдельно — это позволяет локализовать, на каком шаге данные «ломаются». Отлаживайте пакет по частям: сначала добейтесь правильной первой временной таблицы, затем добавляйте следующие.

Типичные ошибки при создании запросов

Большинство проблем новичков связано с небольшим набором повторяющихся ошибок. Их знание экономит часы отладки.

Типичные ошибки
01
Опечатка в имени таблицы или поля — платформа возвращает ошибку «Поле не найдено»; сверяйте имя с конфигуратором, а не с отображаемым синонимом
02
Использование отбора в секции ГДЕ вместо параметров виртуальной таблицы — запрос работает медленно и может вернуть неверные итоги по остаткам
03
Забытый или пустой параметр — запрос возвращает пустой результат или ошибку; проверяйте вкладку параметров перед выполнением
04
Соединение без учёта дублирующих строк — суммы размножаются; проверяйте результат на одном объекте
05
Отбор по строковому представлению вместо ссылки — сравнение строк с ссылками не работает так, как ожидается; передавайте в параметр именно ссылку

Отдельно стоит упомянуть работу с датами. Границы периодов в виртуальных таблицах включаются по-разному, а для документов момент времени включает и время. Если отчёт «не дотягивает» последний документ дня, проверьте, не отсекает ли параметр периода границу по времени — для включения конца дня используйте функцию КОНЕЦПЕРИОДА(&Дата, ДЕНЬ).

Что делать с готовым запросом дальше

Отлаженный в консоли запрос обычно переносится в конфигурацию: в модуль отчёта, процедуру проведения или обработку. Текст из консоли копируется в модуль практически без изменений — в коде он оформляется как строковый литерал объекта Запрос, а параметры устанавливаются методом УстановитьПараметр. Псевдонимы полей, заданные в консоли, сохраняются и используются при обходе выборки.

Маршрут решения

Как выбрать дальнейший шаг

Запрос нужен для разового анализа данныхВыгрузите результат из консоли в табличный документ или скопируйте таблицу в электронные таблицы
Запрос пойдёт в отчёт или обработкуСкопируйте текст в модуль, оформите через объект Запрос и перенесите параметры в УстановитьПараметр
Запрос выполняется медленно на больших объёмахПеренесите отборы в параметры виртуальных таблиц, уберите лишние соединения и проверьте индексацию полей отбора
Запрос нужно выполнять регулярно с разными условиямиСохраните его в файле консоли и оформите набор типовых параметров для быстрого запуска

Если запрос будет использоваться регулярно, сохраните его в файл консоли с понятным именем и кратким комментарием в тексте (комментарии начинаются с двойного слэша). Через месяц вы не вспомните, зачем нужен был тот или иной отбор, а комментарий сэкономит время на восстановление логики.

Итог

Что важно запомнить

Консоль запросов открывается как внешняя обработка в режиме Предприятия. Запрос создаётся вручную или конструктором, параметры заполняются на отдельной вкладке до выполнения. Результат обязательно проверяется на адекватность: число строк, итоги и отсутствие размножения при соединениях. Отлаженный запрос переносится в конфигурацию без изменений текста.

Частые вопросы

Можно ли через консоль запросов изменить данные в базе?

Стандартный язык запросов 1С предназначен только для чтения данных — конструкций INSERT или UPDATE в нём нет. Однако некоторые расширенные консоли позволяют выполнять произвольный код на встроенном языке, который способен изменять данные. Поэтому работайте в копии базы и не выполняйте непонятный код.

Почему запрос возвращает пустой результат, хотя данные в базе есть?

Чаще всего не заполнен или неверно заполнен параметр отбора: проверьте вкладку параметров и тип значения — например, в параметр ожидается ссылка, а передана строка. Также проверьте условия в секции ГДЕ и границы периода виртуальной таблицы: слишком узкий период отсекает все записи.

Чем консоль запросов отличается от конструктора запроса в конфигураторе?

Конструктор в конфигураторе только формирует текст запроса, но не выполняет его и не показывает данные. Консоль работает в режиме Предприятия: она выполняет запрос на реальных данных, позволяет задавать параметры интерактивно и сразу видеть таблицу результата, что незаменимо при отладке.

Как выполнить запрос с временными таблицами?

Используйте пакетный запрос: части разделяются точкой с запятой, промежуточные выборки сохраняются конструкцией ПОМЕСТИТЬ ИмяТаблицы, а в финальной части временные таблицы используются как обычные источники. В расширенных консолях есть режим просмотра каждого пакета отдельно — включите его для пошаговой отладки.

Почему один и тот же запрос в консоли быстрый, а в отчёте медленный?

В отчёте запрос может выполняться с другими параметрами, в составе СКД с дополнительными соединениями или в транзакции. Сравните фактические тексты и параметры: скопируйте запрос из отчёта в консоль с теми же значениями параметров и проверьте, сохраняется ли проблема. Если да — оптимизируйте отборы и соединения.

Нужны ли особые права для работы с консолью запросов?

Нужно право на открытие внешних обработок и доступ к тем данным, которые читает запрос. Если у пользователя нет прав на конкретный регистр или справочник, запрос к нему завершится ошибкой нарушения прав доступа. Обычно консолью пользуются разработчики и администраторы с широкими правами.