При разработке и доработке конфигураций на платформе 1С:Предприятие 8.3 с управляемыми формами программисты нередко сталкиваются с ситуацией: точка останова установлена в процедуре печати документа, печатная форма успешно выводится на экран, но отладчик просто не останавливается. Разберем по шагам, почему это происходит, как устроена архитектура печати в Библиотеке стандартных подсистем (БСП) и как гарантированно перехватить процесс заполнения табличного документа.
В современных типовых конфигурациях для ускорения интерфейса и исключения зависания клиентского приложения генерация табличного документа вынесена в фоновое задание на стороне сервера. Если в конфигураторе не включен автоматический перехват фоновых заданий, отладчик будет игнорировать этот поток.
Проверим настройки отладки и включим подключение к фоновым потокам:
-debug для протокола TCP или настроена отладка по протоколу HTTP).На управляемых формах печать практически никогда не вызывается из модуля формы или модуля объекта самого документа. Вся логика формирования макетов вынесена в Модуль менеджера объекта или в специализированные общие модули.
Проанализируем структуру регистрации печатных форм в модуле менеджера документа:
Документ.ЗаказКлиента.МодульМенеджера).ДобавитьКомандыПечати. Именно здесь регистрируются все печатные формы объекта.
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "ЗаказКлиента";
КомандаПечати.Представление = НСтр("ru = 'Заказ клиента'");
КомандаПечати.Обработчик = "УправлениеПечатьюКлиент.ВыполнитьКомандуПечати";
КомандаПечати.СписокФорм = "ФормаДокумента,ФормаСписка";
ИмяОбработчикаПечати и МенеджерПечати. По умолчанию система ищет процедуру Печать в модуле менеджера текущего документа. Однако если разработчик указал конкретное имя в ИмяОбработчикаПечати, вызов пойдет именно в эту экспортную процедуру. Если заполнен МенеджерПечати, код печати вынесен в сторонний общий модуль.Если точное имя обработчика неизвестно, проследим путь вызова через общие модули подсистемы печати БСП:
УправлениеПечатьюКлиент и найдем процедуру ВыполнитьКомандуПечати. Установим точку останова в начале процедуры. Здесь мы увидим параметры команды, идентификатор макета и массив ссылок на выбранные документы.УправлениеПечатью. Ключевые точки вызова:
СформироватьПечатныеФормыДляФоновогоЗадания — процедура, с которой начинает работу фоновый поток;СформироватьПечатныеФормы — процедура диспетчеризации, где платформа определяет фактический модуль-менеджер и по имени вызывает экспортную процедуру формирования табличного документа.Если серверная отладка настроена, фоновые задания подключены, но процедура в модуле менеджера все равно не выполняется, проверим внешние перехватчики:
&Вместо. Если в расширении процедура переопределена без вызова ПродолжитьВызов(), то оригинальный код из основной конфигурации выполняться не будет. Точку останова в таком случае нужно ставить в модуле расширения.В процессе разработки, если сеанс фонового задания по TCP-отладке завершается быстрее, чем успевает инициализироваться подключение, можно временно принудительно отключить фоновое формирование. Для этого в процедуре вызова печати в модуле УправлениеПечатью достаточно временно направить выполнение по ветке прямого синхронного вызова (аналогично файловому режиму работы базы). В таком случае печать сформируется в текущем сеансе, и отладчик гарантированно сработает на нужной строке кода.