В один прекрасный момент возникла задача контролировать комплектность печатных форм для документов реализации. При этом требовалось для разных случаев контролировать наличие разных печатных форм. Целиком задачу в рамках данной публикации рассматривать не будем, а рассмотрим следующие вопросы:
- Получение списка печатных форм некоторого объекта
- Программное получение заполненного табличного документа печатной формы
- Сохранение табличного документа в формате pdf качестве присоединенного файла
Данный пример будем рассматривать в условиях наличия подсистем печати и внешних обработок БСП.
Для тестов использовалась конфигурация "1С:Комплексная автоматизация 2.4.13.278" с платформой 8.3.18.1289 (клиент-серверный вариант работы, тонкий клиент)
Получение списка печатных форм
Для получения объектов метаданных с командами печати будем использовать функцию УправлениеПечатью.ИсточникиКомандПечати:
- Возвращаемое значение - Массив элементов типа ОбъектМетаданных.
Для получения списка печатных форм будем использовать функцию УправлениеПечатью.КомандыПечатиОбъекта:
- Входящий параметр - ОбъектМетаданных (например, Метаданные.Документы.РеализацияТоваровУслуг)
- Возвращаемое значение - ТаблицаЗначений с командами печати
Сразу оговоримся, будем получать следующие команды печати:
- С заполненными менеджерами печати (комплекты печатных форм в этом случае в наш список не попадут)
- Для внешних печатных форм получать будем команды с вариантом запуска ВызовСерверногоМетода
Итак, подготовим форму обработки:
- ОбъектМетаданных - тип Строка (для хранение полного имени метаданных)
- ПечатнаяФорма - тип Произвольный (для хранения свойств команды печати)
- ОбъектСсылка - тип ЛюбаяСсылка (для выбора конкретного объекта базы данных)
- У элементов формы ОбъектМетаданных и Печатная форма установим свойство Режим выбора из списка
- У элемента формы ОбъектСсылка установим свойство ВыбиратьТип в значение Ложь
Далее добавим обработчик события формы ПриСозданииНаСервере, в котором заполним список выбора объектов метаданных с командами печати:
Для элемента формы ОбъектМетаданных добавим обработчик события ПриИзменении
Итак, нам понадобятся следующие параметры команд:
- Представление - Строка - представление печатной формы
- ВнешняяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки - обработка с экспортной процедурой Печать (для внешних печатных форм)
- МенеджерПечати - Строка - строковое представление менеджера печати
- Идентификатор - Строка - идентификатор печатной формы, понадобится для формирования коллекции печатных форм
- ДополнительныеПараметры - Структура - другие параметры, используемые при формировании печатных форм
Программное формирование печатной формы
Когда мы выбрали печатную форму и ссылку, для которой необходимо формировать печатную форму, перейдем непосредственно к формированию табличного документа.
Здесь у нас возможны 2 варианта печатных форм:
- Печатная форма встроена в конфигурацию
- Внешняя печатная форма
В соответствие с этим будут небольшие отличия формирования, но в любом случае их объединяет одно: в модуле менеджера печати должна содержаться экспортная процедура Печать.
Рассмотрим список параметров процедуры Печать для обоих случаев
Встроенная | Внешняя | Тип |
МассивОбъектов | МассивОбъектов | Массив |
ДополнительныеПараметры | - | Структура |
Коллекция | Коллекция | ТаблицаЗначений |
ОбъектыПечати | ОбъектыПечати | СписокЗначений |
ПараметрыВывода | ПараметрыВывода | Структура |
- МассивОбъектов - содержит массив ссылок, для которых формируются печатные формы
- ДополнительныеПараметры - дополнительные параметры формирования печатной формы (не используются для внешних печатных форм)
- Коллекция - для формирования на сервере используем УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм, будет содержать сформированные табличные документы
- ОбъектыПечати - для назначения соответствий областей табличного документа ссылкам
- ПараметрыВывода - дополнительные параметры сформированных форм (выходной параметр); для инициализации используется функция УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода
Собственно, единственное отличие в процедурах - это количество параметров: для встроенных печатных форм - 5, для внешних печатных форм - 4. Следование параметров процедуры Печать сохранена в таблице выше.
Второй нюанс - это получение модуля менеджера печати:
- Для встроенных печатных форм используем функцию БСП ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени
- Для внешних печатных форм ДополнительныеОтчетыИОбработки.ОбъектВнешнейОбработки
Когда мы выяснили все нюансы формирования, перейдем к реализации. Добавим на нашу форму:
- реквизит формы ТабличныйДокумент с типом ТабличныйДокумент; перенесем реквизит на форму
- команду формы Сформировать и перенесем ее на форму
Для команды Сформировать добавим обработчик:
Сохранение печатной формы
В качестве небольшого бонуса рассмотрим, как сохранить нашу печатную форму:
- В файл на клиентский ПК
- В качестве присоединенного файла
Добавим на форму 2 команды и соответствующие им кнопки:
В списке файлов публикации вы сможете найти готовую демонстрационную форму, которую можете добавить в справочник внешних обработок. Не забудьте поставить плюсик)