Работа с консолью запросов в 1С — обязательный навык для разработчиков, аналитиков и опытных пользователей системы. Этот инструмент позволяет тестировать SQL-подобные запросы на языке 1С, отлаживать сложные выборки и проверять корректность работы с базой данных без написания полноценных обработок. Однако в стандартных конфигурациях (например, 1С:Бухгалтерия или 1С:Управление торговлей) консоль запросов часто отсутствует "из коробки".
В этой статье вы найдёте три актуальных способа добавления консоли запросов в 1С 8.3 — от ручного создания через конфигуратор до использования готовых обработок. Мы разберём нюансы для обычных и управляемых форм, покажем, как избежать типичных ошибок при подключении, и дадим рекомендации по настройке интерфейса для удобной работы. Особое внимание уделим вопросам безопасности: почему не стоит добавлять консоль в рабочие базы без ограничений и как правильно разграничить права доступа.
Зачем нужна консоль запросов в 1С и кому она пригодится
Консоль запросов — это не просто "игрушка для программистов". Она решает конкретные задачи:
- 🔍 Отладка сложных отчётов. Перед тем как встраивать запрос в отчёт, можно протестировать его прямо в консоли, увидеть структуру результата и время выполнения.
- 📊 Анализ данных. Быстро получить выборку по нестандартным критериям (например, "показать клиентов, которые заказывали товар X, но не заказывали товар Y").
- 🛠️ Поиск ошибок. Если отчёт или обработка выдаёт некорректные данные, консоль помогает локализовать проблему — выполнить запрос пошагово и проверить промежуточные результаты.
- 📚 Обучение. Новичкам проще осваивать язык запросов 1С, когда есть возможность сразу видеть результат выполнения кода.
Кому точно пригодится этот инструмент:
- 👨💻 Разработчикам 1С — для отладки и оптимизации кода.
- 👩🔬 Аналитикам — для оперативного получения данных без ожидания доработок от программистов.
- 👨🏫 Преподавателям 1С — для демонстрации примеров на занятиях.
- 👨💼 Администраторам баз — для диагностики проблем производительности.
При этом не рекомендуется добавлять консоль в рабочие базы для рядовых пользователей. Без контроля это может привести к:
- 🚫 Несанкционированному доступу к конфиденциальным данным (зарплаты, персональные данные).
- 🚫 Замедлению работы базы из-за выполнения "тяжёлых" запросов.
- 🚫 Случайному удалению или изменению данных (если консоль подключена с правами на модификацию).
Способ 1: Добавление консоли через конфигуратор (для обычных форм)
Этот метод подходит для 1С:Предприятие 8.3 в режиме обычного приложения. Если вы работаете с управляемыми формами, переходите к второму способу.
Пошаговая инструкция:
- Откройте конфигуратор в режиме
1С:Предприятие → Конфигуратор(с правами администратора). - Перейдите в дерево объектов конфигурации:
Общие → Обработки. - Создайте новую обработку:
- 📌 Название:
КонсольЗапросов(или любое другое). - 📌 Установите флажок
Открывать форму в обычном режиме.
- 📌 Название:
- 📝
Поле ввода(типТекст) — для ввода текста запроса. - 🖱️
Кнопкас названиемВыполнить. - 📊
Табличное поле— для вывода результата.
Модуль и вставьте следующий код:
Процедура Выполнить(Кнопка)
Запрос = Новый Запрос;
Запрос.Текст = ЭлементыФормы.ТекстЗапроса.Значение;
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
ТаблицаРезультата = ЭлементыФормы.ТаблицаРезультата;
ТаблицаРезультата.Очистить();
Пока Выборка.Следующий() Цикл
НоваяСтрока = ТаблицаРезультата.Добавить();
Для Каждого Поле Из Выборка.Поля Цикл
НоваяСтрока.Поля.Добавить(Поле.Имя);
НоваяСтрока.Значения.Добавить(Поле.Значение);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
1С:Предприятие.Файл → Открыть → [Ваша обработка].Имя обработки не содержит пробелов|Поле ввода имеет имя "ТекстЗапроса"|Табличное поле имеет имя "ТаблицаРезультата"|Кнопка имеет процедуру "Выполнить"|Права на выполнение запросов настроены-->
Если после выполнения запроса таблица остаётся пустой, проверьте:
- 🔹 Корректность синтаксиса запроса (например, отсутствие опечаток в именах таблиц).
- 🔹 Права текущего пользователя на чтение данных.
- 🔹 Наличие данных, соответствующих условиям запроса (иногда запрос syntactically верен, но не возвращает строк из-за жёстких фильтров).
Чтобы ускорить работу с консолью, добавьте в модуль обработки "горячие клавиши" для часто используемых шаблонов запросов (например, Ctrl+1 — шаблон выборки справочников, Ctrl+2 — шаблон для регистров накопления).
Способ 2: Консоль запросов для управляемых форм
В управляемом приложении (тонкий клиент, веб-клиент) алгоритм добавления консоли отличается. Здесь нельзя просто создать обработку с обычной формой — нужно использовать управляемую форму и учитывать особенности клиент-серверного взаимодействия.
Инструкция для управляемых форм:
- В конфигураторе перейдите в
Общие → Обработкии создайте новую обработку с типомУправляемая форма. - На форме разместите:
- 📝
Поле ввода(типСтрока, имяТекстЗапроса). - 🖱️
Кнопка(Выполнить). - 📊
Табличный документилиДинамический списокдля вывода результата.
- 📝
- В модуле формы добавьте серверную процедуру:
&НаСервереПроцедура ВыполнитьНаСервере(ТекстЗапроса)
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Результат = Запрос.Выполнить();
Возврат Результат;
КонецПроцедуры
&НаКлиенте
Процедура Выполнить(Команда)
Результат = ВыполнитьНаСервере(Элементы.ТекстЗапроса.Значение);
Выборка = Результат.Выбрать();
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Поля");
Таблица.Колонки.Добавить("Значения");
Пока Выборка.Следующий() Цикл
Для Каждого Поле Из Выборка.Поля Цикл
Строка = Таблица.Добавить();
Строка.Поля = Поле.Имя;
Строка.Значения = Поле.Значение;
КонецЦикла;
КонецЦикла;
Элементы.ТаблицаРезультата.Значение = Таблица;
КонецПроцедуры
- Сохраните обработку и опубликуйте её в списке доступных команд (через
Администрирование → Печатные формы, отчёты и обработки). - 📥 "Консоль запросов" от Евгения Гилева — поддерживает подсветку синтаксиса, историю запросов и экспорт результатов в Excel. Ссылка на Инфостарт.
- 📥 "Универсальная консоль" от Алексея Гаврилова — включает не только запросы, но и выполнение произвольного кода на встроенном языке.
- 📥 "Query Console" для управляемых форм — оптимизирована для работы в тонком клиенте, имеет встроенный конструктор запросов.
Ключевые отличия от обычных форм:
| Параметр | Обычная форма | Управляемая форма |
|---|---|---|
| Разделение кода | Весь код выполняется на клиенте | Код делится на клиентскую и серверную части (&НаКлиенте, &НаСервере) |
| Вывод результата | Табличное поле | Таблица значений или динамический список |
| Производительность | Может тормозить при больших выборках | Лучше оптимизирована для работы с сервером |
| Доступность | Только в толстом клиенте | Работает в тонком клиенте и веб-браузере |
⚠️ Внимание: В управляемых формах нельзя напрямую модифицировать данные через консоль (например, выполнять Запрос.ВыполнитьСПаузами() для изменений). Для этого потребуется расширять функционал обработки или использовать внешние отчёты.
Способ 3: Готовые обработки от сообщества 1С
Если вам не хочется создавать консоль с нуля, можно воспользоваться готовыми решениями. Наиболее популярные:
Как установить готовую обработку:
- Скачайте файл обработки (
.epfили.erf) с проверенного источника (например, Инфостарт, 1С:ИТС). - В 1С перейдите в
Файл → Открытьи выберите скачанный файл. - Если обработка требует дополнительных прав, запустите её от имени администратора.
- Настройте интерфейс под свои нужды (например, включите автоподстановку или историю запросов).
Преимущества готовых решений:
- ✅ Экономят время — не нужно писать код с нуля.
- ✅ Часто содержат дополнительные функции (например, анализ плана выполнения запроса).
- ✅ Поддерживаются сообществом — можно найти актуальные версии и исправления багов.
⚠️ Внимание: Перед установкой обработки из сторонних источников:
- Проверьте репутацию автора (отзывы, количество загрузок).
- Просмотрите исходный код на наличие подозрительных конструкций (например, отправки данных по сети).
- Протестируйте обработку на тестовой базе, а не на рабочей.
Как проверить обработку на вирусы?
1. Откройте файл .epf в текстовом редакторе (например, Notepad++).
2. Проверьте наличие подозрительных строк: соединений с внешними серверами (например, "HTTPСоединение"), выполнения команд ОС ("ВыполнитьКомандуСистемы").
3. Используйте антивирус с актуальными базами (например, Kaspersky или Dr.Web).
4. Запустите обработку в песочнице (виртуальной машине) перед использованием на рабочем ПК.
Типичные ошибки при добавлении консоли и как их исправить
Даже опытные пользователи 1С сталкиваются с проблемами при настройке консоли запросов. Рассмотрим самые частые ошибки и способы их решения:
| Ошибка | Причина | Решение |
|---|---|---|
Ошибка при вызове метода контекста (Выполнить) |
Опечатка в тексте запроса или неверный синтаксис | Проверьте запрос на наличие лишних запятых, скобок. Используйте конструктор запросов для генерации корректного кода. |
Недостаточно прав для выполнения операции |
У пользователя нет прав на чтение/запись данных | Настройте права в Администрирование → Пользователи или запустите консоль от имени администратора. |
| Консоль не открывается в тонком клиенте | Обработка создана для обычных форм | Пересоздайте обработку с типом Управляемая форма (см. Способ 2). |
Поле объекта не обнаружено (ИмяПоля) |
В запросе указано несуществующее поле | Уточните структуру таблицы через Мetadata или конструктор запросов. |
| Долгое выполнение запроса (зависание) | Запрос не оптимизирован (отсутствуют индексы, слишком широкие выборки) | Добавьте условия отбора (ГДЕ), используйте индексированные поля. Для анализа используйте план выполнения (Запрос.Выполнить().ПолучитьПланВыполнения()). |
Если консоль работает медленно, попробуйте:
- 🔹 Ограничить количество возвращаемых строк (
ПЕРВЫЕ 100). - 🔹 Использовать
ИНДЕКСИРОВАТЬ ПОдля часто используемых полей. - 🔹 Выгружать результаты в файл, а не отображать в таблице (особенно для больших выборок).
Самая частая ошибка новичков — попытка выполнить запрос на изменение данных (INSERT/UPDATE) в консоли без соответствующих прав. По умолчанию большинству пользователей разрешено только чтение!
Настройка безопасности: как ограничить доступ к консоли
Добавление консоли запросов в рабочую базу — это всегда риск. Чтобы минимизировать угрозы:
- Создайте отдельную роль для работы с консолью:
- 🔐 Перейдите в
Администрирование → Настройки пользователей и прав → Роли. - 🔐 Создайте новую роль (например,
Разработчик_КонсольЗапросов). - 🔐 В правах роли отметьте только необходимые объекты метаданных (например, справочники, документы, регистры).
- 🔐 Запретите доступ к конфиденциальным данным (зарплата, персональные данные).
- 🔐 Перейдите в
- Ограничьте выполнение запросов на изменение:
- 🔒 В модуле обработки добавьте проверку прав перед выполнением запросов с
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С все поля, не входящие в группировку, должны участвовать в агрегатных функциях. Пример корректного запроса:
ВЫБРАТЬ
Контрагент,
СУММА(СуммаДокумента) КАК Итого
ИЗ
Документ.РеализацияТоваровУслуг
ГРУППИРОВКА ПО
Контрагент
Как сделать, чтобы консоль запоминала последние запросы между сеансами?
Для этого нужно сохранять историю запросов в регистр сведений или хранилище значений. Пример реализации:
- Создайте регистр сведений
ИсторияЗапросовс ресурсамиТекстЗапросаиДатаВыполнения. - В модуле обработки добавьте запись в регистр после выполнения каждого запроса.
- При открытии консоли загружайте последние 10–20 запросов из регистра в выпадающий список.
Пример кода для сохранения:
Процедура СохранитьЗапросВИсторию(ТекстЗапроса)
Запись = РегистрыСведений.ИсторияЗапросов.СоздатьМенеджерЗаписи();
Запись.ТекстЗапроса = ТекстЗапроса;
Запись.ДатаВыполнения = ТекущаяДата();
Запись.Записать();
КонецПроцедуры
Можно ли выполнить в консоли запрос на изменение данных (INSERT/UPDATE)?
Технически — да, но:
- 🔹 По умолчанию у большинства пользователей нет прав на модификацию данных через запросы.
- 🔹 В управляемых формах для этого требуется серверный контекст с правами на изменение.
- 🔹 Рекомендация: Для массовых изменений лучше использовать специализированные обработки или внешние отчёты, где можно добавить контроль целостности данных и логирование.
Пример запроса на обновление (требует прав администратора):
Запрос = Новый Запрос;
Запрос.Текст =
"ОБНОВИТЬ Справочник.Номенклатура
УСТАНОВИТЬ ПометкаУдаления = Истина
ГДЕ НЕ ПометкаУдаления И Номенклатура.Артикул ПУСТОЙ";
Результат = Запрос.Выполнить();
Как перенести консоль запросов в другую базу 1С?
Есть два способа:
- Экспорт/импорт обработки:
- В исходной базе откройте обработку в конфигураторе.
- Выберите
Файл → Сохранить как...и сохраните файл с расширением.epf. - В целевой базе импортируйте файл через
Файл → Открыть.
- Подключите обе базы к одному хранилищу.
- Выгрузите обработку из исходной базы и загрузите в целевую.
⚠️ После переноса проверьте:
- 🔹 Соответствие версий платформы (например, обработка из 8.3.20 может не работать в 8.3.15).
- 🔹 Наличие всех необходимых ролей и прав в целевой базе.