Где поставить точку останова для отладки заполнения счета-фактуры в УТ 11.5

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

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

Поиск входной точки в модуле менеджера

Начнем наше исследование с модуля менеджера документа. В 1С 8.3 печать большинства документов инициируется именно отсюда. Нам необходимо найти процедуру, которая регистрирует команды печати. Рассмотрим алгоритм действий:

  1. Откроем конфигуратор и найдем документ СчетФактураВыданный.
  2. Перейдем в Модуль менеджера документа.
  3. Найдем процедуру ДобавитьКомандыПечати(КомандыПечати). В ней регистрируются все доступные формы.

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


// Пример регистрации команды печати
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "СчетФактура";
КомандаПечати.МенеджерПечати = "Обработка.ПечатьОбщихФорм";
КомандаПечати.Представление = НСтр("ru = 'Счет-фактура'");

Если в качестве менеджера печати указана Обработка.ПечатьОбщихФорм, значит, логика формирования перенесена туда. Однако в последних релизах УТ 11.5 основные данные собираются в специализированных общих модулях.

Основная функция сбора данных

Разберем, где именно в УТ 11.5 происходит «магия» заполнения параметров макета. Как правило, для счетов-фактур используется общая логика, вынесенная в модули локализации или специализированные модули печати. Проанализируем наиболее вероятное место:

В модуле менеджера документа СчетФактураВыданный найдем экспортную функцию ПолучитьДанныеДляПечатнойФормыСчетФактура. Именно она отвечает за формирование структуры данных, которая в дальнейшем передается в макет.

Если поиск в модуле менеджера не дал результатов, нам следует обратиться к общему модулю ПечатьСчетовФактур. В нем сосредоточены процедуры для разных редакций постановлений (например, №1137). Ищите процедуру с названием СформироватьПечатныеФормыСчетовФактур или аналогичную. Выясним причину использования именно общего модуля: это позволяет системе печатать счета-фактуры из разных документов-оснований (Реализация, Аванс, Корректировка) по единому алгоритму.

Почему точка останова не срабатывает?

Часто программисты сталкиваются с ситуацией, когда точка останова установлена правильно, но программа на ней не останавливается. Рассмотрим ситуацию подробнее. В УТ 11.5 по умолчанию включена фоновая печать. Это означает, что формирование таблицы данных происходит в отдельном фоновом задании на сервере, к которому основной сеанс отладчика не подключен.

Чтобы отладить такой код, выполним следующие действия:

  1. В конфигураторе перейдем в меню Отладка -> Подключение....
  2. Нажмем кнопку Автоматическое подключение.
  3. В появившемся окне установим флажок Фоновые задания.
  4. После этого запустим печать документа еще раз. Теперь отладчик должен «поймать» серверный вызов.

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

Лайфхак: Поиск через параметры макета

Если вы не знаете точного пути, воспользуемся методом «от обратного». Посмотрим на макет счета-фактуры. В конфигурации он может находиться либо в Общих макетах (с именами типа СчетФактура1137), либо внутри обработки ПечатьОбщихФорм.

  1. Откроем макет и найдем в нем редкое имя параметра или области (например, ПодписьРуководителя или ГрузоотправительИЕгоАдрес).
  2. Запустим Глобальный поиск (Ctrl+Shift+F) по этому имени во всех текстах конфигурации.
  3. Система выдаст список мест, где этот параметр заполняется. Обычно это будет код вида: ОбластьМакета.Параметры.ГрузоотправительИЕгоАдрес = ....

Этот метод гарантированно приведет нас к процедуре заполнения, даже если структура вызовов в БСП кажется слишком запутанной.

Использование замера производительности

Рассмотрим еще один эффективный способ локализации кода — замер производительности. Если глобальный поиск выдает слишком много результатов, выполним следующие шаги:

  1. Включим в отладчике Замер производительности.
  2. Нажмем кнопку Печать в документе.
  3. Как только печатная форма сформируется, остановим замер.
  4. В открывшемся окне отсортируем список по колонке «Количество строк» или «Время».

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

Работа с процедурой ОбработкаЗаполнения

Важно не путать печать документа и его первичное заполнение при создании. Процедура ОбработкаЗаполнения в модуле объекта (о которой упоминалось в обсуждении) срабатывает только в момент создания нового документа (например, на основании реализации). Если ваша задача — понять, откуда берутся данные в уже созданном документе при нажатии кнопки «Печать», то ОбработкаЗаполнения вам не поможет. Вам нужны именно процедуры печати в модуле менеджера или общих модулях, описанные выше.

Подведем итог: для эффективной отладки счета-фактуры в УТ 11.5 всегда проверяйте настройки подключения фоновых заданий и ищите логику сбора данных в функции ПолучитьДанныеДляПечатнойФормыСчетФактура модуля менеджера или в общем модуле ПечатьСчетовФактур.

← На главную