Как найти код формирования печатной формы в 1С на управляемых формах и настроить отладчик?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При разработке и доработке конфигураций на платформе 1С:Предприятие 8.3 с управляемыми формами программисты нередко сталкиваются с ситуацией: точка останова установлена в процедуре печати документа, печатная форма успешно выводится на экран, но отладчик просто не останавливается. Разберем по шагам, почему это происходит, как устроена архитектура печати в Библиотеке стандартных подсистем (БСП) и как гарантированно перехватить процесс заполнения табличного документа.

Причина 1: Формирование печатной формы выполняется в фоновом задании

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

Проверим настройки отладки и включим подключение к фоновым потокам:

  1. Убедимся, что служба сервера 1С:Предприятия запущена с ключом отладки (параметр -debug для протокола TCP или настроена отладка по протоколу HTTP).
  2. В конфигураторе перейдем в главное меню: Отладка → Подключение....
  3. В открывшемся окне нажмем кнопку Настройка автоматического подключения....
  4. В списке типов предметов отладки обязательно установим флаг напротив пункта Фоновые задания.
  5. Нажмем ОК и повторим формирование печатной формы из пользовательского режима.

Причина 2: Точка входа находится в модуле менеджера или переопределенном модуле

На управляемых формах печать практически никогда не вызывается из модуля формы или модуля объекта самого документа. Вся логика формирования макетов вынесена в Модуль менеджера объекта или в специализированные общие модули.

Проанализируем структуру регистрации печатных форм в модуле менеджера документа:

  1. Откроем модуль менеджера документа (например, Документ.ЗаказКлиента.МодульМенеджера).
  2. Найдем экспортную процедуру ДобавитьКомандыПечати. Именно здесь регистрируются все печатные формы объекта.
  3. В коде регистрации обратим внимание на параметры структуры команды:
    
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.Идентификатор = "ЗаказКлиента";
    КомандаПечати.Представление = НСтр("ru = 'Заказ клиента'");
    КомандаПечати.Обработчик    = "УправлениеПечатьюКлиент.ВыполнитьКомандуПечати";
    КомандаПечати.СписокФорм    = "ФормаДокумента,ФормаСписка";
    
  4. Обратим внимание на поля структуры, если они заданы явно: ИмяОбработчикаПечати и МенеджерПечати. По умолчанию система ищет процедуру Печать в модуле менеджера текущего документа. Однако если разработчик указал конкретное имя в ИмяОбработчикаПечати, вызов пойдет именно в эту экспортную процедуру. Если заполнен МенеджерПечати, код печати вынесен в сторонний общий модуль.

Причина 3: Маршрутизация через общий модуль подсистемы печати

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

  1. Клиентская часть: перейдем в общий модуль УправлениеПечатьюКлиент и найдем процедуру ВыполнитьКомандуПечати. Установим точку останова в начале процедуры. Здесь мы увидим параметры команды, идентификатор макета и массив ссылок на выбранные документы.
  2. Серверная часть: при формировании задания управление передается в общий модуль УправлениеПечатью. Ключевые точки вызова:
    • СформироватьПечатныеФормыДляФоновогоЗадания — процедура, с которой начинает работу фоновый поток;
    • СформироватьПечатныеФормы — процедура диспетчеризации, где платформа определяет фактический модуль-менеджер и по имени вызывает экспортную процедуру формирования табличного документа.

Причина 4: Влияние расширений конфигурации и внешних печатных форм

Если серверная отладка настроена, фоновые задания подключены, но процедура в модуле менеджера все равно не выполняется, проверим внешние перехватчики:

  1. Расширения конфигурации: проверим, нет ли подключенных расширений, перехватывающих методы печати аннотацией &Вместо. Если в расширении процедура переопределена без вызова ПродолжитьВызов(), то оригинальный код из основной конфигурации выполняться не будет. Точку останова в таком случае нужно ставить в модуле расширения.
  2. Дополнительные отчеты и обработки: проверим в пользовательском режиме (раздел Администрирование → Печатные формы, отчеты и обработки), не подключена ли внешняя печатная форма, переопределяющая стандартную команду. Если стандартная команда замещена внешней обработкой, код макета выполняется из хранилища внешней обработки в базе данных, а не из конфигуратора.

Принудительное отключение фонового режима для упрощения отладки

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

← На главную