Работа с консолью запросов в 1С — обязательный навык для разработчиков, аналитиков и опытных пользователей системы. Этот инструмент позволяет тестировать SQL-подобные запросы на языке 1С, отлаживать сложные выборки и проверять корректность работы с базой данных без написания полноценных обработок. Однако в стандартных конфигурациях (например, 1С:Бухгалтерия или 1С:Управление торговлей) консоль запросов часто отсутствует "из коробки".

В этой статье вы найдёте три актуальных способа добавления консоли запросов в 1С 8.3 — от ручного создания через конфигуратор до использования готовых обработок. Мы разберём нюансы для обычных и управляемых форм, покажем, как избежать типичных ошибок при подключении, и дадим рекомендации по настройке интерфейса для удобной работы. Особое внимание уделим вопросам безопасности: почему не стоит добавлять консоль в рабочие базы без ограничений и как правильно разграничить права доступа.

Зачем нужна консоль запросов в 1С и кому она пригодится

Консоль запросов — это не просто "игрушка для программистов". Она решает конкретные задачи:

  • 🔍 Отладка сложных отчётов. Перед тем как встраивать запрос в отчёт, можно протестировать его прямо в консоли, увидеть структуру результата и время выполнения.
  • 📊 Анализ данных. Быстро получить выборку по нестандартным критериям (например, "показать клиентов, которые заказывали товар X, но не заказывали товар Y").
  • 🛠️ Поиск ошибок. Если отчёт или обработка выдаёт некорректные данные, консоль помогает локализовать проблему — выполнить запрос пошагово и проверить промежуточные результаты.
  • 📚 Обучение. Новичкам проще осваивать язык запросов 1С, когда есть возможность сразу видеть результат выполнения кода.

Кому точно пригодится этот инструмент:

  • 👨‍💻 Разработчикам 1С — для отладки и оптимизации кода.
  • 👩‍🔬 Аналитикам — для оперативного получения данных без ожидания доработок от программистов.
  • 👨‍🏫 Преподавателям 1С — для демонстрации примеров на занятиях.
  • 👨‍💼 Администраторам баз — для диагностики проблем производительности.

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

  • 🚫 Несанкционированному доступу к конфиденциальным данным (зарплаты, персональные данные).
  • 🚫 Замедлению работы базы из-за выполнения "тяжёлых" запросов.
  • 🚫 Случайному удалению или изменению данных (если консоль подключена с правами на модификацию).
📊 Как часто вы используете консоль запросов в 1С?
Ежедневно
Несколько раз в неделю
Редко, по необходимости
Никогда не пользовался

Способ 1: Добавление консоли через конфигуратор (для обычных форм)

Этот метод подходит для 1С:Предприятие 8.3 в режиме обычного приложения. Если вы работаете с управляемыми формами, переходите к второму способу.

Пошаговая инструкция:

  1. Откройте конфигуратор в режиме 1С:Предприятие → Конфигуратор (с правами администратора).
  2. Перейдите в дерево объектов конфигурации: Общие → Обработки.
  3. Создайте новую обработку:
    • 📌 Название: КонсольЗапросов (или любое другое).
    • 📌 Установите флажок Открывать форму в обычном режиме.
  • В открывшемся окне редактирования формы добавьте элементы:
    • 📝 Поле ввода (тип Текст) — для ввода текста запроса.
    • 🖱️ Кнопка с названием Выполнить.
    • 📊 Табличное поле — для вывода результата.
  • Перейдите на вкладку Модуль и вставьте следующий код:
    Процедура Выполнить(Кнопка)
    

    Запрос = Новый Запрос;

    Запрос.Текст = ЭлементыФормы.ТекстЗапроса.Значение;

    Результат = Запрос.Выполнить();

    Выборка = Результат.Выбрать();

    ТаблицаРезультата = ЭлементыФормы.ТаблицаРезультата;

    ТаблицаРезультата.Очистить();

    Пока Выборка.Следующий() Цикл

    НоваяСтрока = ТаблицаРезультата.Добавить();

    Для Каждого Поле Из Выборка.Поля Цикл

    НоваяСтрока.Поля.Добавить(Поле.Имя);

    НоваяСтрока.Значения.Добавить(Поле.Значение);

    КонецЦикла;

    КонецЦикла;

    КонецПроцедуры

  • Сохраните обработку и запустите 1С в режиме 1С:Предприятие.
  • Откройте консоль через меню Файл → Открыть → [Ваша обработка].
  • Имя обработки не содержит пробелов|Поле ввода имеет имя "ТекстЗапроса"|Табличное поле имеет имя "ТаблицаРезультата"|Кнопка имеет процедуру "Выполнить"|Права на выполнение запросов настроены-->

    Если после выполнения запроса таблица остаётся пустой, проверьте:

    • 🔹 Корректность синтаксиса запроса (например, отсутствие опечаток в именах таблиц).
    • 🔹 Права текущего пользователя на чтение данных.
    • 🔹 Наличие данных, соответствующих условиям запроса (иногда запрос syntactically верен, но не возвращает строк из-за жёстких фильтров).
    💡

    Чтобы ускорить работу с консолью, добавьте в модуль обработки "горячие клавиши" для часто используемых шаблонов запросов (например, Ctrl+1 — шаблон выборки справочников, Ctrl+2 — шаблон для регистров накопления).

    Способ 2: Консоль запросов для управляемых форм

    В управляемом приложении (тонкий клиент, веб-клиент) алгоритм добавления консоли отличается. Здесь нельзя просто создать обработку с обычной формой — нужно использовать управляемую форму и учитывать особенности клиент-серверного взаимодействия.

    Инструкция для управляемых форм:

    1. В конфигураторе перейдите в Общие → Обработки и создайте новую обработку с типом Управляемая форма.
    2. На форме разместите:
      • 📝 Поле ввода (тип Строка, имя ТекстЗапроса).
      • 🖱️ Кнопка (Выполнить).
      • 📊 Табличный документ или Динамический список для вывода результата.
    3. В модуле формы добавьте серверную процедуру:
      &НаСервере
      

      Процедура ВыполнитьНаСервере(ТекстЗапроса)

      Запрос = Новый Запрос;

      Запрос.Текст = ТекстЗапроса;

      Результат = Запрос.Выполнить();

      Возврат Результат;

      КонецПроцедуры

      &НаКлиенте

      Процедура Выполнить(Команда)

      Результат = ВыполнитьНаСервере(Элементы.ТекстЗапроса.Значение);

      Выборка = Результат.Выбрать();

      Таблица = Новый ТаблицаЗначений;

      Таблица.Колонки.Добавить("Поля");

      Таблица.Колонки.Добавить("Значения");

      Пока Выборка.Следующий() Цикл

      Для Каждого Поле Из Выборка.Поля Цикл

      Строка = Таблица.Добавить();

      Строка.Поля = Поле.Имя;

      Строка.Значения = Поле.Значение;

      КонецЦикла;

      КонецЦикла;

      Элементы.ТаблицаРезультата.Значение = Таблица;

      КонецПроцедуры

    4. Сохраните обработку и опубликуйте её в списке доступных команд (через Администрирование → Печатные формы, отчёты и обработки).
    5. Ключевые отличия от обычных форм:

      Параметр Обычная форма Управляемая форма
      Разделение кода Весь код выполняется на клиенте Код делится на клиентскую и серверную части (&НаКлиенте, &НаСервере)
      Вывод результата Табличное поле Таблица значений или динамический список
      Производительность Может тормозить при больших выборках Лучше оптимизирована для работы с сервером
      Доступность Только в толстом клиенте Работает в тонком клиенте и веб-браузере

      ⚠️ Внимание: В управляемых формах нельзя напрямую модифицировать данные через консоль (например, выполнять Запрос.ВыполнитьСПаузами() для изменений). Для этого потребуется расширять функционал обработки или использовать внешние отчёты.

      Способ 3: Готовые обработки от сообщества 1С

      Если вам не хочется создавать консоль с нуля, можно воспользоваться готовыми решениями. Наиболее популярные:

      • 📥 "Консоль запросов" от Евгения Гилева — поддерживает подсветку синтаксиса, историю запросов и экспорт результатов в Excel. Ссылка на Инфостарт.
      • 📥 "Универсальная консоль" от Алексея Гаврилова — включает не только запросы, но и выполнение произвольного кода на встроенном языке.
      • 📥 "Query Console" для управляемых форм — оптимизирована для работы в тонком клиенте, имеет встроенный конструктор запросов.

    Как установить готовую обработку:

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

    Преимущества готовых решений:

    • ✅ Экономят время — не нужно писать код с нуля.
    • ✅ Часто содержат дополнительные функции (например, анализ плана выполнения запроса).
    • ✅ Поддерживаются сообществом — можно найти актуальные версии и исправления багов.

    ⚠️ Внимание: Перед установкой обработки из сторонних источников:

    • Проверьте репутацию автора (отзывы, количество загрузок).
    • Просмотрите исходный код на наличие подозрительных конструкций (например, отправки данных по сети).
    • Протестируйте обработку на тестовой базе, а не на рабочей.
    Как проверить обработку на вирусы?

    1. Откройте файл .epf в текстовом редакторе (например, Notepad++).

    2. Проверьте наличие подозрительных строк: соединений с внешними серверами (например, "HTTPСоединение"), выполнения команд ОС ("ВыполнитьКомандуСистемы").

    3. Используйте антивирус с актуальными базами (например, Kaspersky или Dr.Web).

    4. Запустите обработку в песочнице (виртуальной машине) перед использованием на рабочем ПК.

    Типичные ошибки при добавлении консоли и как их исправить

    Даже опытные пользователи 1С сталкиваются с проблемами при настройке консоли запросов. Рассмотрим самые частые ошибки и способы их решения:

    Ошибка Причина Решение
    Ошибка при вызове метода контекста (Выполнить) Опечатка в тексте запроса или неверный синтаксис Проверьте запрос на наличие лишних запятых, скобок. Используйте конструктор запросов для генерации корректного кода.
    Недостаточно прав для выполнения операции У пользователя нет прав на чтение/запись данных Настройте права в Администрирование → Пользователи или запустите консоль от имени администратора.
    Консоль не открывается в тонком клиенте Обработка создана для обычных форм Пересоздайте обработку с типом Управляемая форма (см. Способ 2).
    Поле объекта не обнаружено (ИмяПоля) В запросе указано несуществующее поле Уточните структуру таблицы через Мetadata или конструктор запросов.
    Долгое выполнение запроса (зависание) Запрос не оптимизирован (отсутствуют индексы, слишком широкие выборки) Добавьте условия отбора (ГДЕ), используйте индексированные поля. Для анализа используйте план выполнения (Запрос.Выполнить().ПолучитьПланВыполнения()).

    Если консоль работает медленно, попробуйте:

    • 🔹 Ограничить количество возвращаемых строк (ПЕРВЫЕ 100).
    • 🔹 Использовать ИНДЕКСИРОВАТЬ ПО для часто используемых полей.
    • 🔹 Выгружать результаты в файл, а не отображать в таблице (особенно для больших выборок).
    💡

    Самая частая ошибка новичков — попытка выполнить запрос на изменение данных (INSERT/UPDATE) в консоли без соответствующих прав. По умолчанию большинству пользователей разрешено только чтение!

    Настройка безопасности: как ограничить доступ к консоли

    Добавление консоли запросов в рабочую базу — это всегда риск. Чтобы минимизировать угрозы:

    1. Создайте отдельную роль для работы с консолью:
      • 🔐 Перейдите в Администрирование → Настройки пользователей и прав → Роли.
      • 🔐 Создайте новую роль (например, Разработчик_КонсольЗапросов).
      • 🔐 В правах роли отметьте только необходимые объекты метаданных (например, справочники, документы, регистры).
      • 🔐 Запретите доступ к конфиденциальным данным (зарплата, персональные данные).
    2. Ограничьте выполнение запросов на изменение:
      • 🔒 В модуле обработки добавьте проверку прав перед выполнением запросов с INSERT, UPDATE, DELETE.
      • 🔒 Пример кода для блокировки:
        Если СтрНайти(ТекстЗапроса, " ВСТАВИТЬ ") > 0 Или СтрНайти(ТекстЗапроса, " ОБНОВИТЬ ") > 0 Тогда
        

        Предупреждение("Изменение данных запрещено!", 60);

        Возврат;

        КонецЕсли;

  • Ведите лог запросов:
    • 📜 Добавляйте в обработку запись всех выполненных запросов в регистр сведений или журнал документов.
    • 📜 Указывайте дату, время, имя пользователя и текст запроса.
    • Используйте тестовые базы:
      • 🧪 Для отладки сложных запросов создайте копию рабочей базы.
      • 🧪 Настройте автоматическое обновление тестовой базы (например, раз в неделю).

    Пример кода для логирования запросов:

    Процедура ЗаписатьВЖурнал(ТекстЗапроса, Пользователь)
    

    Лог = Новый ЖурналДокументов.ЛогЗапросов;

    НовыйДокумент = Лог.СоздатьДокумент();

    НовыйДокумент.Дата = ТекущаяДата();

    НовыйДокумент.Пользователь = Пользователь;

    НовыйДокумент.ТекстЗапроса = ТекстЗапроса;

    НовыйДокумент.Записать();

    КонецПроцедуры

    ⚠️ Внимание: Если в вашей организации действуют требования по защите персональных данных (например, 152-ФЗ), убедитесь, что консоль запросов не позволяет получать доступ к:

    • 🔴 Паспортным данным сотрудников.
    • 🔴 Номерам банковских карт или счетам.
    • 🔴 Медицинским сведениям.

    Дополнительные возможности: как расширить функционал консоли

    Базовая консоль запросов решает 80% задач, но её можно доработать для удобства. Вот несколько полезных улучшений:

    • 🔧 Подсветка синтаксиса:
      • Используйте компоненту SyntaxHighlighter или интегрируйте Monaco Editor (как в VS Code).
      • Пример для управляемых форм: добавьте в форму HTML-документ с подключённым скриптом подсветки.
    • 📋 История запросов:
      • Сохраняйте последние 50–100 запросов в регистре сведений.
      • Добавьте выпадающий список для быстрого выбора прошлых запросов.
    • 📤 Экспорт результатов:
      • Кнопки для выгрузки в Excel, JSON, CSV.
      • Пример кода для Excel:
        Процедура ЭкспортироватьВExcel(Таблица)
        

        Excel = Новый COMОбъект("Excel.Application");

        Книга = Excel.Workbooks.Add();

        Лист = Книга.Worksheets(1);

        Для Каждого Строка Из Таблица Цикл

        Для Каждого Колонка Из Таблица.Колонки Цикл

        Лист.Cells(Строка.Индекс + 1, Колонка.Индекс + 1).Value = Строка[Колонка.Имя];

        КонецЦикла;

        КонецЦикла;

        Excel.Visible = Истина;

        КонецПроцедуры

    • Анализ производительности:
      • Добавьте вывод плана выполнения запроса (Запрос.Выполнить().ПолучитьПланВыполнения()).
      • Отображайте время выполнения запроса в миллисекундах.
    • 🤖 Автодополнение:
      • Интегрируйте справочник метаданных для подсказки имён таблиц и полей.
      • Пример: при вводе ВЫБРАТЬ показывайте список доступных таблиц.

    Для реализации этих функций потребуются знания встроенного языка 1С и JavaScript (для управляемых форм). Если вы не готовы писать код самостоятельно, поищите готовые обработки с нужным функционалом на Инфостарте или 1С:ИТС.

    Как ускорить работу с большими выборками?

    1. Используйте ПЕРВЫЕ N для ограничения количества строк.

    2. Выгружайте данные пакетами (например, по 1000 строк за раз).

    3. Для анализа больших объёмов данных используйте внешние СУБД (например, выгружайте данные в SQL Server и анализируйте там).

    4. Настройте индексы на часто используемые поля в запросах.

    FAQ: Частые вопросы по консоли запросов в 1С

    Можно ли добавить консоль запросов в 1С:Зарплата и Управление Персоналом?

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

    Почему консоль не показывает результаты запроса с группировкой?

    Частая ошибка — отсутствие агрегатных функций (например, СУММА, КОЛИЧЕСТВО) в выборке с ГРУППИРОВКА ПО. В языке запросов 1С все поля, не входящие в группировку, должны участвовать в агрегатных функциях. Пример корректного запроса:

    ВЫБРАТЬ
    

    Контрагент,

    СУММА(СуммаДокумента) КАК Итого

    ИЗ

    Документ.РеализацияТоваровУслуг

    ГРУППИРОВКА ПО

    Контрагент

    Как сделать, чтобы консоль запоминала последние запросы между сеансами?

    Для этого нужно сохранять историю запросов в регистр сведений или хранилище значений. Пример реализации:

    1. Создайте регистр сведений ИсторияЗапросов с ресурсами ТекстЗапроса и ДатаВыполнения.
    2. В модуле обработки добавьте запись в регистр после выполнения каждого запроса.
    3. При открытии консоли загружайте последние 10–20 запросов из регистра в выпадающий список.

    Пример кода для сохранения:

    Процедура СохранитьЗапросВИсторию(ТекстЗапроса)
    

    Запись = РегистрыСведений.ИсторияЗапросов.СоздатьМенеджерЗаписи();

    Запись.ТекстЗапроса = ТекстЗапроса;

    Запись.ДатаВыполнения = ТекущаяДата();

    Запись.Записать();

    КонецПроцедуры

    Можно ли выполнить в консоли запрос на изменение данных (INSERT/UPDATE)?

    Технически — да, но:

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

    Пример запроса на обновление (требует прав администратора):

    Запрос = Новый Запрос;
    

    Запрос.Текст =

    "ОБНОВИТЬ Справочник.Номенклатура

    УСТАНОВИТЬ ПометкаУдаления = Истина

    ГДЕ НЕ ПометкаУдаления И Номенклатура.Артикул ПУСТОЙ";

    Результат = Запрос.Выполнить();

    Как перенести консоль запросов в другую базу 1С?

    Есть два способа:

    1. Экспорт/импорт обработки:
      • В исходной базе откройте обработку в конфигураторе.
      • Выберите Файл → Сохранить как... и сохраните файл с расширением .epf.
      • В целевой базе импортируйте файл через Файл → Открыть.
  • Копирование через хранилище конфигурации (если базы связаны):
    • Подключите обе базы к одному хранилищу.
    • Выгрузите обработку из исходной базы и загрузите в целевую.
  • ⚠️ После переноса проверьте:

    • 🔹 Соответствие версий платформы (например, обработка из 8.3.20 может не работать в 8.3.15).
    • 🔹 Наличие всех необходимых ролей и прав в целевой базе.