Как включить точку останова по условию в 1С 8.3

В этой небольшой статье поговорим про то, как устанавливать точки останова с условием при отладке кода в 1С Предприятие.
При этом будем рассматривать самый актуальный вариант – Точка останова с параметрами, который появился в версии 8.3.24

Точка останова с условием и с параметрами в 1С 8.3

Точка останова в 1С — это специальная отметка,  устанавливаемая в конфигураторе, которая приостанавливает выполнение программы в режиме отладки, позволяя разработчику проверить текущее состояние переменных, выполнение алгоритмов или выявить ошибки. Когда система достигает точки останова, выполнение кода останавливается, и разработчик может пошагово анализировать код, отслеживать значения переменных, и корректировать логику работы программы. Это важный инструмент для диагностики и исправления ошибок в 1С:Предприятии.

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

Точка останова с условием

Давным-давно в далекой-далекой галактике в 1С до версии 8.3.24 был удобный и простой инструмент – точка останова с условием. Для нее можно было задать условное выражение на встроенном языке 1С. И довольно долго этого было достаточно. Но со временем платформа развивалась, код усложнялся, и по многочисленным просьбам разработчиков, в платформу завезли новых фишек для отладки.

Точка останова с параметрами

Точка останова с параметрами устанавливается, когда конфигуратор работает в режиме отладки. Это можно сделать через меню Отладка, либо через контекстное меню, пункт “Точка останова с параметрами”, либо нажав сочетание клавиш Ctrl+F9. Откроется окно настройки параметров точки останова.

Параметры точки останова
  • При выполнении условия – выражение для точки останова с условием, то самое что было для “Точка останова с условием” в предыдущих версиях платформы
  • При вызове из вышестоящего метода – точка останова срабатывает только если текущий метод был вызван из указанного в настройках места. В качестве фильтра можно задать точное имя вызывающего метода или использовать регулярное выражение для гибкого поиска. Эта функция особенно полезна, когда нужно отловить выполнение кода только в определенном контексте, например, если процедура вызывается из конкретного модуля или обработчика.
  • При количестве попаданий – точка останова активируется только после N-ного выполнения строки, на которой она установлена. Особенно полезно при отладке циклов, когда нужно остановить выполнение не на первом, а на конкретном проходе (например, на 10-й итерации).

Точку на прокачку!

В версии 8.3.24 точки останова знатно прокачались и получили дополнительные функции для удобства отладки:

  • Вывод сообщений – при срабатывании точки останова можно включить опцию «Выводить в окно служебных сообщений», чтобы зафиксировать информацию без остановки выполнения.
  • Динамические данные – в поле «Результат вычисления выражения» можно указать функцию, возвращаемое значение которой отобразится в сообщении.
  • Дополнительная информация –

    к выводимому сообщению можно добавить:

    • стек вызовов;
    • количество попаданий в точку останова.
  • Беспрерывная работа – если активирован флажок «Продолжить выполнение», программа не будет останавливаться, а только зафиксирует данные в логе.
  • Быстрый переход к коду – клик по сообщению перенесёт разработчика в модуль на строку с соответствующей точкой останова.

Эти возможности упрощают анализ сложных сценариев, позволяя собирать отладочную информацию без постоянных остановок.

Практический пример включения точки останова по условию

Рассмотрим практический пример. Есть обработка, в которой созданы два обработчика – при создании на сервере и при открытии. и в этих обраобтчиках мы вызываем некоторый код.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	ЦиклПоСумме();
КонецПроцедуры

&НаСервере
Процедура ЦиклПоСумме()
	Перем Сумма, Сч;
	Сумма = 0;
	Для Сч = 1 по 10 Цикл
		Сумма = Сумма + 1000;
		Сумма = Сумма + 500;
	КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура ЦиклПоСуммеКлиент()
	Перем Сумма, Сч;
	Сумма = 0;
	Для Сч = 1 по 10 Цикл
		Сумма = Сумма + 1000;
		Сумма = Сумма + 500;
	КонецЦикла;
	ЦиклПоСумме();
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ЦиклПоСуммеКлиент();
КонецПроцедуры

Поставим точку останова и настроим все что можно 🙂
Запустим обработку и посмотрим на сообщения:

пример точки останова

Но есть и ложка дегтя. По крайней мере на платформе 8.3.25.1336 поведение не вполне очевидное. Точки останова в серверных методах при включенном флажке “При вызове из вышестоящего метода” срабатывают только если вышестоящий метод – также серверный. Это легко проверить, если поставить в методе ЦиклПоСумме точку останова с условием для имени метода “ЦиклПоСуммеКлиент”. В этом случае точка останова не срабатывает.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

17 − 1 =

К НАЧАЛУ