Работа с консолью запросов в 1С:Предприятии 8.3 — от запуска до разбора медленного запроса
Содержание
Консоль запросов в 1С — это внешняя обработка (файл .epf), которую открывают в режиме 1С:Предприятие через Главное меню → Файл → Открыть. В окне консоли пишут текст на языке запросов, задают параметры и нажимают «Выполнить» — результат появляется таблицей прямо под текстом. Данные консоль только читает: изменить или удалить записи языком запросов нельзя.
Работать с ней приходится и программисту, и опытному бухгалтеру: найти документы с пустым реквизитом, сверить остатки по счёту, проверить, почему отчёт показывает «не те» цифры. Ниже — запуск, интерфейс, синтаксис, параметры, отладка и ошибки, с готовыми примерами для типовых конфигураций.
Где взять консоль запросов и как запустить её в своей базе
В типовые конфигурации (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) консоль не встроена как пункт меню. Это отдельная обработка, которую фирма 1С распространяет в составе пакета универсальных обработок для пользователей ИТС. Существуют две редакции:
- 🖥 для управляемого приложения — работает в тонком и веб-клиенте, нужна для всех современных конфигураций;
- 🗂 для обычного приложения — старая редакция на обычных формах, открывается только в толстом клиенте.
Для БП 3.0 и других конфигураций на «Такси» берите редакцию для управляемых форм.
Запуск по шагам
- Сохраните файл обработки на диск, например в
C:\1C\Tools\КонсольЗапросов.epf. - Запустите нужную базу в режиме 1С:Предприятие под пользователем с полными правами.
- Откройте меню с тремя полосками в левом верхнем углу (или нажмите
Ctrl+O) и выберитеФайл → Открыть. - Укажите файл
.epf. - Если появится предупреждение о безопасности — подтвердите открытие, если файл получен из надёжного источника.
Предупреждение возникает, когда у пользователя включена защита от опасных действий. Её отключают в карточке пользователя, но делать это ради консоли стоит только для администратора, а не для всех сотрудников.
Права и «подключение к базе»
Отдельно настраивать подключение не нужно: консоль работает внутри той базы, в которой её открыли. Хотите запросить данные другой базы — откройте ту базу и запустите консоль там.
Чтобы открыть внешнюю обработку , у пользователя должно быть право на интерактивное открытие внешних обработок. У роли «Полные права» оно есть. Обычному бухгалтеру его дают через профиль группы доступа, если администратор считает это допустимым.
| Вариант базы | Что учесть |
|---|---|
| Файловая | Тяжёлый запрос нагружает компьютер, где лежит файл базы, и тормозит работу коллег |
| Клиент-серверная | Запрос выполняет сервер 1С и СУБД; долгий запрос в рабочее время замедляет всех |
| Облако (1С:Фреш и аналоги) | Открытие внешних обработок часто ограничено политикой сервиса |
Окно консоли: что где находится
Расположение элементов в разных выпусках обработки немного отличается, но состав почти всегда одинаковый:
- 📝 Поле текста запроса — сюда пишут или вставляют запрос. Подсветка синтаксиса есть, контекстной подсказки как в Конфигураторе — нет.
- ⚙️ Кнопка вызова конструктора запроса — открывает визуальный конструктор: выбираете таблицы и поля мышкой, текст собирается сам.
- 🔢 Таблица параметров — список параметров, найденных в тексте, с полями для ввода значений.
- ▶️ «Выполнить» — запускает запрос.
- 📊 Результат — таблица с ответом. Обычно есть переключатель вида: плоский список или дерево с итогами.
- ⏱ Время выполнения и число строк — показывается после каждого запуска.
- 💾 Сохранение запросов в файл — набор запросов можно сохранить и открыть позже.
💡 Результат копируется: выделите строки, нажмите Ctrl+C и вставьте в Excel. Для больших выборок удобнее открыть результат в табличном документе и сохранить его в .xlsx через меню Файл → Сохранить как.
Синтаксис языка запросов 1С на понятных примерах
Язык запросов похож на SQL, но ключевые слова чаще пишут по-русски, а обращение идёт к объектам конфигурации, а не к таблицам СУБД. Базовая конструкция:
ВЫБРАТЬ ПЕРВЫЕ 100
Контрагенты.Ссылка КАК Контрагент,
Контрагенты.ИНН КАК ИНН,
Контрагенты.КПП КАК КПП
ИЗ
Справочник.Контрагенты КАК Контрагенты
ГДЕ
НЕ Контрагенты.ПометкаУдаления
И Контрагенты.ИНН = ""
УПОРЯДОЧИТЬ ПО
Контрагенты.Наименование
Этот запрос находит неудалённых контрагентов без ИНН — частая задача перед сдачей отчётности.
Основные конструкции
| Конструкция | Зачем нужна |
|---|---|
ВЫБРАТЬ … ИЗ … | Какие поля и из какой таблицы брать |
ПЕРВЫЕ N | Ограничить число строк; спасает при пробных запусках |
РАЗЛИЧНЫЕ | Убрать повторяющиеся строки |
РАЗРЕШЕННЫЕ | Не выдавать ошибку, если часть записей закрыта ограничениями доступа |
ГДЕ | Отбор строк до группировки |
СГРУППИРОВАТЬ ПО + СУММА, КОЛИЧЕСТВО | Свернуть строки и посчитать итоги |
ИМЕЮЩИЕ | Отбор по результату агрегатной функции |
ЛЕВОЕ СОЕДИНЕНИЕ … ПО … | Присоединить данные другой таблицы, сохранив все строки левой |
ОБЪЕДИНИТЬ ВСЕ | Склеить результаты двух запросов в один |
ВЫБОР КОГДА … ТОГДА … ИНАЧЕ … КОНЕЦ | Условное значение поля |
ЕСТЬNULL(Поле, 0) | Заменить NULL после соединения на ноль |
Значения и ссылки внутри текста
- Пустая ссылка и предопределённые элементы:
ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка). - Значение перечисления:
ЗНАЧЕНИЕ(Перечисление.<ИмяПеречисления>.<ИмяЗначения>)— точные имена смотрите в Конфигураторе. - Дата константой:
ДАТАВРЕМЯ(2025, 12, 31). - Комментарий: строка, начинающаяся с
//.
Виртуальные таблицы регистров
Остатки и обороты проще брать не из самого регистра, а из его виртуальных таблиц. Пример для БП 3.0 — остатки по счёту в разрезе первого субконто:
ВЫБРАТЬ
Остатки.Субконто1 КАК Аналитика,
Остатки.СуммаОстатокДт КАК ОстатокДт,
Остатки.СуммаОстатокКт КАК ОстатокКт
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(&НаДату, Счет В ИЕРАРХИИ (&Счет), , ) КАК Остатки
Отбор по счёту, периоду и измерениям пишите в параметрах виртуальной таблицы, а не в ГДЕ. Так платформа отбирает данные до расчёта остатков. Условие в ГДЕ срабатывает уже после расчёта, и запрос по большой базе выполняется заметно дольше.
Параметры и временные таблицы в консоли запросов
Как задать параметр
Параметр в тексте начинается с амперсанда: &НаДату, &Счет, &Организация. Консоль сама находит их в тексте и показывает списком. Порядок работы:
- Напишите запрос с параметрами.
- Обновите список параметров (в большинстве выпусков консоли это делается кнопкой над таблицей параметров или автоматически при выполнении).
- Для каждого параметра выберите тип: дата, число, строка или ссылка на объект (
СправочникСсылка.Организации,ПланСчетовСсылка.Хозрасчетный). - Выберите значение из справочника или введите вручную.
Для отбора по нескольким значениям тип параметра ставят «Список значений», а в тексте пишут Поле В (&Список).
Дата периода. Если в параметр &КонецПериода ввести 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, а полную выборку запускайте вечером. - 🔐 Доступ к данным. Под полными правами консоль показывает всё: зарплаты, паспортные данные, остатки по всем организациям. Выдавать право на открытие внешних обработок рядовым пользователям значит открыть им эти данные.
- 📦 Источник файла. Обработка — это программный код. Берите консоль из дистрибутива ИТС или от проверенного разработчика, а не из случайного архива: внешняя обработка выполняется с правами пользователя, который её открыл.