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