Как и в предыдущей статье (//infostart.ru/public/179398/), для анализа конфигурации я буду использовать ментальные карты. А именно: редактор ментальных карт xMind (www.xmind.net) и, собственно для анализа конфигурации, плагин к нему «Анализатор кода 1С» (www.codeanalyzer.ru).
Начнём с формулировки задачи. Используем типовую конфигурацию УТ 11.0.7.19.
Зайдём в конфигурацию под администратором. Перейдём в раздел «Продажи» и выберем на панели навигации команду «Документы продажи». Откроется список документов.
Нам необходимо разобраться, как формируется меню "Печать", какие процедуры отвечают за непосредственную печать и как добавить в него внешнюю печатную форму.
Отмечу, что такое же меню отображается в форме документа «Реализация товаров и услуг».
Откроем конфигуратор, найдем документ «РеализацияТоваровУслуг». Видим, что у него есть две параметризуемые им же команды и расположение у них – «Командная панель формы.Печать», т.е. то, где отображаются все печатные формы.
Откроем форму документа. Посмотрим на список параметризуемых объектом глобальных команд. Видим, что помимо команд документа, используются команды обработок «ПечатьОбщихФорм», «ПечатьТранспортнойНакладной» и других. У всех этих команд в качестве параметра присутствует ДокументСсылка.РеализацияТоваровУслуг и в группе указано меню «Печать» командной панели формы.
Также, если мы посмотрим на доступность этих команд по ролям, то увидим, что для роли «ПолныеПрава» (которая назначена администратору) право «Просмотр» установлено.
Два этих фактора определяют тот факт, что команды появляются в подменю печати командной панели формы документа.
Теперь разберёмся с обработчиками. Сначала обобщим рассматриваемые команды печати:
Откроем обработчик любой из этих команд. Увидим схожий вызов УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(…)
Если проанализировать все вызовы этой процедуры, то увидим, что она вызывается практически из всех команд конфигурации, отвечающих за печать. В частности, из обработки «ПечатьОбщихФорм» и нашего документа.
При этом, в качестве параметров "ВыполнитьКомандуПечати()" принимает:
И передает их в вызов «ОткрытьФорму("ОбщаяФорма.ПечатьДокументов"...)»
Посмотрим на модуль общей формы «ПечатьДокументов»
В коде ПриСозданииНаСервере(...) есть условие, определяющее, что если есть параметр «ИсточникДанных», то печатаем внешнюю печатную форму, иначе – встроенную.
Посмотрим, что вызывается в «УправлениеПечатьюПереопределяемый.ПечатьПоВнешнемуИсточнику(…)»
Таким образом, по переданному параметру «ИсточникДанных» получается объект внешней обработки и затем, вызывается её метод «Печать». Интересен вызов «ПолучитьОбъектВнешнейОбработки()», который приводит нас к справочнику «ДополнительныеОтчетыИОбработки».
Теперь посмотрим на печать встроенной печатной формы (это если параметр «ИсточникДанных» не был передан).
То есть, получаем менеджер объекта и вызываем его метод «Печать».
Менеджер получается вот так:
Ну что ж, теперь самое время перейти к процедуре модуля менеджера документа - «Печать».
В итоге видим, что формирование табличного документа по макету происходит в соответствующих процедурах модуля менеджера реализации товаров. Затем табличный документ добавляется в коллекцию печатных форм.
Для общей формы «ПечатьОбщихФорм» модуль менеджера будет выглядеть так:
Теперь вернёмся к общей форме «ПечатьДокументов». При создании на сервере была сформированна коллекция печатных форм. Печать же табличного документа происходит в «ПечатьВыполнить()».
Итак, мы выяснили как формируется список встроенных печатных форм, как происходит формирование и печать этих форм. Так же мы увидели, как происходит печать внешней печатной формы.
О том как добавляются в меню внешние печатные формы и какие требования (и почему) к ним предъявляются будет написано во второй части.
На этом заканчиваю) Легкого кода Вам!)