Консоль запросов в 1С 8.3 от открытия файла до разбора медленного запроса

· 9 мин

Содержание

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

Типичная ситуация: бухгалтер видит в оборотно-сальдовой ведомости странный остаток и просит программиста «посмотреть, откуда он». Программист открывает консоль, за две минуты пишет запрос к регистру и показывает, какой документ сделал движение. Главное при этом — настроить консоль запросов так, чтобы она помогала, а не тормозила рабочую базу.

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

Консоль распространяется как внешняя обработка. Источников два, и они заметно отличаются по возможностям.

ВариантЧто умеетКому подходит
Типовая консоль из комплекта универсальных обработок 1С (по подписке ИТС)Текст запроса, параметры, конструктор запроса, вывод результата и времени выполненияБухгалтеру-аналитику, администратору
Бесплатные наборы для разработчиков сторонних авторов (например, «Инструменты разработчика»)Плюс показ SQL-текста, разбор пакетов, выполнение кода, историяПрограммисту 1С

Для управляемого интерфейса «Такси» нужна версия консоли для управляемых форм. Версия для обычных форм в тонком клиенте не откроется.

Запуск консоли запросов: пошагово

  1. Скачайте файл обработки и сохраните его в постоянную папку, например C:\1C\Tools\.
  2. Запустите базу в режиме «1С:Предприятие» под пользователем с полными правами.
  3. Откройте Главное меню (кнопка с тремя полосками слева вверху) → Файл → Открыть.
  4. Выберите файл .epf.
  5. Платформа покажет предупреждение безопасности о внешнем файле. Подтвердите открытие, если файл из проверенного источника.

Если пункта Файл → Открыть нет или появляется «Нарушение прав доступа!», у пользователя нет права на интерактивное открытие внешних обработок. Его дают роли администратора. Не выдавайте это право рядовым пользователям: внешняя обработка может выполнить любой код.

Первоначальная настройка консоли

  • 🗂 Сохранение запросов. Большинство консолей хранят набор запросов во внешнем файле. Заведите отдельный файл под каждую базу, чтобы не путать «рабочие» запросы с тестовыми.
  • 🔢 Ограничение вывода. Включите ограничение числа строк результата (если консоль его поддерживает) или пишите ВЫБРАТЬ ПЕРВЫЕ 1000. Миллион строк в таблице формы съест память клиента.
  • 🧾 Вывод итогов. Проверьте, где выводятся итоги: в дереве или плоской таблицей. Для запросов с ИТОГИ удобнее дерево.

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

Язык запросов в консоли: синтаксис и обращение к метаданным

В консоли пишут не SQL, а запросы на языке 1С. Платформа сама переводит их в SQL для той СУБД, на которой стоит база: файловой, MS SQL Server или PostgreSQL. Отсюда главное ограничение: язык запросов 1С только читает данные. Команд UPDATE, DELETE, INSERT в нём нет, поэтому обычный запрос в консоли базу не испортит.

Из чего состоит запрос

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

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

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

Как обращаться к метаданным

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

Самое ценное — виртуальные таблицы регистров:

Виртуальная таблицаЧто даётПример
ОстаткиОстатки на момент времениРегистрНакопления.ТоварыНаСкладах.Остатки(&Дата)
ОборотыОбороты за периодРегистрБухгалтерии.Хозрасчетный.Обороты(&Начало, &Конец)
ОстаткиИОборотыНачальный остаток, обороты, конечныйАналог оборотно-сальдовой ведомости
СрезПоследнихПоследняя запись периодического регистра сведенийАктуальные цены, курсы валют

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

Ключевое слово РАЗРЕШЕННЫЕ после ВЫБРАТЬ нужно, если в базе настроено ограничение доступа на уровне записей. Без него пользователь с ограниченными правами получит ошибку доступа вместо отфильтрованных строк.

Параметры в консоли запросов и динамическое формирование текста

Даты, организации и счета в текст запроса не вписывают руками. Их передают параметрами: имя начинается с амперсанда.

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

Как заполнить параметры

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

Частые типы и подвохи:

ПараметрТипПодвох
Дата остатковДатаОстатки берутся на начало указанного момента. Чтобы включить весь день, передайте конец дня, например 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. Без неё план из журнала не прочитать.
Перед запуском консоли на рабочей базе
Выполнено: 0 / 5

Внешние консоли с режимом «выполнить код» умеют менять данные. Это уже не чтение: такой код записывает объекты, а при ошибке может задвоить движения. Перед подобными действиями сделайте резервную копию базы и согласуйте изменения по регламенту.

Ошибки в консоли запросов и что они означают

Платформа пишет в сообщении текст ошибки и координаты в формате {(строка, столбец)}. Начинайте с них: курсор в консоли можно поставить на нужную строку и сразу увидеть место.

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

Отдельно о двух ситуациях без текста ошибки:

  • ⏳ Запрос выполняется бесконечно. Поставьте ПЕРВЫЕ 100 и сократите период. Если и так долго — смотрите таблицу «что тормозит» выше: почти всегда виноваты условие вне параметров виртуальной таблицы или соединение с подзапросом.
  • 🧩 Пустой результат там, где данные точно есть. Проверьте тип параметра: дата без времени, ссылка не из того справочника, одно значение вместо списка. Пустой параметр не выдаёт ошибку, а просто отсекает все строки.

Частые вопросы о консоли запросов

Можно ли в консоли запросов изменить или удалить данные?
Нет. Язык запросов 1С только читает. Менять данные умеют лишь консоли с режимом выполнения произвольного кода, и это уже программирование, а не запрос.
Почему консоль не открывается в веб-клиенте или тонком клиенте?
Скорее всего, у вас версия для обычных форм. Для интерфейса «Такси» нужна консоль, сделанная на управляемых формах.
Можно ли вставить в консоль запрос прямо из отчёта на СКД?
Да. В Конфигураторе откройте схему компоновки отчёта, скопируйте текст набора данных и вставьте в консоль. Параметры СКД заполните вручную.
Чем консоль запросов отличается от отчёта «Универсальный отчёт»?
Универсальный отчёт строит выборку по одному объекту через настройки. Консоль позволяет соединять любые таблицы, писать пакеты и временные таблицы.
Видны ли в консоли данные, скрытые от пользователя правами?
Консоль работает с правами того, кто её открыл. Под пользователем с ограниченными ролями запрос вернёт ошибку доступа или, с РАЗРЕШЕННЫЕ, только доступные строки.