О подключении внешних печатных форм мы уже вели речь в статье «Как сделать подключаемую внешнюю печатную форму». Сегодня речь пойдет немного о другом. Представьте, что Вы сделали некий документ в рамках типовой конфигурации и хотите в нем организовать возможность подключения внешних печатных форм. Мы, конечно, понимаем, что печатные формы подключаются не сами по себе, а с помощью специального кода.
Ничего нового мы, разумеется, придумывать не будем, а просто подсмотрим, как функционал подключения внешних печатных форм реализован в типовых документах. Все, что описано ниже, подсмотрено в типовой конфигурации «Бухгалтерия предприятия». В других типовых конфигурациях от 1С, полагаю, все будет выглядеть также.
Исходные данные: ОсновныеДействияФормы - идентификатор командной панели формы документа, на которой будет создано подменю печати. Подменю печати будет выглядеть так:
В модуле формы документа необходимо внести следующие изменения:
- Описать переменные мДеревоМакетов, мПодменюПечати, мПечатьПоУмолчанию.
- Добавить процедуры УстановитьКнопкиПечати, ОсновныеДействияФормыПечатьПоУмолчанию, ОсновныеДействияФормыПечать.
- В процедуру обработки события формы ПередОткрытием добавить вызов процедуры УстановитьКнопкиПечати.
// Хранит дерево макетов печатных форм Перем мДеревоМакетов; // Хранит элемент управления подменю печати Перем мПодменюПечати; // Хранит элемент управления кнопку печать по умолчанию Перем мПечатьПоУмолчанию; //Процедура устанавливает подменю "Печать" и кнопку "Печать по умолчанию" при необходимости Процедура УстановитьКнопкиПечати() мДеревоМакетов = УниверсальныеМеханизмы.ПолучитьДеревоМакетовПечати(Ссылка, ПолучитьСтруктуруПечатныхФорм(), Новый Действие("ОсновныеДействияФормыПечать"), Новый Действие("ОсновныеДействияФормыУстановитьПечатьПоУмолчанию")); // Если документ не содержит встроенных печатных форм, то вместо вызова процедуры ПолучитьСтруктуруПечатныхФорм() можно вставить значение Неопределено УниверсальныеМеханизмы.УстановитьПодменюПечати(мПодменюПечати, ЭлементыФормы.ОсновныеДействияФормы, мДеревоМакетов.Строки.Количество() > 0); УниверсальныеМеханизмы.УстановитьПечатьПоУмолчанию(мПечатьПоУмолчанию, ЭлементыФормы.ОсновныеДействияФормы, мДеревоМакетов, Метаданные().Имя, Новый Действие("ОсновныеДействияФормыПечатьПоУмолчанию")); Если Не мПодменюПечати = Неопределено Тогда УниверсальныеМеханизмы.СформироватьПодменю(мДеревоМакетов, мПодменюПечати, Истина, Истина); КонецЕсли; КонецПроцедуры // Процедура - обработчик нажатия на кнопку "Печать по умолчанию" Процедура ОсновныеДействияФормыПечатьПоУмолчанию(Кнопка) УниверсальныеМеханизмы.ПечатьПоДополнительнойКнопке(мДеревоМакетов, ЭтотОбъект, ЭтаФорма, Кнопка.Текст); КонецПроцедуры // Процедура - обработчик нажатия на кнопку "Печать" Процедура ОсновныеДействияФормыПечать(Кнопка) УниверсальныеМеханизмы.ПечатьПоДополнительнойКнопке(мДеревоМакетов, ЭтотОбъект, ЭтаФорма, Кнопка.Текст); КонецПроцедуры Процедура ПередОткрытием(Отказ, СтандартнаяОбработка) // Установка кнопок печати УстановитьКнопкиПечати(); КонецПроцедуры
В модуле объекта (документа) нужно вставить процедуры Печать, процедуру формирования встроенной печатной формы (в моем случае это ПечатьСметыЗатрат) и процедуру ПолучитьСтруктуруПечатныхФорм. Если встроенных печатных форм несколько, то это нужно отразить в процедурах ПолучитьСтруктуруПечатныхФорм и Печать и добавить соответствующие процедуры формирования встроенных печатных форм. Если же встроенных печатных форм в документе нет вообще, то процедуру ПолучитьСтруктуруПечатныхФорм и процедуры формирования печатных форм можно опустить.
#Если Клиент Тогда // Функция формирует табличный документ с печатной формой // // Возвращаемое значение: // Табличный документ - печатная форма // Функция ПечатьСметыЗатрат() ТабДокумент = Новый ТабличныйДокумент; //Здесь должен быть код формирования "встроенной" печатной формы Возврат ТабДокумент; КонецФункции // ПечатьСметыЗатрат() // Процедура осуществляет печать документа. Можно направить печать на // экран или принтер, а также распечатать необходимое количество копий. // // Название макета печати передается в качестве параметра, // по переданному названию находим имя макета в соответствии. // // Параметры: // НазваниеМакета - строка, название макета. // Процедура Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь, НепосредственнаяПечать = Ложь) Экспорт Если ИмяМакета = "СметаЗатратПлан_Печать" Тогда // Получить экземпляр документа на печать ТабДокумент = ПечатьСметыЗатрат(); КонецЕсли; УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект, "Смета затрат плановая"), НепосредственнаяПечать); КонецПроцедуры // Печать // Возвращает доступные варианты печати документа // // Возвращаемое значение: // Структура, каждая строка которой соответствует одному из вариантов печати // Функция ПолучитьСтруктуруПечатныхФорм() Экспорт Возврат Новый Структура("СметаЗатратПлан_Печать", "Смета затрат плановая"); КонецФункции // ПолучитьСтруктуруПечатныхФорм() #КонецЕсли
Вот такой нехитрый функционал. Если не углубляться в подробности, то все довольно просто.
Комментариев нет:
Отправить комментарий