Разработка и Конфигурация · 9 мин
Как создать консоль запросов в 1С
Как создать консоль запросов в 1С через конфигуратор: добавление обработки, написание кода, выполнение запросов и проверка результата. Примеры и ошибки.
Консоль запросов — это инструмент разработчика и аналитика, который позволяет писать, выполнять и отлаживать запросы на встроенном языке запросов 1С без создания отчётов и изменения конфигурации. С её помощью можно быстро проверить выборку данных, посмотреть остатки по регистрам, найти документы по условию и оценить результат до того, как запрос попадёт в код.
Существует два пути: использовать готовую внешнюю консоль запросов (например, из состава инструментов разработчика) или создать собственную обработку в конфигураторе. Собственная консоль удобна тем, что её можно адаптировать под задачи компании: добавить сохранение шаблонов, вывод в табличный документ, передачу параметров.
Ниже разобран полный цикл создания простой консоли запросов своими силами: от добавления внешней обработки до проверки результата, а также ограничения, типичные ошибки и альтернативы.
Что потребуется перед началом работы
Для создания собственной консоли нужен доступ к конфигуратору с правами на добавление внешних обработок и база, на которой можно безопасно тестировать. Никогда не отлаживайте инструменты сразу в рабочей базе: хотя запросы на выборку не меняют данные, тяжёлый запрос без отборов может надолго заблокировать работу пользователей.
Понадобятся базовые знания: синтаксис языка запросов 1С (ВЫБРАТЬ, ИЗ, ГДЕ, СОЕДИНЕНИЕ), умение создавать управляемые формы и минимальный опыт написания кода на встроенном языке. Если этих навыков нет, проще начать с готовой консоли и разбирать её устройство.
Способ 1: готовая консоль запросов
Самый быстрый вариант — взять готовую внешнюю обработку. В экосистеме 1С распространены консоли из состава «Инструменты разработчика», а также консоли, входящие в демонстрационные конфигурации и библиотеки (например, БСП содержит механизмы для работы с запросами). Такая обработка открывается через Файл → Открыть в режиме 1С:Предприятие и сразу даёт поле для текста запроса, конструктор, параметры и вывод результата.
Плюсы готового решения: конструктор запроса, сохранение списка запросов в файл, работа с временными таблицами и пакетными запросами. Минус — зависимость от стороннего кода и необходимость проверять совместимость с версией платформы и режимом безопасности (в некоторых базах открытие внешних обработок ограничено политиками).
Сравнение вариантов
Подходит для быстрой отладки и анализа данных; ограничение — зависимость от сторонней обработки и возможные запреты безопасности.
Подходит, когда нужны свои функции и контроль над кодом; требует навыков разработки и времени на поддержку.
Подходит для проверки одного конкретного запроса; неудобен для интерактивной отладки множества запросов.
Способ 2: создаём собственную обработку
Откройте конфигуратор и создайте новую внешнюю обработку: Файл → Новый → Внешняя обработка. Задайте имя, например «КонсольЗапросов», и синоним. Затем добавьте основную форму обработки — на ней будет размещён интерфейс консоли.
На форме создайте реквизиты: строковый реквизит неограниченной длины «ТекстЗапроса» (для текста запроса) и реквизит типа «ТаблицаЗначений», например «РезультатЗапроса», для вывода данных. Перетащите реквизиты в дерево элементов формы, для поля текста запроса установите многострочный режим и растягивание по размеру формы. Добавьте команду формы «ВыполнитьЗапрос» и кнопку.
- 1Создайте внешнюю обработку в конфигураторе и добавьте основную форму
- 2Добавьте реквизиты: ТекстЗапроса (строка) и РезультатЗапроса (таблица значений)
- 3Разместите элементы на форме и добавьте команду ВыполнитьЗапрос
- 4Напишите код создания объекта Запрос, установки текста и выполнения
- 5Сохраните обработку, откройте её в режиме 1С:Предприятие и выполните тестовый запрос
Пишем код выполнения запроса
В обработчике команды «ВыполнитьЗапрос» создайте объект «Запрос», присвойте свойству «Текст» значение реквизита формы и выполните метод «Выполнить». Результат выгрузите в таблицу значений реквизита формы через метод «Выгрузить». Обёртка в попытку/исключение обязательна: синтаксические ошибки запроса должны показываться пользователю в виде понятного сообщения, а не обрывать работу.
&НаКлиенте
Процедура ВыполнитьЗапрос(Команда)
ВыполнитьЗапросНаСервере();
КонецПроцедуры
&НаСервере
Процедура ВыполнитьЗапросНаСервере()
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Попытка
Результат = Запрос.Выполнить().Выгрузить();
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
РезультатЗапроса.Загрузить(Результат);
КонецПроцедурыОбратите внимание: выполнение делается в серверной процедуре (директива &НаСервере), потому что доступ к данным возможен только на сервере. Колонки таблицы значений при выгрузке формируются автоматически по полям запроса, поэтому на форме таблицу результата лучше оставить без жёстко заданных колонок либо генерировать их программно.
Добавляем параметры
Большинство реальных запросов используют параметры (&Период, &Организация, &Ссылка). Для них добавьте на форму отдельную таблицу параметров: имя и значение. В коде перед выполнением пройдите по этой таблице и вызовите Запрос.УстановитьПараметр(Имя, Значение) для каждой строки. Это избавит от подстановки значений прямо в текст, что и удобнее, и безопаснее.
Проверяем работу консоли
Сохраните обработку и откройте её в режиме 1С:Предприятие через Файл → Открыть. Начните с простого запроса, например выборки первых десяти элементов справочника с ПЕРВЫЕ 10. Если данные вывелись в таблицу — базовый механизм работает. Затем проверьте запрос с параметром, соединением таблиц и итогами.
Как проверить результат
Таблица заполняется строками за секунды
Ошибка синтаксиса или пустой результат при заведомо имеющихся данных
Отбор по параметру сужает выборку корректно
Параметр игнорируется или возникает ошибка несоответствия типов
Выполняется за приемлемое время на копии базы
Длительное ожидание, блокировки — нужно добавить отборы и индексируемые условия
Типичные ошибки и ограничения
Частая проблема — попытка выполнить запрос на клиенте: в управляемом приложении это невозможно, код должен быть серверным. Вторая типичная ошибка — неограниченная выборка из большого регистра: запрос зависает, а в рабочей базе вызывает блокировки. Третья — игнорирование виртуальных таблиц: для остатков и оборотов используйте виртуальные таблицы регистров с параметрами, а не соединения физических таблиц.
Учитывайте и ограничения платформы: консоль запросов выполняет только запросы на выборку — изменить данные через неё нельзя (для этого нужен другой инструмент). В файловых базах сложные запросы выполняются медленнее, чем в клиент-серверных. Права доступа действуют и в консоли: пользователь увидит только те данные, к которым у него есть доступ.
Развитие консоли: что добавить дальше
После того как базовый вариант заработал, консоль можно расширить: сохранение текстов запросов в файл или хранилище настроек, вывод результата в табличный документ для печати, поддержка пакетных запросов с временными таблицами, вызов стандартного конструктора запроса через объект «КонструкторЗапроса». Каждую функцию добавляйте отдельно и проверяйте на копии базы.
Что важно запомнить
Собственная консоль запросов — это внешняя обработка с формой, полем текста запроса, таблицей результата и серверным кодом выполнения через объект «Запрос». Отлаживайте на копии базы, используйте параметры и ограничения выборки, а для быстрого старта подойдёт готовая консоль из инструментов разработчика.
Частые вопросы
Можно ли изменять данные базы через консоль запросов?
Нет. Язык запросов 1С предназначен только для чтения данных. Для изменения данных нужны отдельные обработки с программной записью объектов, и такие операции следует выполнять только на копии базы.
Почему запрос в консоли работает, а в коде модуля — нет?
Чаще всего дело в контексте выполнения и правах: в модуле запрос может выполняться в привилегированном режиме или наоборот, под пользователем с ограниченными правами. Также проверьте, что параметры в коде имеют те же типы значений, что и при тесте в консоли.
Нужна ли консоль запросов обычному пользователю, а не разработчику?
Обычному пользователю консоль не нужна: она требует знания языка запросов и даёт широкий доступ к данным. Для анализа пользователям лучше подходят готовые отчёты и универсальный отчёт из типовых конфигураций.
Чем консоль запросов отличается от конструктора запроса?
Конструктор — это визуальный помощник для составления текста запроса, встроенный в конфигуратор. Консоль — инструмент для выполнения запроса и просмотра результата в режиме предприятия. Конструктор можно вызывать и из консоли, чтобы ускорить написание текста.
Безопасно ли открывать внешние обработки в рабочей базе?
Только если источник обработки доверенный, а сама обработка не изменяет данные. Внешний код выполняется с правами текущего пользователя и теоретически может содержать вредоносные действия, поэтому непроверенные файлы открывать нельзя.
Почему тяжёлый запрос зависает и что с этим делать?
Причины — отсутствие отборов, соединения без индексируемых полей и обращение к физическим таблицам вместо виртуальных. Добавьте условия ГДЕ по индексированным полям, ограничьте период, используйте ПЕРВЫЕ и параметры виртуальных таблиц.