Консоль запросов в 1С 8.3 от открытия файла до разбора медленного запроса
Содержание
Консоль запросов в 1С 8.3 — это внешняя обработка (файл .epf). Её открывают в режиме «1С:Предприятие» через Главное меню → Файл → Открыть, пишут запрос на языке запросов 1С и нажимают «Выполнить». Результат появляется в таблице под текстом. Отдельно консоль не устанавливают, в типовых конфигурациях её нет среди команд разделов.
Типичная ситуация: бухгалтер видит в оборотно-сальдовой ведомости странный остаток и просит программиста «посмотреть, откуда он». Программист открывает консоль, за две минуты пишет запрос к регистру и показывает, какой документ сделал движение. Главное при этом — настроить консоль запросов так, чтобы она помогала, а не тормозила рабочую базу.
Где взять консоль запросов и как её запустить в базе
Консоль распространяется как внешняя обработка. Источников два, и они заметно отличаются по возможностям.
| Вариант | Что умеет | Кому подходит |
|---|---|---|
| Типовая консоль из комплекта универсальных обработок 1С (по подписке ИТС) | Текст запроса, параметры, конструктор запроса, вывод результата и времени выполнения | Бухгалтеру-аналитику, администратору |
| Бесплатные наборы для разработчиков сторонних авторов (например, «Инструменты разработчика») | Плюс показ SQL-текста, разбор пакетов, выполнение кода, история | Программисту 1С |
Для управляемого интерфейса «Такси» нужна версия консоли для управляемых форм. Версия для обычных форм в тонком клиенте не откроется.
Запуск консоли запросов: пошагово
- Скачайте файл обработки и сохраните его в постоянную папку, например
C:\1C\Tools\. - Запустите базу в режиме «1С:Предприятие» под пользователем с полными правами.
- Откройте
Главное меню(кнопка с тремя полосками слева вверху) →Файл→Открыть. - Выберите файл
.epf. - Платформа покажет предупреждение безопасности о внешнем файле. Подтвердите открытие, если файл из проверенного источника.
Если пункта Файл → Открыть нет или появляется «Нарушение прав доступа!», у пользователя нет права на интерактивное открытие внешних обработок. Его дают роли администратора. Не выдавайте это право рядовым пользователям: внешняя обработка может выполнить любой код.
Первоначальная настройка консоли
- 🗂 Сохранение запросов. Большинство консолей хранят набор запросов во внешнем файле. Заведите отдельный файл под каждую базу, чтобы не путать «рабочие» запросы с тестовыми.
- 🔢 Ограничение вывода. Включите ограничение числа строк результата (если консоль его поддерживает) или пишите
ВЫБРАТЬ ПЕРВЫЕ 1000. Миллион строк в таблице формы съест память клиента. - 🧾 Вывод итогов. Проверьте, где выводятся итоги: в дереве или плоской таблицей. Для запросов с
ИТОГИудобнее дерево.
Если база работает через публикацию на веб-сервере, консоль открывается так же, через Файл → Открыть в браузере. Файл загрузится с вашего компьютера.
Язык запросов в консоли: синтаксис и обращение к метаданным
В консоли пишут не SQL, а запросы на языке 1С. Платформа сама переводит их в SQL для той СУБД, на которой стоит база: файловой, MS SQL Server или PostgreSQL. Отсюда главное ограничение: язык запросов 1С только читает данные. Команд UPDATE, DELETE, INSERT в нём нет, поэтому обычный запрос в консоли базу не испортит.
Из чего состоит запрос
ВЫБРАТЬ
Номенклатура.Ссылка КАК Товар,
Номенклатура.Артикул КАК Артикул
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
НЕ Номенклатура.ПометкаУдаления
УПОРЯДОЧИТЬ ПО
Номенклатура.Наименование
Основные конструкции:
- 📌
ВЫБРАТЬ … ИЗ … ГДЕ— что выбрать, откуда и с каким условием. - 📌
СГРУППИРОВАТЬ ПОиИМЕЮЩИЕ— группировка и условие на агрегаты (СУММА,КОЛИЧЕСТВО,МАКСИМУМ). - 📌
ЛЕВОЕ СОЕДИНЕНИЕ … ПО— связь таблиц. Внутреннее, правое и полное тоже есть. - 📌
ОБЪЕДИНИТЬ ВСЕ— склейка результатов нескольких выборок. - 📌
ПОМЕСТИТЬ— временная таблица внутри пакета запросов. Запросы пакета разделяют точкой с запятой. - 📌
ИТОГИ ПО— промежуточные итоги для вывода деревом.
Как обращаться к метаданным
Таблицы называют по имени объекта метаданных: Справочник.Контрагенты, Документ.РеализацияТоваровУслуг, РегистрНакопления.ТоварыНаСкладах, РегистрБухгалтерии.Хозрасчетный. Табличная часть пишется через точку: Документ.РеализацияТоваровУслуг.Товары.
Самое ценное — виртуальные таблицы регистров:
| Виртуальная таблица | Что даёт | Пример |
|---|---|---|
Остатки | Остатки на момент времени | РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата) |
Обороты | Обороты за период | РегистрБухгалтерии.Хозрасчетный.Обороты(&Начало, &Конец) |
ОстаткиИОбороты | Начальный остаток, обороты, конечный | Аналог оборотно-сальдовой ведомости |
СрезПоследних | Последняя запись периодического регистра сведений | Актуальные цены, курсы валют |
Точные имена объектов в своей конфигурации проще всего не угадывать, а взять из конструктора запроса. В консоли он открывается кнопкой на панели над текстом или через контекстное меню поля текста. Конструктор показывает дерево всех таблиц базы и сам расставляет синтаксис.
Ключевое слово РАЗРЕШЕННЫЕ после ВЫБРАТЬ нужно, если в базе настроено ограничение доступа на уровне записей. Без него пользователь с ограниченными правами получит ошибку доступа вместо отфильтрованных строк.
Параметры в консоли запросов и динамическое формирование текста
Даты, организации и счета в текст запроса не вписывают руками. Их передают параметрами: имя начинается с амперсанда.
ВЫБРАТЬ
Остатки.Субконто1 КАК Контрагент,
Остатки.СуммаОстатокДт КАК Долг
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(
&НаДату,
Счет В ИЕРАРХИИ (&Счет),
,
Организация = &Организация) КАК Остатки
ГДЕ
Остатки.СуммаОстатокДт > 0
Как заполнить параметры
- Напишите запрос с параметрами
&НаДату,&Счет,&Организация. - Перейдите на вкладку или в таблицу параметров консоли. Большинство консолей сами считывают имена параметров из текста.
- Для каждого параметра выберите тип: дата, ссылка на справочник, план счетов , список значений.
- Задайте значения и выполните запрос.
Частые типы и подвохи:
| Параметр | Тип | Подвох |
|---|---|---|
| Дата остатков | Дата | Остатки берутся на начало указанного момента. Чтобы включить весь день, передайте конец дня, например 31.03 23:59:59 |
| Счёт | Ссылка на план счетов | В ИЕРАРХИИ захватывает субсчета: для счёта 62 попадут 62.01, 62.02 |
| Несколько складов | Список значений | В условии пишите В (&Склады), а не = &Склады |
Динамическое формирование запроса
Консоль удобна, чтобы отладить запрос перед переносом в код отчёта или обработки. Когда часть условий нужна не всегда, в коде текст собирают по частям. Пример на встроенном языке:
Запрос = Новый Запрос;
ТекстЗапроса =
"ВЫБРАТЬ
| Реализация.Ссылка КАК Документ,
| Реализация.СуммаДокумента КАК Сумма
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Реализация
|ГДЕ
| Реализация.Дата МЕЖДУ &Начало И &Конец
| И Реализация.Проведен";
Если ЗначениеЗаполнено(Контрагент) Тогда
ТекстЗапроса = ТекстЗапроса + "
| И Реализация.Контрагент = &Контрагент";
Запрос.УстановитьПараметр("Контрагент", Контрагент);
КонецЕсли;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("Начало", НачалоДня(ДатаНачала));
Запрос.УстановитьПараметр("Конец", КонецДня(ДатаОкончания));
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Строка(Выборка.Документ) + ": " + Формат(Выборка.Сумма, "ЧДЦ=2"));
КонецЦикла;
Значения пользователя всегда передавайте через УстановитьПараметр, а не вклеивайте строкой в текст. Так не сломаются кавычки в наименованиях и не будет проблем с форматом дат.
Анализ производительности запроса и план выполнения
Консоль показывает время выполнения запроса. Это первый ориентир: если отчёт пользователя тормозит, скопируйте его запрос в консоль и замерьте каждую часть пакета отдельно.
Где смотреть план выполнения
Консоль показывает текст на языке 1С, а СУБД выполняет SQL. План запроса живёт на стороне СУБД. Способы его получить:
- 🔍 Технологический журнал. В файле
logcfg.xmlвключают событиеDBMSSQL(для MS SQL) илиDBPOSTGRS(для PostgreSQL) и элемент<plansql/>. В журнал попадут SQL-текст, длительность и план. Журнал пишется на сервере 1С, и он быстро растёт: включайте на 15–30 минут под конкретный замер. - 🔍 Средства СУБД. Для MS SQL — профилировщик или расширенные события, для PostgreSQL —
EXPLAIN ANALYZEнад SQL-текстом из журнала. - 🔍 Консоли сторонних авторов. Часть из них умеет показывать SQL-текст запроса и план прямо в форме, если у пользователя есть доступ.
В файловой базе плана в привычном виде нет. Там помогает только замер времени и упрощение запроса.
Что чаще всего тормозит
| Признак в тексте | Почему медленно | Как переписать |
|---|---|---|
Условие на виртуальную таблицу в ГДЕ | Платформа сначала считает все остатки, потом фильтрует | Перенесите условие в параметры таблицы: Остатки(&Дата, Склад = &Склад) |
| Соединение с подзапросом или виртуальной таблицей | СУБД ошибается в оценке числа строк | Сначала ПОМЕСТИТЬ во временную таблицу, затем соединение |
| Обращение через точку к полю составного типа | Платформа соединяет со всеми возможными таблицами | ВЫРАЗИТЬ(Поле КАК Документ.РеализацияТоваровУслуг) |
ИЛИ в условии на разные поля | Индекс не используется | Разбейте на две выборки и ОБЪЕДИНИТЬ ВСЕ |
| Большая временная таблица в соединении | Полный перебор | Добавьте ИНДЕКСИРОВАТЬ ПО по полю соединения |
Тяжёлый запрос из консоли на рабочей серверной базе нагружает ту же СУБД, что и пользователи. Долгие выборки по регистрам за несколько лет запускайте вне рабочего времени или на копии базы.
Консоль запросов в администрировании и обслуживании базы
Консоль не заменяет средства обслуживания. Реиндексацию, пересчёт итогов и проверку ссылочной целостности делают в Конфигураторе: Администрирование → Тестирование и исправление. Для этой процедуры нужен монопольный доступ к базе. Консоль же помогает найти проблему до того, как выгонять пользователей.
Приёмы, которыми пользуется администратор:
- 🔗 Поиск битых ссылок. Соединяете документ со справочником и ищете строки, где справочника нет:
ВЫБРАТЬ
Реализация.Ссылка КАК Документ
ИЗ
Документ.РеализацияТоваровУслуг КАК Реализация
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
ПО Реализация.Контрагент = Контрагенты.Ссылка
ГДЕ
Контрагенты.Ссылка ЕСТЬ NULL
И Реализация.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
Это те самые «<Объект не найден>» в формах.
- 📊 Отрицательные остатки. Выборка из
Остаткис условиемКоличествоОстаток < 0сразу показывает склад и товар. - 🧮 Сверка документа и движений. Выборка из регистра с отбором
Регистратор = &Документпоказывает, что документ записал на самом деле. - 🗃 Объём таблиц. Запрос
КОЛИЧЕСТВО(*)по регистру за каждый год показывает, где копится основной объём базы. - 🧭 Имена таблиц СУБД. Функция
ПолучитьСтруктуруХраненияБазыДанных()во встроенном языке сопоставляет объекты метаданных и таблицы СУБД вида_AccumRg1234. Без неё план из журнала не прочитать.
Внешние консоли с режимом «выполнить код» умеют менять данные. Это уже не чтение: такой код записывает объекты, а при ошибке может задвоить движения. Перед подобными действиями сделайте резервную копию базы и согласуйте изменения по регламенту.
Ошибки в консоли запросов и что они означают
Платформа пишет в сообщении текст ошибки и координаты в формате {(строка, столбец)}. Начинайте с них: курсор в консоли можно поставить на нужную строку и сразу увидеть место.
Отдельно о двух ситуациях без текста ошибки:
- ⏳ Запрос выполняется бесконечно. Поставьте
ПЕРВЫЕ 100и сократите период. Если и так долго — смотрите таблицу «что тормозит» выше: почти всегда виноваты условие вне параметров виртуальной таблицы или соединение с подзапросом. - 🧩 Пустой результат там, где данные точно есть. Проверьте тип параметра: дата без времени, ссылка не из того справочника, одно значение вместо списка. Пустой параметр не выдаёт ошибку, а просто отсекает все строки.
Частые вопросы о консоли запросов
Можно ли в консоли запросов изменить или удалить данные?
Почему консоль не открывается в веб-клиенте или тонком клиенте?
Можно ли вставить в консоль запрос прямо из отчёта на СКД?
Чем консоль запросов отличается от отчёта «Универсальный отчёт»?
Видны ли в консоли данные, скрытые от пользователя правами?
РАЗРЕШЕННЫЕ, только доступные строки.