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

· 9 мин

Содержание

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

Консоль нужна, когда отчёт показывает «не то», когда надо найти дубли, сверить остатки или быстро выгрузить список, которого нет ни в одном стандартном отчёте. Ниже — как работать с ней от запуска до плана выполнения.

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

В типовых конфигурациях консоли в интерфейсе обычно нет. Её берут из комплекта универсальных обработок ИТС: там есть версия для управляемых форм (для 8.3 и тонкого клиента ) и старая — для обычных форм.

Открытие внешней обработки

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

Открывать внешние обработки может только пользователь с правом на интерактивное открытие внешних обработок. Обычно оно есть у роли «Администратор». Если пункта Файл → Открыть нет или появляется ошибка прав — дело в ролях пользователя, а не в файле.

Как подключить консоль, чтобы не искать файл каждый раз

Если консоль нужна регулярно, добавьте её в справочник дополнительных обработок: Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки. Тогда она будет открываться из раздела, и права на неё можно выдать точечно.

Что есть в окне консоли

ОбластьЗачем нужна
Поле текста запросаЗдесь пишут или вставляют запрос
Кнопка конструктораОткрывает конструктор запроса — тот же, что в Конфигураторе
Таблица параметровЗначения для &Параметров из текста
Область результатаТаблица (или дерево при ИТОГИ) с выбранными строками
Список запросовМожно держать несколько запросов и переключаться между ними

💡 Если вы не помните имена таблиц и полей, начните с конструктора. Он показывает все объекты метаданных базы и сам расставит синонимы и соединения.

2. Язык запросов 1С: структура и синтаксис

Запрос 1С похож на SQL, но пишется по-русски (английские ключевые слова тоже допустимы). Обращаются не к таблицам СУБД, а к объектам конфигурации: Справочник.Номенклатура, Документ.РеализацияТоваровУслуг, РегистрБухгалтерии.Хозрасчетный.

Порядок предложений

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

Полный порядок такой:

  1. ВЫБРАТЬ — поля (с РАЗЛИЧНЫЕ, ПЕРВЫЕ N, РАЗРЕШЕННЫЕ).
  2. ПОМЕСТИТЬ — если результат идёт во временную таблицу.
  3. ИЗ — источники и соединения.
  4. ГДЕ — отбор строк.
  5. СГРУППИРОВАТЬ ПО и ИМЕЮЩИЕ — группировка и отбор по агрегатам.
  6. ОБЪЕДИНИТЬ [ВСЕ] — склейка с другим запросом.
  7. УПОРЯДОЧИТЬ ПО, затем ИТОГИ ПО.

Что полезно знать с первого дня

  • 🔹 ПЕРВЫЕ 100 спасает от выгрузки миллиона строк при первой пробе запроса.
  • 🔹 РАЗРЕШЕННЫЕ нужно, если у пользователя настроены ограничения на уровне записей. Без него запрос под таким пользователем упадёт с ошибкой прав.
  • 🔹 Через точку можно читать реквизиты ссылок: Реализация.Контрагент.ИНН. Удобно, но каждая точка — это скрытое соединение.
  • 🔹 Комментарии пишут через //, как в модулях.
  • 🔹 Строки берут в кавычки, даты — в функцию ДАТАВРЕМЯ(2026, 3, 31).

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

У регистров есть виртуальные таблицы: Остатки, Обороты, ОстаткиИОбороты, СрезПоследних. Остаток по счёту 41.01 в Бухгалтерии предприятия 3.0 берут так:

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

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

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

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

Всё, что начинается с &, — параметр: &Дата, &Счет, &Организация. Консоль находит их в тексте и выводит списком.

  1. Нажмите кнопку заполнения параметров из текста (в большинстве консолей она в шапке таблицы параметров).
  2. Для каждого параметра выберите тип: дата, число, строка или ссылка (например, ПланСчетовСсылка.Хозрасчетный).
  3. Задайте значение. Для ссылки откроется форма выбора — выберите счёт 41.01 или нужную организацию.
  4. Если нужен список значений (для условия В (&Склады)), выберите тип «Список значений» и добавьте несколько элементов.

Параметр-дата «31.03.2026» означает 31 марта, 00:00:00. Условие Дата МЕЖДУ &Начало И &Конец потеряет почти весь последний день. Пишите КОНЕЦПЕРИОДА(&Конец, ДЕНЬ).

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

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ВТ.Контрагент КАК Контрагент,
	КОЛИЧЕСТВО(ВТ.Документ) КАК ЧислоДокументов
ИЗ
	ВТ_Реализации КАК ВТ
СГРУППИРОВАТЬ ПО
	ВТ.Контрагент
УПОРЯДОЧИТЬ ПО
	ЧислоДокументов УБЫВ

Временная таблица живёт, пока выполняется пакет. После выполнения её нет, поэтому отдельно «посмотреть ВТ_Реализации» потом не получится.

💡 Чтобы проверить промежуточный шаг, временно уберите строку ПОМЕСТИТЬ у нужного запроса и сотрите всё, что ниже. Консоль покажет результат этого шага. Многие консоли умеют показывать результат любого запроса пакета без правки текста — посмотрите, есть ли у вашей версии выбор номера запроса рядом с результатом.

4. Отладка соединений и объединений: откуда берутся дубли и пропуски

Самые частые «чудеса» в консоли — лишние строки после соединения и пропавшие строки там, где их ждали.

Строки размножились после ЛЕВОГО СОЕДИНЕНИЯ

Если в правой таблице на одну строку левой приходится три записи, в результате будет три строки. Суммы из левой таблицы утроятся.

Проверка за минуту:

ВЫБРАТЬ
	КОЛИЧЕСТВО(*) КАК ВсегоСтрок,
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Т.Документ) КАК УникальныхДокументов
ИЗ
	ВТ_Итог КАК Т

Если числа разные — соединение размножает строки. Уточните условие связи или сначала сгруппируйте правую таблицу во временную.

Левое соединение работает как внутреннее

Типичная причина — условие на поле правой таблицы стоит в ГДЕ. Строки, у которых справа ничего не нашлось, получают NULL и отсекаются.

  • ❌ ГДЕ Цены.ВидЦены = &ВидЦены
  • ✅ перенесите условие в ПО: ПО Товары.Номенклатура = Цены.Номенклатура И Цены.ВидЦены = &ВидЦены

Для полей правой таблицы используйте ЕСТЬNULL(Цены.Цена, 0), иначе суммы и сравнения с NULL дадут пустоту.

ОБЪЕДИНИТЬ и ОБЪЕДИНИТЬ ВСЕ

ВариантЧто делаетКогда брать
ОБЪЕДИНИТЬ ВСЕСклеивает все строки как естьПочти всегда: быстрее и честно показывает данные
ОБЪЕДИНИТЬУбирает полностью одинаковые строкиКогда дубли точно не нужны и это осознанно

Поля склеиваются по порядку, а не по именам. Имена и типы колонок берутся из первого запроса. Если во втором запросе поля переставлены, суммы попадут не в ту колонку, и ошибки консоль не покажет.

💡 При отладке выполняйте каждую часть объединения отдельно и сравнивайте число строк. Сумма частей при ОБЪЕДИНИТЬ ВСЕ должна совпасть с итогом.

5. Скорость запроса: замер времени и план выполнения

Простой замер

Большинство консолей показывают время выполнения рядом с результатом. Выполните запрос два раза подряд: первый прогон часто медленнее из-за холодного кэша СУБД, ориентируйтесь на второй.

Тяжёлый запрос к рабочей базе нагружает сервер для всех пользователей. Запросы без ПЕРВЫЕ и без отбора по периоду гоняйте на копии базы или в нерабочее время.

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

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

Как увидеть план выполнения

В клиент-серверной базе план запроса пишет технологический журнал. Создайте файл logcfg.xml в папке conf установленной платформы (например, C:\Program Files\1cv8\conf\) на сервере 1С:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="C:\techlog" history="2">
    <event>
      <eq property="name" value="DBMSSQL"/>
    </event>
    <property name="all"/>
  </log>
  <plansql/>
</config>

Выполните запрос в консоли. В логах появится событие с текстом SQL-запроса и свойством planSQLText — это план от СУБД. В нём ищите полное сканирование больших таблиц (Table Scan, Seq Scan) и неожиданные вложенные циклы.

Удалите logcfg.xml сразу после замера. С планами журнал за час может вырасти на гигабайты и забить диск сервера.

Для файловой базы план СУБД не получить. Там помогает замер производительности в Конфигураторе при отладке и сравнение вариантов запроса по времени.

6. Как сохранить запросы и выгрузить результат в Excel

Сохранение текстов запросов

Консоль хранит набор запросов вместе с параметрами в отдельном файле. Сохраните его через команду записи в файл на панели консоли — и при следующем открытии загрузите обратно. Удобно держать один файл на задачу: «сверка 62», «дубли контрагентов».

💡 Готовый текст можно просто скопировать в блокнот. При вставке консоль сама найдёт параметры, останется заполнить значения.

Выгрузка результата

  1. Выполните запрос.
  2. В таблице результата нажмите Ещё → Вывести список….
  3. Отметьте нужные колонки и выберите вывод в табличный документ.
  4. В открывшемся документе: Главное меню → Файл → Сохранить как.
  5. Тип файла — «Лист Excel 2007-… (*.xlsx)».

Для больших выборок (десятки тысяч строк) выгрузка через табличный документ идёт долго. Сузьте период или уберите лишние поля — ссылочные колонки с представлениями тяжелее простых.

Результат запроса — это данные базы, включая персональные данные сотрудников и контрагентов. Не оставляйте выгрузки на общих дисках.

7. Ошибки в консоли запросов и что с ними делать

Платформа указывает место ошибки: строку, позицию и маркер <<?>> перед проблемным словом. Начинайте разбор с него.

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

Ошибки, которые консоль не покажет

  • 🔸 Суммы задвоились из-за соединения — запрос отработал «без ошибок».
  • 🔸 Перепутан порядок полей в ОБЪЕДИНИТЬ ВСЕ.
  • 🔸 Отбор по ПометкаУдаления забыт, и в выборку попали удалённые элементы.
  • 🔸 Взяты непроведённые документы: нет условия Проведен.

Сверяйте итог запроса хотя бы с одним стандартным отчётом, например с оборотно-сальдовой ведомостью по тому же счёту и периоду.

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

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