Как отлаживать код в управляемом приложении 1С: аналог «Табло» и создание временного флага отладки

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Переход с обычных форм на управляемое приложение в платформе «1С:Предприятие» часто вызывает у разработчиков легкое замешательство. Многие привычные инструменты, которые годами помогали нам быстро находить ошибки в режиме «Предприятия», либо изменили свое местоположение, либо вовсе исчезли. Одним из таких инструментов является системное «Табло».

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

  1. Как и чем заменить отсутствующее системное «Табло» в пользовательском интерфейсе.
  2. Как изящно и с минимальными трудозатратами внедрить временный флаг отладки (для себя или конкретного пользователя) без долгого перестроения метаданных конфигурации.

---

Часть 1. Куда исчезло «Табло» и как теперь вычислять выражения в режиме Предприятия

В обычных формах (в версиях платформы 7.7–8.1) в режиме Предприятия существовало встроенное системное окно «Табло». Оно позволяло разработчику или администратору «на лету» писать небольшие строки кода на встроенном языке, вычислять значения реквизитов и даже вызывать экспортные функции. С переходом на управляемые формы (начиная с версии 8.2) разработчики платформы приняли решение скрыть этот инструмент из пользовательского режима, оставив его исключительно прерогативой Конфигуратора.

Давайте выясним, как мы можем обойти это ограничение в современных реалиях.

Способ 1. Использование встроенного отладчика в Конфигураторе

Если мы ведем полноценную разработку, штатное «Табло» никуда не исчезло — оно просто переместилось в среду разработки. Мы можем использовать горячие клавиши Ctrl + Alt + W для вызова панели «Табло» или сочетание клавиш Shift + F9 для моментального вычисления выделенного выражения.

Однако здесь кроется важный нюанс управляемого приложения: большая часть сложных расчетов (проведение документов, расчет себестоимости, заполнение табличных частей) выполняется строго на стороне сервера. Чтобы Конфигуратор мог перехватывать эти серверные процедуры и выводить переменные в наше «Табло», на сервере 1С обязательно должен быть запущен режим отладки. Для этого служба ragent должна запускаться с параметром -debug. Если этого не сделать, точки останова на сервере просто не сработают.

Способ 2. Внешние обработки-аналоги

Что делать, если база находится на рабочем сервере (где отладка по соображениям производительности выключена), а нам крайне необходимо вычислить выражение прямо в режиме Предприятия? На помощь приходят внешние обработки, написанные сообществом разработчиков (например, различные вариации «Консоли кода» или «Табло для управляемых форм»).

Такие обработки используют системные функции встроенного языка Вычислить() и Выполнить(). Они позволяют написать произвольный алгоритм в текстовом поле на форме и выполнить его как на клиенте, так и на сервере.

---

Часть 2. Как реализовать «Временный флаг отладки» с минимальными усилиями

Представим типичную ситуацию: вам необходимо протестировать сложный алгоритм расчета себестоимости или распределения затрат. Вы хотите, чтобы этот экспериментальный алгоритм срабатывал только тогда, когда базу запускаете именно вы (или конкретный тестер), а все остальные пользователи продолжали работать со стабильным типовым кодом.

Один из участников обсуждения предложил использовать проверку через справочник групп доступа:


Если Справочники.ГруппыДоступа.Отладчик.Пользователи.Найти(ПараметрыСеанса.ТекущийПользователь, "Пользователь") = Неопределено Тогда
    // Выполняем стандартный расчет
Иначе
    // Выполняем экспериментальный расчет
КонецЕсли;

Давайте проанализируем этот подход. С одной стороны, он рабочий. С другой стороны, он заставляет нас создавать новые элементы метаданных (или завязываться на конкретные элементы справочников, жестко прописывая их имена в коде), писать запросы к табличным частям и захватывать объекты в хранилище конфигурации. Это долго и неэффективно. Рассмотрим более элегантные и быстрые альтернативы.

Вариант А. Использование параметра командной строки /C (Самый простой и быстрый способ)

Платформа 1С позволяет передавать в сеанс любую текстовую строку при запуске системы с помощью ключа командной строки /C. Мы можем использовать этот параметр как готовый маркер отладки.

Давайте разберем этот процесс по шагам:

  1. Откройте список баз в стартере 1С.
  2. Выберите нужную информационную базу, нажмите кнопку «Изменить» и перейдите на последнюю вкладку настроек.
  3. В поле «Дополнительные параметры запуска» впишите строку: /C МойРежимОтладки
  4. В коде конфигурации, где производятся ваши расчеты, добавьте простейшее условие:

Если ПараметрыЗапуска = "МойРежимОтладки" Тогда
    // Этот блок выполнится только в вашем сеансе
    ВыполнитьЭкспериментальныйРасчет();
Иначе
    // Обычная логика для всех остальных пользователей
    ВыполнитьСтандартныйРасчет();
КонецЕсли;

Если вам требуется передавать несколько параметров одновременно, мы можем проверять вхождение подстроки с помощью функции СтрНайти():


Если СтрНайти(ПараметрыЗапуска, "ОтладкаРасчетов") > 0 Тогда
    // Активируем отладочный режим
КонецЕсли;

Преимущества этого подхода очевидны:

Вариант Б. Системный параметр запуска «РежимОтладки» (для конфигураций на БСП)

Если вы работаете в конфигурации, созданной на базе Библиотеки Стандартных Подсистем (БСП), разработчики фирмы 1С уже позаботились о нас и внедрили системный параметр запуска.

Если в дополнительных параметрах запуска базы прописать команду РежимОтладки, БСП автоматически скорректирует поведение системы:

Вариант В. Точки останова с условием (Вообще без изменения кода)

Что делать, если правила разработки на проекте категорически запрещают вносить какие-либо временные изменения в рабочий код («говнокод»), а отладить расчеты нужно прямо сейчас?

Давайте воспользуемся штатным и очень мощным механизмом Конфигуратора — точками останова с условием. Этот инструмент позволяет останавливать выполнение программы только при соблюдении заданного логического выражения.

Разберем, как его настроить:

  1. В модуле с расчетами найдите интересующую вас строку и установите стандартную точку останова (нажатием клавиши F9).
  2. Нажмите на красную точку правой кнопкой мыши и выберите пункт меню «Свойства точки останова...».
  3. В открывшемся окне найдите поле «Условие».
  4. Напишите выражение на встроенном языке, которое должно возвращать Истина для остановки. Например:

ПараметрыСеанса.ТекущийПользователь.Имя = "Иванов" ИЛИ ПараметрыЗапуска = "Тест"

Теперь система будет останавливаться на этой строке только тогда, когда расчет выполняет пользователь «Иванов» или сеанс запущен со специальным параметром. Для всех остальных пользователей в системе не будет происходить никаких задержек, а вам не придется переживать, что вы забудете удалить отладочный код перед релизом.

Применяйте эти подходы на практике, комбинируйте их в зависимости от сложности задач, и процесс отладки в управляемых формах станет для вас быстрым, прозрачным и комфортным!

← На главную