Работа с консолью запросов в 1С 8.3: от запуска обработки до быстрых выборок по большой базе

· 10 мин

Содержание

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

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

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

Консоль нужна, когда типового отчёта не хватает, а ждать доработки долго. Типичные задачи:

  • 🔍 найти дубли контрагентов или номенклатуры по ИНН, артикулу, наименованию;
  • 📊 получить остатки или обороты по регистру в нужном разрезе, которого нет в отчётах;
  • 🧾 выбрать документы за период по сложному условию: контрагент, сумма, признак проведения;
  • 🛠 проверить, какие движения на самом деле записал документ;
  • 🧪 отладить текст запроса перед тем, как вставить его в отчёт или обработку.

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

У консоли нет собственных данных и настроек учёта. Она только передаёт текст запроса платформе и показывает результат. Поэтому одна и та же обработка работает в БП 3.0, ЗУП 3.1, УТ 11 и любой другой конфигурации на платформе 8.3 — меняются только имена объектов в запросе.

Где взять консоль запросов и как открыть её в разных режимах

В типовые конфигурации консоль не встроена отдельным пунктом меню. Её берут в виде внешней обработки:

  • 📦 версия для управляемых форм от фирмы 1С — распространяется в составе материалов для разработчиков на портале ИТС (нужна подписка);
  • 🌐 бесплатные консоли от сообщества разработчиков — их много, они различаются интерфейсом и набором функций;
  • 💼 старая консоль на обычных формах — работает только в толстом клиенте.

Тонкий клиент, интерфейс «Такси»

  1. Скопируйте файл .epf на свой компьютер.
  2. Нажмите кнопку главного меню (три полоски в левом верхнем углу окна).
  3. Выберите Файл → Открыть и укажите файл обработки.
  4. Если платформа покажет предупреждение о безопасности, подтвердите открытие — при условии, что вы доверяете источнику файла.

Предупреждение выводит механизм «Защита от опасных действий», который появился в платформе 8.3.9. Отключить его можно в свойствах пользователя в Конфигураторе. Делайте это только для разработчиков, а не для всех сотрудников.

Толстый клиент

Здесь работают обе версии: на обычных и на управляемых формах. Путь тот же: Файл → Открыть. Консоль на обычных формах в тонком клиенте не откроется — платформа их там не отображает.

Конфигуратор

В Конфигураторе консоли нет, но есть конструктор запроса. Откройте любой модуль, щёлкните правой кнопкой по тексту и выберите «Конструктор запроса». Соберите запрос мышкой, нажмите «ОК» — готовый текст окажется в модуле. Его удобно скопировать и вставить в консоль.

Подключение через «Дополнительные отчёты и обработки»

В БП 3.0 и других конфигурациях на БСП есть Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки. Добавить туда можно только обработку, у которой есть функция регистрации СведенияОВнешнейОбработке(). Обычная консоль без неё не зарегистрируется — открывайте её через Файл → Открыть.

РежимЧто открытьКак
Тонкий клиентКонсоль на управляемых формахФайл → Открыть
Толстый клиентЛюбая версияФайл → Открыть
КонфигураторКонструктор запросаКонтекстное меню модуля
БСП-конфигурацияВерсия с функцией регистрацииДополнительные обработки

Язык запросов 1С: синтаксис, без которого не обойтись

Минимальный запрос состоит из двух частей: что выбрать и откуда.

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

Чем язык запросов 1С отличается от SQL

SQLЯзык запросов 1СКомментарий
SELECT ... FROMВЫБРАТЬ ... ИЗАнглийские слова тоже работают: SELECT, FROM, WHERE
Таблица dbo._Reference32Справочник.КонтрагентыИмена объектов из конфигурации, а не таблицы СУБД
JOIN по ключуОбращение через точкуДокумент.Контрагент.ИНН — платформа сама сделает соединение
UPDATE, DELETE, INSERTНетЗапрос только читает данные
Временные таблицы #tmpПОМЕСТИТЬ ВТ_ИмяЖивут в пределах пакета запросов
—Виртуальные таблицыОстатки, Обороты, ОстаткиИОбороты, СрезПоследних

Прямой SQL к базе через консоль не выполнить. Платформа переводит запрос 1С в запрос к конкретной СУБД сама. Читать таблицы базы напрямую, в обход 1С, не стоит: их имена служебные, а структура меняется при обновлении конфигурации.

Ключевые конструкции

  • ГДЕ — условие отбора; И, ИЛИ, НЕ, В (...), МЕЖДУ ... И ..., ПОДОБНО "%текст%".
  • СГРУППИРОВАТЬ ПО + агрегаты СУММА, КОЛИЧЕСТВО, МАКСИМУМ, МИНИМУМ, СРЕДНЕЕ.
  • ИМЕЮЩИЕ — условие на результат группировки.
  • ЛЕВОЕ СОЕДИНЕНИЕ ... ПО — соединение двух таблиц.
  • ОБЪЕДИНИТЬ ВСЕ — склеить результаты двух выборок с одинаковыми полями.
  • ЕСТЬNULL(Поле, 0) — подставить ноль, если соединение ничего не нашло.
  • ВЫРАЗИТЬ(Поле КАК Справочник.Номенклатура) — привести поле составного типа к одному типу.
  • &Параметр — значение, которое задаётся в консоли отдельно.

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

Готовые запросы для повседневных задач

Примеры написаны для БП 3.0. В других конфигурациях замените имена объектов — их видно в Конфигураторе в дереве метаданных.

Дубли контрагентов по ИНН

ВЫБРАТЬ
    Контрагенты.ИНН КАК ИНН,
    КОЛИЧЕСТВО(Контрагенты.Ссылка) КАК Карточек
ИЗ
    Справочник.Контрагенты КАК Контрагенты
ГДЕ
    Контрагенты.ИНН <> ""
    И НЕ Контрагенты.ПометкаУдаления
СГРУППИРОВАТЬ ПО
    Контрагенты.ИНН
ИМЕЮЩИЕ
    КОЛИЧЕСТВО(Контрагенты.Ссылка) > 1

Результат — список ИНН, по которым заведено две карточки и больше. Обособленные подразделения имеют общий ИНН с головной организацией, так что не каждая строка — ошибка.

Реализации за период по контрагенту

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

КОНЕЦПЕРИОДА нужен потому, что дата в параметре выбирается с временем 00:00:00. Без него документы последнего дня в выборку не попадут.

Остатки по счёту из регистра бухгалтерии

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

В параметре &Счет выберите нужный счёт, например 41.01. &НаДату — граница остатков: для остатков на конец дня передайте начало следующего дня.

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

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

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

Как ускорить запрос на большой базе

Запрос, который на демо-базе отрабатывает за секунду, на базе в 100 ГБ может идти десять минут и нагружать сервер для всех пользователей. Приёмы, которые дают основной эффект:

  1. Условия — в параметры виртуальной таблицы. Пишите Остатки(&Дата, Счет = &Счет), а не отбор в ГДЕ после получения всех остатков. Во втором случае платформа сначала посчитает остатки по всем счетам.
  2. ПЕРВЫЕ 100 на время отладки. Пока проверяете логику, ограничьте выборку, а потом уберите ограничение.
  3. Осторожно с точкой у составных полей. Регистратор.Номер у поля, которое может ссылаться на десятки видов документов, превращается в десятки соединений. Сузьте тип через ВЫРАЗИТЬ.
  4. Временные таблицы вместо подзапросов в соединениях. Подзапрос в ЛЕВОЕ СОЕДИНЕНИЕ СУБД часто планирует плохо. Положите его в ПОМЕСТИТЬ ... ИНДЕКСИРОВАТЬ ПО.
  5. Без ИЛИ по разным полям в ГДЕ. Такое условие мешает использовать индексы; два запроса через ОБЪЕДИНИТЬ ВСЕ обычно быстрее.
  6. Без функций над полем в условии. НАЧАЛОПЕРИОДА(Дата, ДЕНЬ) = &День медленнее, чем Дата МЕЖДУ &Начало И &Конец.

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

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

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

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

Ещё одна частая ловушка — NULL после левого соединения. Если у товара нет остатка, поле суммы будет не нулём, а NULL, и Сумма + 100 тоже даст NULL. Оборачивайте такие поля в ЕСТЬNULL(Сумма, 0).

Возможности консоли, которыми пользуются не все

Базовый сценарий «написал — выполнил» закрывает не всё. В консоли на управляемых формах и в популярных бесплатных версиях есть ещё:

  • 🧩 Конструктор запроса — кнопка вызова конструктора прямо из консоли, если версия консоли и режим клиента это поддерживают. Иначе собирайте запрос в Конфигураторе и копируйте текст.
  • 📁 Сохранение запросов в файл — набор проверенных запросов можно хранить и открывать повторно, а не набирать заново.
  • 🌳 Вывод итогов деревом — конструкция ИТОГИ ... ПО даёт иерархию с подытогами, консоль показывает её деревом.
  • 🗂 Просмотр временных таблиц пакета — видно, на каком шаге «потерялись» строки.
  • 📤 Выгрузка результата — вывод в табличный документ, который сохраняют в Excel через стандартное сохранение файла.
  • 🧮 Тип значения в ячейке — помогает понять, почему поле составного типа ведёт себя странно.

Разработчикам пригодится и отладчик. Остановитесь на строке после Запрос.Выполнить() и вычислите выражение (Shift+F9) — так видно, что вернул запрос в момент работы кода. Для отладки запросов, собранных программно, это быстрее, чем копировать текст в консоль.

Права доступа и безопасность при работе с консолью

Консоль — инструмент с широким доступом к данным, поэтому её выдают не всем.

  • 🔐 Право на открытие. Чтобы открыть внешнюю обработку через Файл → Открыть, нужно право «Интерактивное открытие внешних отчётов и обработок». В БСП-конфигурациях оно есть у профиля администратора; рядовым пользователям его обычно не дают.
  • 👁 Запрос видит то же, что и пользователь. Ограничения доступа на уровне записей применяются и к запросам из консоли. Если базу настроили так, что менеджер видит только свои документы, консоль под ним покажет только их.
  • 🛡 Данные запросом не изменить. Сам запрос безопасен для базы. Но многие консоли умеют выполнять произвольный код на встроенном языке — а он уже может удалить и перезаписать что угодно.
  • 📄 Персональные данные. Выборка по физлицам, паспортам, зарплате — это обработка персональных данных. Выгрузки в Excel храните и передавайте по правилам, принятым в организации.
  • ⚡ Нагрузка на сервер. Запрос без отборов по регистру за пять лет способен затормозить работу всех пользователей базы.

Берите консоль только из проверенного источника. Внешняя обработка — это исполняемый код, и файл неизвестного происхождения работает с правами того, кто его открыл. Не открывайте присланные по почте .epf под администратором рабочей базы.

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

Источники

  • Федеральный закон от 27.07.2006 № 152-ФЗ «О персональных данных»