Работа с консолью запросов в 1С:Предприятии 8.3 — от запуска до разбора медленного запроса

· 11 мин

Содержание

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

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

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

В типовые конфигурации (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) консоль не встроена как пункт меню. Это отдельная обработка, которую фирма 1С распространяет в составе пакета универсальных обработок для пользователей ИТС. Существуют две редакции:

  • 🖥 для управляемого приложения — работает в тонком и веб-клиенте, нужна для всех современных конфигураций;
  • 🗂 для обычного приложения — старая редакция на обычных формах, открывается только в толстом клиенте.

Для БП 3.0 и других конфигураций на «Такси» берите редакцию для управляемых форм.

Запуск по шагам

  1. Сохраните файл обработки на диск, например в C:\1C\Tools\КонсольЗапросов.epf.
  2. Запустите нужную базу в режиме 1С:Предприятие под пользователем с полными правами.
  3. Откройте меню с тремя полосками в левом верхнем углу (или нажмите Ctrl+O) и выберите Файл → Открыть.
  4. Укажите файл .epf.
  5. Если появится предупреждение о безопасности — подтвердите открытие, если файл получен из надёжного источника.

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

Права и «подключение к базе»

Отдельно настраивать подключение не нужно: консоль работает внутри той базы, в которой её открыли. Хотите запросить данные другой базы — откройте ту базу и запустите консоль там.

Чтобы открыть внешнюю обработку , у пользователя должно быть право на интерактивное открытие внешних обработок. У роли «Полные права» оно есть. Обычному бухгалтеру его дают через профиль группы доступа, если администратор считает это допустимым.

Вариант базыЧто учесть
ФайловаяТяжёлый запрос нагружает компьютер, где лежит файл базы, и тормозит работу коллег
Клиент-сервернаяЗапрос выполняет сервер 1С и СУБД; долгий запрос в рабочее время замедляет всех
Облако (1С:Фреш и аналоги)Открытие внешних обработок часто ограничено политикой сервиса

Окно консоли: что где находится

Расположение элементов в разных выпусках обработки немного отличается, но состав почти всегда одинаковый:

  • 📝 Поле текста запроса — сюда пишут или вставляют запрос. Подсветка синтаксиса есть, контекстной подсказки как в Конфигураторе — нет.
  • ⚙️ Кнопка вызова конструктора запроса — открывает визуальный конструктор: выбираете таблицы и поля мышкой, текст собирается сам.
  • 🔢 Таблица параметров — список параметров, найденных в тексте, с полями для ввода значений.
  • ▶️ «Выполнить» — запускает запрос.
  • 📊 Результат — таблица с ответом. Обычно есть переключатель вида: плоский список или дерево с итогами.
  • ⏱ Время выполнения и число строк — показывается после каждого запуска.
  • 💾 Сохранение запросов в файл — набор запросов можно сохранить и открыть позже.

💡 Результат копируется: выделите строки, нажмите Ctrl+C и вставьте в Excel. Для больших выборок удобнее открыть результат в табличном документе и сохранить его в .xlsx через меню Файл → Сохранить как.

Синтаксис языка запросов 1С на понятных примерах

Язык запросов похож на SQL, но ключевые слова чаще пишут по-русски, а обращение идёт к объектам конфигурации, а не к таблицам СУБД. Базовая конструкция:

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

Этот запрос находит неудалённых контрагентов без ИНН — частая задача перед сдачей отчётности.

Основные конструкции

КонструкцияЗачем нужна
ВЫБРАТЬ … ИЗ …Какие поля и из какой таблицы брать
ПЕРВЫЕ NОграничить число строк; спасает при пробных запусках
РАЗЛИЧНЫЕУбрать повторяющиеся строки
РАЗРЕШЕННЫЕНе выдавать ошибку, если часть записей закрыта ограничениями доступа
ГДЕОтбор строк до группировки
СГРУППИРОВАТЬ ПО + СУММА, КОЛИЧЕСТВОСвернуть строки и посчитать итоги
ИМЕЮЩИЕОтбор по результату агрегатной функции
ЛЕВОЕ СОЕДИНЕНИЕ … ПО …Присоединить данные другой таблицы, сохранив все строки левой
ОБЪЕДИНИТЬ ВСЕСклеить результаты двух запросов в один
ВЫБОР КОГДА … ТОГДА … ИНАЧЕ … КОНЕЦУсловное значение поля
ЕСТЬNULL(Поле, 0)Заменить NULL после соединения на ноль

Значения и ссылки внутри текста

  • Пустая ссылка и предопределённые элементы: ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка).
  • Значение перечисления: ЗНАЧЕНИЕ(Перечисление.<ИмяПеречисления>.<ИмяЗначения>) — точные имена смотрите в Конфигураторе.
  • Дата константой: ДАТАВРЕМЯ(2025, 12, 31).
  • Комментарий: строка, начинающаяся с //.

Виртуальные таблицы регистров

Остатки и обороты проще брать не из самого регистра, а из его виртуальных таблиц. Пример для БП 3.0 — остатки по счёту в разрезе первого субконто:

ВЫБРАТЬ
    Остатки.Субконто1 КАК Аналитика,
    Остатки.СуммаОстатокДт КАК ОстатокДт,
    Остатки.СуммаОстатокКт КАК ОстатокКт
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(&НаДату, Счет В ИЕРАРХИИ (&Счет), , ) КАК Остатки

Отбор по счёту, периоду и измерениям пишите в параметрах виртуальной таблицы, а не в ГДЕ. Так платформа отбирает данные до расчёта остатков. Условие в ГДЕ срабатывает уже после расчёта, и запрос по большой базе выполняется заметно дольше.

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

Как задать параметр

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

  1. Напишите запрос с параметрами.
  2. Обновите список параметров (в большинстве выпусков консоли это делается кнопкой над таблицей параметров или автоматически при выполнении).
  3. Для каждого параметра выберите тип: дата, число, строка или ссылка на объект (СправочникСсылка.Организации, ПланСчетовСсылка.Хозрасчетный).
  4. Выберите значение из справочника или введите вручную.

Для отбора по нескольким значениям тип параметра ставят «Список значений», а в тексте пишут Поле В (&Список).

Дата периода. Если в параметр &КонецПериода ввести 31.12.2025 без времени, значение будет 31.12.2025 00:00:00, и документы последнего дня не попадут в выборку МЕЖДУ &НачалоПериода И &КонецПериода. Укажите время 23:59:59 или используйте в тексте КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ).

Пакетный запрос и временные таблицы

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

ВЫБРАТЬ
    Реализация.Ссылка КАК Документ,
    Реализация.Контрагент КАК Контрагент,
    Реализация.СуммаДокумента КАК Сумма
ПОМЕСТИТЬ ВТ_Продажи
ИЗ
    Документ.РеализацияТоваровУслуг КАК Реализация
ГДЕ
    Реализация.Проведен
    И Реализация.Дата МЕЖДУ &НачалоПериода И КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ)
ИНДЕКСИРОВАТЬ ПО
    Контрагент
;

ВЫБРАТЬ
    ВТ_Продажи.Контрагент КАК Контрагент,
    СУММА(ВТ_Продажи.Сумма) КАК Выручка,
    КОЛИЧЕСТВО(ВТ_Продажи.Документ) КАК Документов
ИЗ
    ВТ_Продажи КАК ВТ_Продажи
СГРУППИРОВАТЬ ПО
    ВТ_Продажи.Контрагент
УПОРЯДОЧИТЬ ПО
    Выручка УБЫВ

Консоль показывает результат последнего запроса пакета. Чтобы проверить промежуточный шаг, у современных выпусков есть просмотр содержимого временных таблиц. Если такой функции нет — временно уберите из текста всё после нужного ПОМЕСТИТЬ и добавьте ВЫБРАТЬ * ИЗ ВТ_Продажи.

Ещё несколько правил:

  • 🔹 Имя временной таблицы уникально в пределах пакета. Второе ПОМЕСТИТЬ ВТ_Продажи вызовет ошибку, пока первую не удалили через УНИЧТОЖИТЬ ВТ_Продажи.
  • 🔹 ИНДЕКСИРОВАТЬ ПО имеет смысл для полей, по которым временную таблицу потом соединяют с другими.
  • 🔹 Временные таблицы живут до конца выполнения пакета, в базе они не сохраняются.

Отладка и скорость: как найти, почему запрос тормозит

Первое, на что смотреть, — время выполнения, которое консоль выводит после запуска. Запрос, который в пробном режиме на ПЕРВЫЕ 100 отрабатывает за доли секунды, а без ограничения — минутами, почти всегда упирается в одну из причин ниже.

Частые причины медленного запроса

ПричинаКак распознатьЧто сделать
Отбор по виртуальной таблице в ГДЕУсловия на счёт, склад, организацию стоят после ИЗ … Остатки(…)Перенести их в параметры виртуальной таблицы
Разыменование составного типаЦепочки вида Регистратор.Контрагент.ИННПривести тип: ВЫРАЗИТЬ(Регистратор КАК Документ.РеализацияТоваровУслуг)
Соединение с подзапросомЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ …) по большой таблицеВынести подзапрос во временную таблицу с индексом
ИЛИ в условии соединенияУсловие ПО А = Б ИЛИ А = ВРазбить на два запроса через ОБЪЕДИНИТЬ ВСЕ
Нет ограничения периодаВыборка документов за все годыДобавить отбор по дате

Почему разыменование тормозит: поле Регистратор может ссылаться на десятки видов документов. Обращение «через точку» заставляет платформу соединить таблицы всех этих документов. ВЫРАЗИТЬ оставляет одно соединение.

Инструменты глубже консоли

Консоль показывает только итоговое время. Для разбора на уровне СУБД нужны другие средства:

  • 🔍 Отладчик в Конфигураторе. Поставьте точку останова на строке после выполнения запроса и посмотрите результат в окне вычисления выражений (Shift+F9). Для пакетов есть метод Запрос.ВыполнитьПакетСПромежуточнымиДанными() — он возвращает результаты всех запросов пакета, включая содержимое временных таблиц.
  • ⏱ Замер производительности. В Конфигураторе в режиме отладки он показывает, на какой строке модуля тратится время. Полезен, когда запрос вызывается из кода отчёта или документа.
  • 📜 Технологический журнал. Настраивается файлом logcfg.xml на сервере 1С и пишет события обращения к СУБД с длительностью и текстом SQL-запроса. С его помощью находят запросы-«долгожители» в клиент-серверной базе.
  • 🗄 Средства самой СУБД. Для MS SQL Server и PostgreSQL план выполнения смотрят их штатными инструментами — по тексту SQL, который попал в технологический журнал.

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

Конструктор запроса как средство проверки

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

Ошибки при выполнении запроса и как их исправить

Сообщение об ошибке в консоли содержит координаты в фигурных скобках, например {(12, 5)}: первая цифра — номер строки текста, вторая — позиция в строке. С них и начинайте поиск.

Диагностика: выберите симптом

Неочевидные ловушки

  • 🧩 NULL после соединения. Поля из присоединённой таблицы равны NULL, если пары не нашлось. Сравнение Поле = 0 такие строки не отберёт — нужно Поле ЕСТЬ NULL или ЕСТЬNULL(Поле, 0) = 0.
  • 🧩 Задвоение сумм. Соединение «один ко многим» перед СУММА размножает строки: сумма документа повторяется столько раз, сколько у него строк табличной части. Агрегируйте данные до соединения во временной таблице.
  • 🧩 Сравнение строк неограниченной длины. Реквизит типа «Строка» без ограничения длины нельзя напрямую использовать в условиях сравнения и группировках. Приведите его: ВЫРАЗИТЬ(Поле КАК СТРОКА(200)).
  • 🧩 Регистр букв в ПОДОБНО. Шаблон ПОДОБНО "%ооо%" в разных СУБД может по-разному учитывать регистр. Для надёжности приводите обе части к одному регистру функциями ВРЕГ() или НРЕГ() (они есть в языке запросов начиная с платформы 8.3.20 — на более старых версиях этих функций нет).

Безопасность работы с консолью в рабочей базе

Язык запросов не умеет изменять данные, поэтому сам запрос ничего в базе не испортит. Риски другие:

  • ⚡ Нагрузка. Тяжёлый запрос в рабочее время замедляет всех пользователей. Проверяйте новый текст с ПЕРВЫЕ 100, а полную выборку запускайте вечером.
  • 🔐 Доступ к данным. Под полными правами консоль показывает всё: зарплаты, паспортные данные, остатки по всем организациям. Выдавать право на открытие внешних обработок рядовым пользователям значит открыть им эти данные.
  • 📦 Источник файла. Обработка — это программный код. Берите консоль из дистрибутива ИТС или от проверенного разработчика, а не из случайного архива: внешняя обработка выполняется с правами пользователя, который её открыл.
Перед запуском запроса в рабочей базе
Выполнено: 0 / 5

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

Можно ли через консоль запросов исправить данные в базе?
Нет. Язык запросов 1С только читает данные. Для массового изменения используют обработку групповой модификации реквизитов или код на встроенном языке.
Почему консоль работает в одной базе и не открывается в облачной?
В облачных сервисах открытие внешних обработок обычно ограничено политикой безопасности. Уточните у провайдера, можно ли зарегистрировать обработку или выполнить запрос другим способом.
Чем консоль запросов отличается от конструктора запроса?
Конструктор только собирает текст запроса. Консоль выполняет его и показывает результат, а конструктор вызывается из неё как помощник.
Как посмотреть запрос, который строит типовой отчёт?
В Конфигураторе откройте отчёт, найдите его схему компоновки данных и скопируйте текст набора данных. Его можно вставить в консоль, но параметры компоновки придётся задать вручную.
Нужны ли знания SQL, чтобы пользоваться консолью?
Не обязательно. Простые выборки собираются в конструкторе мышкой. Знание SQL помогает быстрее понять соединения и группировки, но имена таблиц и функции в 1С свои.