Как в 1С узнать, какая процедура выполняется при нажатии на кнопку, без отладчика?

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

Часто при работе с чужим кодом или сложными формами, где элементы управления создаются программно, возникает задача быстро найти процедуру-обработчик. Перебирать весь код в конфигураторе в поисках нужной строки — долго и неудобно. Возникает вопрос: существует ли инструмент или обработка, которая в режиме «Предприятие» покажет, какой код выполняется при том или ином действии пользователя?

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

Способ 1. Замер производительности

Это, пожалуй, самый эффективный и недооцененный способ для решения нашей задачи. «Замер производительности» — это мощный инструмент, который записывает всю последовательность вызовов процедур и функций за определенный период. Он не требует установки точек останова и не прерывает работу программы.

Разберем по шагам, как им пользоваться:

  1. Откройте главное меню (три полоски в левом верхнем углу), выберите «Сервис» → «Параметры».
  2. В открывшемся окне установите флаг «Отображать команду "Все функции"». Нажмите «ОК».
  3. Снова откройте главное меню и выберите «Все функции».
  4. В поиске начните вводить «Замер производительности» и выберите найденную стандартную обработку.
  5. В окне замера нажмите кнопку «Выполнить замер производительности» (или «Начать замер» в старых версиях платформы).
  6. Не закрывая окно замера, вернитесь к форме, где находится интересующая вас кнопка или другой элемент, и выполните нужное действие (например, нажмите на кнопку).
  7. Вернитесь в окно замера и нажмите «Остановить» (или «Закончить замер»).

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

Важный момент: для получения полной картины серверных вызовов необходимо, чтобы на сервере 1С:Предприятия был включен режим отладки.

Способ 2. Программный анализ элемента формы

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

Этот метод позволяет узнать имя процедуры, которая назначена на определенное событие элемента формы. Например, чтобы узнать, какая процедура выполняется по событию «Нажатие» у кнопки, можно выполнить следующий код (например, в обработчике другой кнопки или при открытии формы):


// Предположим, мы знаем имя программно созданной кнопки
ИмяИскомойКнопки = "МояПрограммнаяКнопка";

// Получаем сам элемент формы по его имени
ИскомыйЭлемент = Элементы.Найти(ИмяИскомойКнопки);

Если ИскомыйЭлемент <> Неопределено Тогда
    // Получаем имя процедуры, привязанной к событию "Нажатие"
    ИмяПроцедурыОбработчика = ИскомыйЭлемент.ПолучитьДействие("Нажатие");
    Сообщить("Кнопка '" + ИмяИскомойКнопки + "' вызывает процедуру: " + ИмяПроцедурыОбработчика);
Иначе
    Сообщить("Элемент с именем '" + ИмяИскомойКнопки + "' не найден на форме.");
КонецЕсли;

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

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

Хотя изначальный вопрос был о поиске без отладчика, не стоит забывать о его возможностях. Это основной инструмент разработчика, и он предоставляет самый полный контроль над выполнением кода.

Стек вызовов. Если вы поставите точку останова в любом месте кода, то при остановке выполнения вы можете открыть панель «Стек вызовов» (сочетание клавиш Ctrl+Alt+C). В этой панели будет видна вся цепочка процедур и функций, которая привела к текущей точке. Перемещаясь по стеку, можно легко понять логику программы.

Стек вызовов при ошибке. Если при выполнении действия возникает ошибка, платформа сама показывает нам всю необходимую информацию. В окне с сообщением об ошибке нажмите кнопку «Подробно». Вы увидите полный стек вызовов на момент сбоя. Эту же информацию можно найти, если зайти в «О программе» → «Информация для технической поддержки» или в Журнале регистрации.

Способ 4. Программное получение стека через исключение

Существует элегантный трюк, который позволяет получить текущий стек вызовов в любой точке кода без подключения отладчика и прерывания работы. Метод заключается в том, чтобы программно сгенерировать и тут же перехватить исключение. Для автоматизации этого процесса подойдёт инструмент для генерации отладочных вставок и логирования стека вызовов.

Посмотрим на пример. Этот код можно временно вставить в процедуру, путь к которой вы хотите отследить:


Попытка
    // Генерируем исключение с любым текстом
    ВызватьИсключение "Отладочная точка для получения стека";
Исключение
    // В информации об ошибке содержится полный стек вызовов
    // Преобразуем его в строку для вывода в сообщения
    ПолныйСтекВызовов = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
    
    // Выводим стек в окно сообщений для пользователя
    Сообщить(ПолныйСтекВызовов);
КонецПопытки;

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

Способ 5. Анализ с помощью Технологического журнала (ТЖ)

Это продвинутый инструмент для анализа работы всей платформы, который особенно полезен при разборе проблем на продуктивных серверах, где отладчик недоступен. Настроив ТЖ на отслеживание определенных событий (например, CALL — вызовы сервера с клиента, или EXCP — исключения), можно получить детальные логи работы системы. Анализ этих логов позволяет постфактум восстановить всю последовательность действий и найти причину некорректного поведения.

Таким образом, в арсенале разработчика 1С есть множество инструментов для анализа кода. Для быстрой навигации и понимания логики работы формы отлично подойдет «Замер производительности», а для более глубокого анализа — стандартный отладчик и его панель «Стек вызовов».

← На главную