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






Комментариев нет:
Отправить комментарий