Подсистема «Печать» БСП

Печать (Ctrl+P)

Шпаргалка из гл 3.38 документации БСП

     Подсистема «Печать» библиотеки  стандартных подсистем предназначена для формирования печатных форм объектов на основе табличных макетов (формат MXL) или макетов офисных документов в формате Office Open XML (docx).

Подсистема предоставляет инструменты для размещения команд печати на формах в подменю Печать, форму предпросмотра печатных форм, а также различные сервисные возможности по сохранению печатных форм в файлы, отправке по электронной почте и формированию изображений QR-кодов. Кроме того, в подсистему входит рабочее место по редактированию макетов печатных форм.

Настройка

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

Описательная часть находится в  процедуре ДобавитьКомандыПечати, а логика формирования печатной формы зависит от того, в каком виде должны формироваться печатные формы:

  • Формирование печатной формы в формате табличного документа (с предварительным просмотром или сразу на принтер).
  • Формирование комплекта табличных документов (с предварительным просмотром или сразу на принтер).
  • Формирование печатных форм с интерактивным запросом дополнительных параметров у пользователя.
  • Вывод табличного документа в один из популярных форматов (Office Open XML, Microsoft Excel, Adobe PDF,  HTML, текстовый документ и другие).
  • Формирование печатной формы в виде офисных документов в формате Office Open XML (для тех случаев, когда возможностей табличного макета недостаточно).

Подключение объектов программы

Необходимо принять решение, для каких объектов программы разрабатываются команды печати и в каких их формах требуется выводить подменю с командами печати

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

  • Объекты конфигурации, являющиеся поставщиками команд печати, следует перечислить в процедуре 
    ПриОпределенииОбъектовСКомандамиПечати модуля Управление Печатью Переопределяемый
  • В модуле менеджера каждого из этих объектов, в области ПрограммныйИнтерфейс, должна быть определена процедура ДобавитьКомандыПечати по шаблону:
#Область ПрограммныйИнтерфейс
// Заполняет список команд печати.
// Параметры:
// КомандыПечати - ТаблицаЗначений - состав полей см. в функции управлениеПечатью.СоздатьКоллекциюКомандПечати.

Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
// Пример Счет на оплату   
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.МенеджерПечати = "Документ._ДемоСчетНаОплатуПокупателю";  
КомандаПечати.Идентификатор = "СчетЗаказ";
КомандаПечати.Представление = НСтр("ru = 'Счет на оплату'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина; 
КонецПроцедуры
#КонецОбласти

Если предполагается, что в этом подменю может быть выведено большое количество команд (более 10), то рекомендуется добавить вложенные группы кнопок с суффиксами “Важное”, “Обычное” и “СмТакже”. Например: “ПодменюПечатьВажное”, “ПодменюПечатьОбычное” и “ПодменюПечатьСмТакже”. Суффиксы этих групп указываются в свойстве Важность тех команд, которые должны выводиться в этих группах (подробнее про это свойство см. далее в таблице «Параметры команд печати»).

Далее, в формах объектов, подключенных на предыдущем шаге, в которых требуется выводить подменю с командами печати, нужно Встроить подсистему «Подключаемые команды»

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

// Дополнительные настройки списка команд печати.
//
// Параметры:
//  НастройкиСписка - Структура - модификаторы списка команд печати.
//   * МенеджерКомандПечати     - МенеджерОбъекта - менеджер объекта, в котором формируется список команд печати;
//   * АвтоматическоеЗаполнение - Булево - заполнять команды печати из объектов, входящих в состав журнала.
//                                         Значение по умолчанию: Истина.
//
Процедура ПриПолученииНастроекСпискаКомандПечати(НастройкиСписка) Экспорт
    Если НастройкиСписка.МенеджерКомандПечати = ЖурналыДокументов._ДемоСкладскиеДокументы Тогда
        НастройкиСписка.АвтоматическоеЗаполнение = Ложь;
    КонецЕсли;
КонецПроцедуры

Разработка процедуры «Печать»

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

// Формирует печатные формы.
//
// Параметры:
//  МассивОбъектов - Массив - ссылки на объекты, которые нужно распечатать;
//  ПараметрыПечати - Структура - дополнительные настройки печати;
//  КоллекцияПечатныхФорм - ТаблицаЗначений - сформированные табличные документы (выходной параметр)
//  ОбъектыПечати - СписокЗначений - значение - ссылка на объект;
//                                            представление - имя области, в которой был выведен объект (выходной параметр);
//  ПараметрыВывода - Структура - дополнительные параметры сформированных табличных документов (выходной параметр).
//
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
КонецПроцедуры

2. Разместить в конфигурации макет табличного и  
Добавить функцию, формирующую печатную форму (табличный документ), например:

Функция ПечатьСчетаЗаказа(МассивОбъектов, ОбъектыПечати)    . . .    Возврат ТабличныйДокумент;КонецФункции

3. В процедуре Печать разместить код для идентификации требуемой печатной формы и вызова функции по ее формированию . Например:

Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

НужноПечататьМакет = УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетЗаказ");
    Если НужноПечататьМакет Тогда
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
        КоллекцияПечатныхФорм,
        "СчетЗаказ",
        НСтр("ru = 'Счет на оплату'"),
        ПечатьСчетаЗаказа(МассивОбъектов, ОбъектыПечати),
        ,
        "Документ._ДемоСчетНаОплатуПокупателю.ПФ_MXL_СчетЗаказ");
    КонецЕсли;

КонецПроцедуры

Формирование печатной формы в клиентском контексте

 В отдельных случаях для формирования некоторых печатных форм может потребоваться клиентский контекст. Например, для запроса дополнительных параметров печатной формы у пользователя непосредственно перед печатью. В таких случаях механизм формирования печатной формы необходимо размещать в клиентском модуле, а при описании команды печати в процедуре ДобавитьКомандыПечати использовать параметр Обработчик для передачи управления в этот модуль.

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

Процесс создания такой команды выглядит следующим образом:

  1. В модуле менеджера объекта в процедуре ДобавитьКомандыПечати добавить описание команды (с использованием параметра Обработчик), например:
// Счет на оплату в Microsoft Word
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.МенеджерПечати = "Документ._ДемоСчетНаОплатуПокупателю";
    КомандаПечати.Идентификатор = "СчетНаОплату(MSWord)";
    КомандаПечати.Представление = НСтр("ru = 'Счет на оплату в Microsoft Word'");
    КомандаПечати.Картинка = БиблиотекаКартинок.ФорматWord2007;
    КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
    КомандаПечати.Обработчик = "_ДемоСтандартныеПодсистемыКлиент.ПечатьСчетовНаОплатуПокупателю";

 2.   Добавить клиентскую экспортную функцию формирования печатной формы с единственным параметром, в который подсистема «Печать» будет передавать структуру параметров команды. Имя функции может быть произвольным, например:

Функция ПечатьСчетовНаОплатуПокупателю(ПараметрыПечати) Экспорт
    .
    .
    .
КонецФункции

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

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

Previous Article
Next Article

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.