При доработке или отладке типовых конфигураций (например, «1С:Бухгалтерия предприятия 3.0») разработчики часто сталкиваются с задачей: макет печатной формы (например, М-11, М-15 или ТОРГ-12) найден в ветке метаданных или общих макетах, но не очевидно, в каком именно модуле и какой процедуре происходит сбор данных и вывод табличного документа. Разберем по шагам надежные способы быстро найти исполняемый программный код печатной формы.
Рассмотрим самый быстрый и распространенный метод. В типовых конфигурациях обращение к макету происходит по его имени в дереве метаданных. Если мы знаем имя макета, мы можем найти все места конфигурации, где он запрашивается для вывода данных.
ПФ_MXL_М15 или ПФ_MXL_М11).ПФ_MXL_М15, указываем область поиска «Модули» и запускаем процесс.Посмотрим на пример результатов поиска в конфигурации «1С:Бухгалтерия предприятия»:
Документ.ПередачаТоваров.Модуль менеджера : ПечатьМ15(МассивОбъектов, ОбъектыПечати), , "ОбщийМакет.ПФ_MXL_М15");
Документ.ПередачаТоваров.Модуль менеджера : Макет = УправлениеПечатью.МакетПечатнойФормы("ОбщийМакет.ПФ_MXL_М15");
Документ.РеализацияТоваровУслуг.Модуль менеджера : ПечатьМ15(МассивОбъектов, ОбъектыПечати), , "ОбщийМакет.ПФ_MXL_М15");
Документ.РеализацияТоваровУслуг.Модуль менеджера : Макет = УправлениеПечатью.МакетПечатнойФормы("ОбщийМакет.ПФ_MXL_М15");
Двойным кликом по строке результата переходим непосредственно в процедуру формирования печатной формы (в данном примере — ПечатьМ15 модуля менеджера соответствующего документа).
Проанализируем структуру работы подсистемы печати Библиотеки стандартных подсистем (БСП), на которой построены современные конфигурации 1С. Логика печати унифицированных форм стандартизирована:
ДобавитьКомандыПечати(КомандыПечати). В ней определяются идентификаторы команд, синонимы для меню печати и привязанные обработчики.Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) модуля менеджера.Печать проверяется переданный идентификатор команды и вызывается внутренняя процедура формирования (или метод специализированного общего модуля).Если поиск по макету не дал результата из-за динамического формирования имени, выполним глобальный поиск по названию команды из пользовательского интерфейса (например, «Накладная на отпуск материалов на сторону (М-15)») — поиск выведет нас на процедуру ДобавитьКомандыПечати.
Если требуется точно проследить весь стек вызовов от нажатия кнопки в интерфейсе до заполнения ячеек, воспользуемся отладчиком:
УправлениеПечатьюКлиент и устанавливаем точку останова в процедуре ВыполнитьКомандуПечати (или в модуле УправлениеПечатью в функции СформироватьПечатныеФормы).Обратим внимание на то, что для унифицированных регламентированных форм (М-11, М-15, ТОРГ-12) логика запросов и вывода областей нередко вынесена в специализированные общие модули учета. В таком случае в модуле менеджера документа будет находиться только короткий вызов процедуры общего модуля с передачей параметров и массива ссылок на объекты.