Консоль запросов 1С 8.3: запуск, параметры, отладка и выгрузка

· 10 мин

Содержание

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

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

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

В типовых конфигурациях 1С 8.3 консоль не встроена в интерфейс. Её берут отдельно:

  • 📦 Стандартная консоль от фирмы 1С — входит в набор технологических обработок, который распространяется через информационно-технологическое сопровождение. Есть версия для управляемых форм (работает в тонком клиенте) и старая — для обычных форм.
  • 🧰 Консоли сторонних разработчиков — расширенные версии с подсветкой синтаксиса, историей запросов, замером времени. Логика работы у них та же.

Скачивайте обработки только из проверенных источников: внешняя обработка исполняет код с правами пользователя, который её открыл.

Пошаговый запуск

  1. Запустите базу в режиме 1С:Предприятие под пользователем с полными правами.
  2. Откройте меню Файл → Открыть (в интерфейсе «Такси» — через значок меню в правом верхнем углу или сочетание Ctrl+O).
  3. Выберите файл консоли .epf.
  4. Если платформа покажет предупреждение безопасности — подтвердите открытие. Это штатная защита от опасных действий, она срабатывает на любой внешний файл.
  5. Консоль откроется в отдельном окне. Можно работать.

Если консоль не открывается

Что видитеПричинаЧто сделать
Пункта Файл → Открыть нетУ пользователя нет права на интерактивное открытие внешних обработокВойти под администратором или добавить право через профиль группы доступа
Форма открывается пустой или с ошибкойКонсоль для обычных форм запущена в тонком клиентеВзять версию для управляемых форм или запустить толстый клиент с ключом /RunModeOrdinaryApplication
Ошибка про версию платформыОбработка сохранена в более новой платформеОбновить платформу или взять консоль, сохранённую под вашу версию

Сохраните файл консоли в постоянную папку и добавьте его в «Избранное» через историю открытых файлов. Так не придётся искать его каждый раз.

Из чего состоит окно консоли запросов

Внешний вид зависит от версии, но основные зоны есть везде:

  • 📝 Поле текста запроса — сюда пишут или вставляют запрос.
  • 🗂 Список запросов — дерево сохранённых запросов. Удобно держать «библиотеку» проверок под рукой.
  • ⚙️ Таблица параметров — значения для &Параметров из текста.
  • 📊 Результат — таблица или дерево с итогами, количество строк, иногда время выполнения.

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

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

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

Язык запросов 1С только читает данные. Изменить или удалить запись в базе обычным запросом нельзя — в этом смысле консоль безопасна.

Базовая структура запроса:

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

Этот запрос выводит первые 100 непроведённых и не помеченных на удаление реализаций. Имя документа в вашей конфигурации может отличаться — проверьте его в дереве конструктора.

Ключевые слова, которые нужны чаще всего

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

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

Для остатков и оборотов не нужно считать движения вручную. Регистры накопления и бухгалтерии дают виртуальные таблицы:

  • .Остатки(&Период, Условие) — остатки на момент;
  • .Обороты(&Начало, &Конец, Периодичность, Условие) — обороты за период;
  • .ОстаткиИОбороты(...) — всё сразу;
  • .СрезПоследних(&Период, Условие) — для периодических регистров сведений.
ВЫБРАТЬ
    Остатки.Номенклатура,
    Остатки.КоличествоОстаток
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Склад = &Склад) КАК Остатки
ГДЕ
    Остатки.КоличествоОстаток < 0

Запрос найдёт отрицательные остатки на складе на дату. Имя регистра зависит от конфигурации, его легко найти в конструкторе.

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

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

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

Всё, что в тексте начинается с &, — параметр. Консоль собирает их из текста в таблицу параметров (командой заполнения параметров или автоматически — зависит от версии).

Порядок такой:

  1. Напишите запрос с параметрами, например &Дата, &Склад, &Организация.
  2. Обновите таблицу параметров — в ней появятся строки с этими именами.
  3. Для каждой строки выберите тип: дата, число, строка, ссылка на справочник или документ.
  4. Укажите значение. Для ссылки откроется форма выбора из базы.
  5. Выполните запрос.

Частая ловушка с датами. Параметр типа «Дата» без времени означает начало дня 00:00:00. Если в виртуальную таблицу Остатки передать 31.03 без времени, остатки посчитаются на начало 31 марта, без движений этого дня. Чтобы взять конец дня, укажите время 23:59:59 или передайте 01.04.

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

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

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

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

ВЫБРАТЬ
    ВТ.Номенклатура,
    ВТ.Сумма
ИЗ
    ВТ_Продажи КАК ВТ
ГДЕ
    ВТ.Сумма > 100000

Что стоит знать о временных таблицах:

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

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

Как пользоваться консолью запросов для анализа производительности

Консоль подходит не только для выборок, но и для поиска медленных мест. Начните с простого — с времени выполнения.

Замер времени

Большинство консолей показывают время выполнения в миллисекундах. Порядок работы:

  1. Выполните запрос два-три раза. Первый прогон часто медленнее из-за холодного кэша СУБД.
  2. Запишите среднее время.
  3. Измените одно место: перенесите условие в параметры виртуальной таблицы, уберите подзапрос, добавьте временную таблицу.
  4. Сравните время. Меняйте по одному фактору, иначе не поймёте, что помогло.

План выполнения запроса

Для клиент-серверной базы платформа переводит запрос 1С в SQL. Чтобы увидеть этот SQL и план, включают технологический журнал. В файле logcfg.xml в каталоге настроек платформы описывают сбор событий DBMSSQL (для MS SQL) или DBPOSTGRS (для PostgreSQL) и добавляют элемент <plansql/>. После выполнения запроса из консоли в логах появится текст SQL и план.

Альтернатива для MS SQL — посмотреть фактический план средствами самой СУБД, перехватив запрос профилировщиком.

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

Что чаще всего тормозит

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

Выгрузка результата и перенос запроса в код

Выгрузка в Excel и другие форматы

Результат в консоли — это таблица, которую легко забрать:

  • 📋 Через буфер обмена. Выделите строки, Ctrl+C, вставьте в Excel. Подходит для пары сотен строк.
  • 💾 Через табличный документ. Если консоль выводит результат в табличный документ, сохраните его через Файл → Сохранить как и выберите формат: xlsx, mxl, csv, html, pdf.
  • 🔁 Через «Вывести список ». В таблице результата вызовите контекстное меню, выберите Вывести список..., отметьте колонки и сформируйте табличный документ — дальше сохранение как выше.

Перед выгрузкой ссылочные поля дают в Excel только представление (наименование). Если нужен код или ИНН — добавьте их в запрос отдельными полями: Контрагент.ИНН КАК ИНН.

Перенос в модуль, отчёт или обмен

Текст запроса из консоли переносится в код без изменений. Шаблон в модуле выглядит так:

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ...";
Запрос.УстановитьПараметр("Дата", КонецДня(ДатаОтчета));
Результат = Запрос.Выполнить().Выгрузить();

Тот же текст подходит для источника данных в схеме компоновки, если отчёт строите через СКД. Отлаженный в консоли запрос экономит время: синтаксис и логика уже проверены на живых данных.

Для внешних систем данные обычно отдают не через консоль, а через стандартный интерфейс OData, HTTP-сервисы или обмен. Консоль здесь нужна, чтобы заранее проверить, что именно вы собираетесь отдавать.

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

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

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

Ошибки подхода, а не синтаксиса

  • ❌ Проверять остатки по документам, а не по регистру. Документ может быть не проведён или проведён с ошибкой. Источник правды для остатков — регистр.
  • ❌ Сравнивать итог консоли с отчётом без тех же отборов. Отчёт может учитывать организацию, подразделение, вид учёта. Повторите в запросе все отборы отчёта.
  • ❌ Запускать тяжёлые запросы днём на рабочей базе. Длинный запрос нагружает сервер СУБД и замедляет работу всех пользователей. Отлаживайте на копии или в нерабочее время.

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

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