При переходе с обычных форм на управляемые (УФ) многие разработчики сталкиваются с серьезным ограничением: программный код запросов теперь исполняется преимущественно на сервере. В этой среде платформа запрещает открытие любых интерфейсных окон. Если в обычных формах мы могли прямо из точки останова вызвать форму консоли, то в УФ попытка открыть окно на сервере приведет к ошибке. В данной статье мы разберем современные способы обхода этого ограничения и инструменты, которые позволяют быстро «выбросить» запрос из контекста отладки в визуальный редактор.
Давайте проанализируем ситуацию. Когда выполнение программы останавливается на точке останова в серверном модуле, мы находимся в контексте, где объект Запрос полностью сформирован: у него есть текст, заполнены параметры и, возможно, подготовлен МенеджерВременныхТаблиц. Однако, сервер ничего не знает о графическом интерфейсе пользователя. Чтобы просмотреть запрос в консоли, нам нужно передать данные с сервера на клиент и там инициализировать форму консоли. Рассмотрим подробнее, как это реализовано в профессиональных инструментах.
Это, пожалуй, самый мощный и популярный метод среди профессионалов. Современные версии «Инструментария разработчика» адаптированы для работы в управляемом интерфейсе через механизм расширений. Основная идея заключается в использовании глобальных функций, доступных в любой точке конфигурации.
Разберем алгоритм действий по шагам:
ирОбщ (или аналогичный, в зависимости от версии).Запрос уже инициализирован.ирОбщ.От(Запрос)
Если вы не хотите устанавливать тяжелый инструментарий, существуют «легкие» альтернативы — специализированные обработки-отладчики. Они работают по схожему принципу, но часто требуют ручного вызова функции из табло.
Рассмотрим, как пользоваться такими обработками:
Обработки.ОтладчикЗапросов.Создать().Отладить(Запрос)
Запрос в строку (XML или JSON) и подготовит данные для передачи. В некоторых реализациях вам может потребоваться скопировать полученную строку и вставить ее в консоль запросов в другом сеансе 1С.Бывают ситуации, когда установка расширений запрещена политикой безопасности. Выясним, как можно получить данные запроса штатными средствами. Мы можем попытаться извлечь параметры запроса в текстовом виде.
Посмотрим на пример вызова в табло:
// Сериализация параметров в строку XML
СериализаторXDTO.ЗаписатьXML(Запрос.Параметры)
Хотя этот метод не откроет консоль автоматически, он позволит вам увидеть значения всех параметров (даже сложных типов) в окне отладки. Текст запроса при этом можно просто скопировать из свойства Запрос.Текст. Далее вы можете вручную вставить эти данные в любую стандартную консоль запросов.
Самая сложная часть отладки в УФ — это МенеджерВременныхТаблиц. Если ваш запрос использует временные таблицы, созданные ранее, простой передачи текста запроса будет недостаточно. Консоль выдаст ошибку, так как в ее контексте этих таблиц не существует.
Проанализируем, как профессиональные инструменты решают эту задачу:
От(Запрос) инструмент анализирует привязанный менеджер временных таблиц.ТаблицаЗначений.Если запрос выполняется внутри фонового задания или сложной цепочки вызовов, где точка останова не срабатывает, мы можем прибегнуть к замеру производительности. Рассмотрим этот путь:
Запрос.Выполнить().Подводя итог, мы рекомендуем следующий порядок действий для эффективной работы:
Для постоянной разработки: Однозначно используйте Инструментарий разработчика в виде расширения. Это дает бесшовную интеграцию и автоматическое открытие окон. Вы один раз вызываете команду в табло, и перед вами открывается готовая к работе консоль со всеми данными.
Для разовых задач на чужих базах: Используйте компактные внешние обработки-консоли, которые поддерживают метод «вызова из отладки». Это позволит не вносить изменения в конфигурацию и при этом быстро получать доступ к данным запроса.
Помните, что отладка на сервере требует включенного режима отладки (параметр -debug у службы агента сервера 1С). Без этого точка останова на серверных модулях просто не сработает, и вы не сможете воспользоваться ни одним из описанных выше методов.