Консоль запросов 1С 8.3: запуск, параметры, отладка и выгрузка
Содержание
Консоль запросов — это внешняя обработка (файл .epf), которая позволяет выполнить запрос к базе 1С прямо в режиме 1С:Предприятие и сразу увидеть результат в таблице. Чтобы ей пользоваться, откройте файл через Файл → Открыть, вставьте текст запроса, заполните параметры и нажмите «Выполнить».
Консоль нужна, когда отчёт показывает странную цифру, а разобраться хочется по первичным данным: найти документы без проведения, проверить остатки на дату, посмотреть, откуда в регистре взялась строка. Писать код и править конфигурацию не требуется.
Где взять консоль запросов и как её запустить
В типовых конфигурациях 1С 8.3 консоль не встроена в интерфейс. Её берут отдельно:
- 📦 Стандартная консоль от фирмы 1С — входит в набор технологических обработок, который распространяется через информационно-технологическое сопровождение. Есть версия для управляемых форм (работает в тонком клиенте) и старая — для обычных форм.
- 🧰 Консоли сторонних разработчиков — расширенные версии с подсветкой синтаксиса, историей запросов, замером времени. Логика работы у них та же.
Скачивайте обработки только из проверенных источников: внешняя обработка исполняет код с правами пользователя, который её открыл.
Пошаговый запуск
- Запустите базу в режиме 1С:Предприятие под пользователем с полными правами.
- Откройте меню
Файл → Открыть(в интерфейсе «Такси» — через значок меню в правом верхнем углу или сочетаниеCtrl+O). - Выберите файл консоли
.epf. - Если платформа покажет предупреждение безопасности — подтвердите открытие. Это штатная защита от опасных действий, она срабатывает на любой внешний файл.
- Консоль откроется в отдельном окне. Можно работать.
Если консоль не открывается
| Что видите | Причина | Что сделать |
|---|---|---|
Пункта Файл → Открыть нет | У пользователя нет права на интерактивное открытие внешних обработок | Войти под администратором или добавить право через профиль группы доступа |
| Форма открывается пустой или с ошибкой | Консоль для обычных форм запущена в тонком клиенте | Взять версию для управляемых форм или запустить толстый клиент с ключом /RunModeOrdinaryApplication |
| Ошибка про версию платформы | Обработка сохранена в более новой платформе | Обновить платформу или взять консоль, сохранённую под вашу версию |
Сохраните файл консоли в постоянную папку и добавьте его в «Избранное» через историю открытых файлов. Так не придётся искать его каждый раз.
Из чего состоит окно консоли запросов
Внешний вид зависит от версии, но основные зоны есть везде:
- 📝 Поле текста запроса — сюда пишут или вставляют запрос.
- 🗂 Список запросов — дерево сохранённых запросов. Удобно держать «библиотеку» проверок под рукой.
- ⚙️ Таблица параметров — значения для
&Параметровиз текста. - 📊 Результат — таблица или дерево с итогами, количество строк, иногда время выполнения.
Из поля текста вызывается конструктор запроса — тот же, что в Конфигураторе. Его удобно открыть, если не помните имена таблиц: слева дерево всех объектов базы, справа — выбранные поля. Конструктор сам пишет текст, остаётся нажать «ОК».
Набор запросов консоль умеет сохранить в файл и загрузить обратно. Это стоит делать сразу: полезные запросы копятся быстро, а при закрытии окна без сохранения они пропадают.
Язык запросов в консоли: синтаксис на примерах
Язык запросов 1С только читает данные. Изменить или удалить запись в базе обычным запросом нельзя — в этом смысле консоль безопасна.
Базовая структура запроса:
ВЫБРАТЬ ПЕРВЫЕ 100
Реализация.Ссылка КАК Документ,
Реализация.Дата КАК Дата,
Реализация.Контрагент КАК Контрагент,
Реализация.СуммаДокумента КАК Сумма
ИЗ
Документ.РеализацияТоваровУслуг КАК Реализация
ГДЕ
Реализация.Проведен = ЛОЖЬ
И НЕ Реализация.ПометкаУдаления
УПОРЯДОЧИТЬ ПО
Дата
Этот запрос выводит первые 100 непроведённых и не помеченных на удаление реализаций. Имя документа в вашей конфигурации может отличаться — проверьте его в дереве конструктора.
Ключевые слова, которые нужны чаще всего
| Конструкция | Зачем |
|---|---|
ВЫБРАТЬ ПЕРВЫЕ N | Ограничить число строк, чтобы не повесить клиент |
РАЗЛИЧНЫЕ | Убрать дубли строк |
ГДЕ | Отбор строк |
СГРУППИРОВАТЬ ПО + СУММА(), КОЛИЧЕСТВО() | Свернуть строки и посчитать агрегаты |
ИМЕЮЩИЕ | Отбор по уже посчитанному агрегату |
ЛЕВОЕ СОЕДИНЕНИЕ ... ПО | Связать две таблицы, не теряя строки первой |
ОБЪЕДИНИТЬ ВСЕ | Склеить результаты двух запросов в один |
ИТОГИ ... ПО | Получить дерево с промежуточными итогами |
Виртуальные таблицы регистров
Для остатков и оборотов не нужно считать движения вручную. Регистры накопления и бухгалтерии дают виртуальные таблицы:
.Остатки(&Период, Условие)— остатки на момент;.Обороты(&Начало, &Конец, Периодичность, Условие)— обороты за период;.ОстаткиИОбороты(...)— всё сразу;.СрезПоследних(&Период, Условие)— для периодических регистров сведений.
ВЫБРАТЬ
Остатки.Номенклатура,
Остатки.КоличествоОстаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Склад = &Склад) КАК Остатки
ГДЕ
Остатки.КоличествоОстаток < 0
Запрос найдёт отрицательные остатки на складе на дату. Имя регистра зависит от конфигурации, его легко найти в конструкторе.
Условие на измерения пишите в скобках виртуальной таблицы, а не в ГДЕ. В скобках отбор срабатывает до расчёта остатков, в ГДЕ — после. Разница во времени на большой базе бывает в десятки раз.
Параметры и временные таблицы в консоли запросов
Как задать параметры
Всё, что в тексте начинается с &, — параметр. Консоль собирает их из текста в таблицу параметров (командой заполнения параметров или автоматически — зависит от версии).
Порядок такой:
- Напишите запрос с параметрами, например
&Дата,&Склад,&Организация. - Обновите таблицу параметров — в ней появятся строки с этими именами.
- Для каждой строки выберите тип: дата, число, строка, ссылка на справочник или документ.
- Укажите значение. Для ссылки откроется форма выбора из базы.
- Выполните запрос.
Частая ловушка с датами. Параметр типа «Дата» без времени означает начало дня 00:00:00. Если в виртуальную таблицу Остатки передать 31.03 без времени, остатки посчитаются на начало 31 марта, без движений этого дня. Чтобы взять конец дня, укажите время 23:59:59 или передайте 01.04.
Для списка значений (несколько складов, несколько организаций) задайте у параметра тип «Список значений» и в тексте используйте В (&Склады).
Пакетные запросы и временные таблицы
Сложную выборку удобнее собирать по шагам. Первый запрос кладёт данные во временную таблицу, следующий её читает. Запросы в пакете разделяются точкой с запятой.
ВЫБРАТЬ
Продажи.Номенклатура КАК Номенклатура,
СУММА(Продажи.Сумма) КАК Сумма
ПОМЕСТИТЬ ВТ_Продажи
ИЗ
РегистрНакопления.Продажи.Обороты(&Начало, &Конец, , ) КАК Продажи
СГРУППИРОВАТЬ ПО
Продажи.Номенклатура
ИНДЕКСИРОВАТЬ ПО
Номенклатура
;
ВЫБРАТЬ
ВТ.Номенклатура,
ВТ.Сумма
ИЗ
ВТ_Продажи КАК ВТ
ГДЕ
ВТ.Сумма > 100000
Что стоит знать о временных таблицах:
- 🔹 Имя задаётся словом
ПОМЕСТИТЬ, обычно с префиксомВТ_, чтобы не спутать с объектами базы. - 🔹 Временная таблица живёт, пока жив менеджер временных таблиц. В консоли — в рамках одного выполнения пакета.
- 🔹
ИНДЕКСИРОВАТЬ ПОполезно, если по полю потом соединяют таблицы на тысячах строк. На маленькой выборке индекс только тратит время. - 🔹
УНИЧТОЖИТЬ ВТ_Продажиосвобождает память в длинных пакетах.
Многие консоли показывают результат каждого запроса пакета отдельно. Это лучший способ отладки: видно, на каком шаге «пропали» строки.
Как пользоваться консолью запросов для анализа производительности
Консоль подходит не только для выборок, но и для поиска медленных мест. Начните с простого — с времени выполнения.
Замер времени
Большинство консолей показывают время выполнения в миллисекундах. Порядок работы:
- Выполните запрос два-три раза. Первый прогон часто медленнее из-за холодного кэша СУБД.
- Запишите среднее время.
- Измените одно место: перенесите условие в параметры виртуальной таблицы, уберите подзапрос, добавьте временную таблицу.
- Сравните время. Меняйте по одному фактору, иначе не поймёте, что помогло.
План выполнения запроса
Для клиент-серверной базы платформа переводит запрос 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-сервисы или обмен. Консоль здесь нужна, чтобы заранее проверить, что именно вы собираетесь отдавать.
Ошибки при работе с консолью запросов и что они значат
Консоль показывает текст ошибки и позицию в формате {(строка, столбец)}. По ней сразу видно место в запросе.
Ошибки подхода, а не синтаксиса
- ❌ Проверять остатки по документам, а не по регистру. Документ может быть не проведён или проведён с ошибкой. Источник правды для остатков — регистр.
- ❌ Сравнивать итог консоли с отчётом без тех же отборов. Отчёт может учитывать организацию, подразделение, вид учёта. Повторите в запросе все отборы отчёта.
- ❌ Запускать тяжёлые запросы днём на рабочей базе. Длинный запрос нагружает сервер СУБД и замедляет работу всех пользователей. Отлаживайте на копии или в нерабочее время.