При разработке и сопровождении типовых конфигураций, таких как 1С:Бухгалтерия предприятия 3.0, программисты часто сталкиваются с ситуацией, когда точка останова в коде установлена, но при выполнении программы она игнорируется. Особенно часто это происходит в общих формах, связанных с печатью документов. Разберем подробно, почему так происходит и как заставить отладчик работать корректно.
Форма ПечатьДокументов является частью Библиотеки стандартных подсистем (БСП). Основная особенность этой формы заключается в том, что формирование печатных форм часто выносится в фоновые задания, чтобы не блокировать интерфейс пользователя. Даже в файловом режиме работы платформы 1С эмулирует многопоточность, запуская отдельные сеансы для выполнения длительных операций.
Проанализируем ситуацию: если вы установили точку останова в процедуре ФлажокПодписьИПечатьПриИзменении, но отладчик не останавливается, это может означать, что предмет отладки (поток, в котором выполняется код) просто не подключен к вашему конфигуратору.
Первым делом нам необходимо убедиться, что конфигуратор «видит» все типы сеансов. В файловой базе границы между клиентом и сервером размыты, но для отладчика они остаются разными контекстами.
Именно отсутствие флага Фоновые задания чаще всего является причиной того, что точка останова в серверном коде или коде печати не срабатывает, так как БСП запускает печать в отдельном потоке.
Начиная с версии платформы 8.3.7, разработчикам доступен протокол отладки по HTTP. Однако в некоторых релизах (особенно 8.3.18–8.3.22) работа этого протокола в файловых базах может быть нестабильной. Рассмотрим, как проверить и изменить протокол:
Если используется TCP, убедитесь, что порты не блокируются брандмауэром. Если используется HTTP, попробуйте переключиться на TCP в параметрах запуска (ключ /debug -tcp) или в настройках информационной базы в списке баз. Проанализируем настройки: иногда простая смена протокола «оживляет» замершие точки останова.
Если настройки подключения верны, но точка всё равно не срабатывает, выясним, заходит ли выполнение в процедуру вообще. Для этого воспользуемся проверенным методом вывода сообщений. Добавим в начало процедуры следующий код:
&НаКлиенте
Процедура ФлажокПодписьИПечатьПриИзменении(Элемент)
Сообщить("Событие ПриИзменении сработало!");
// Ваша логика
КонецПроцедуры
Если сообщение появилось, а точка останова проигнорирована — проблема в механизме отладки. Если сообщение не появилось — проблема в привязке события к элементу формы. Проверьте свойства элемента ФлажокПодписьИПечать на форме: в поле События должно быть указано имя вашей процедуры.
В современных версиях БСП при изменении флажков печати может инициироваться обновление табличного документа. Если этот процесс обернут в ДлительныеОперации.ЗапуститьВыполнениеВФоне, отладчик может не успеть перехватить управление. В таких случаях полезно добавить небольшую задержку перед точкой останова, чтобы дать отладчику время на «подцепку» потока:
// Временный код для отладки
НачалоПаузы = ТекущаяДата();
Пока ТекущаяДата() < НачалоПаузы + 2 Цикл
// Ждем 2 секунды
КонецЦикла;
Не стоит забывать о специфических ошибках платформы, когда конфигурация базы данных не совпадает с исполняемым кодом в сеансе. Рассмотрим шаги по очистке «зависших» состояний:
%AppData%\Local\1C\1cv8 и %AppData%\Roaming\1C\1cv8.Если форма вызывается в контексте внешней обработки или расширения, платформа может принудительно включать Безопасный режим. В этом режиме отладка кода может быть ограничена политиками безопасности. Проверьте, не передается ли параметр БезопасныйРежим = Истина при вызове процедур печати в модулях БСП.
Подводя итог, можно сказать, что в файловой БП 3.0 проблема чаще всего кроется в настройках Автоматического подключения фоновых заданий или в особенностях работы протокола отладки конкретного релиза платформы. Пройдя по шагам от простых настроек интерфейса до очистки кэша, вы обязательно добьетесь срабатывания точки останова.