Внешняя печатная форма с вводом параметров через дополнительную форму

Печать - Универсальные печатные формы

Удобный ввод параметров в печатную форму с помощью дополнительной формы

Иногда пользователям необходимо печатать отчет с определенными данными и такие данные могут меняться, поэтому было бы логичнее создать форму ввода параметров для печатной формы, чтобы не тревожить программиста по пустякам)) Вот хочу показать небольшой пример как я вывела на печатную форму свой параметр "Название печатной формы", вообще в параметры можно добавлять что угодно, но проще для меня вывести обычную строку для примера:).

Итак, что мы делаем:

1. Создаем новую внешнюю обработку и указываем сведения в модуле объекта:

Функция СведенияОВнешнейОбработке() Экспорт
	
	РегистрационныеДанные = Новый Структура;
	МассивНазначений = Новый Массив;
	
	РегистрационныеДанные.Вставить("Назначение", МассивНазначений);
	РегистрационныеДанные.Вставить("Наименование", "Печатная форма");
	РегистрационныеДанные.Вставить("БезопасныйРежим", Ложь);
	РегистрационныеДанные.Вставить("Версия", "1.0");
	
	РегистрационныеДанные.Вставить("Вид", "ПечатнаяФорма");
	
	РегистрационныеДанные.Вставить("Информация", "Обработка сделано по новому стандарту подключения внешних обработок 8.2. ");
	
	тзКоманд = Новый ТаблицаЗначений;
	тзКоманд.Колонки.Добавить("Идентификатор");
	тзКоманд.Колонки.Добавить("Представление");
	тзКоманд.Колонки.Добавить("Модификатор");
	тзКоманд.Колонки.Добавить("ПоказыватьОповещение");
	тзКоманд.Колонки.Добавить("Использование");
	
	строкаКоманды = тзКоманд.Добавить();
	строкаКоманды.Идентификатор = "ПечатнаяФорма";
	строкаКоманды.Представление = "Печатная форма";
	строкаКоманды.ПоказыватьОповещение = Истина;
	строкаКоманды.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();
	строкаКоманды.Модификатор = "ПечатьMXL";
		
	РегистрационныеДанные.Вставить("Команды", тзКоманд);

	Возврат РегистрационныеДанные;
КонецФункции

Также в модуле объекта пишем две процедуры:

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


Функция ПечатьМакета(МассивОбъектов, ОбъектыПечати)
	ДокументРезультат = Новый ТабличныйДокумент;	
	Макет     = ЭтотОбъект.ПолучитьМакет("НовыйМакет");		
	ОбластьМакета	= Макет.ПолучитьОбласть("ОбластьМакета");
	ОбластьМакета.Параметры.НазваниеПечатнойФормы = МассивОбъектов[0].НазваниеПечатнойФормы;
	ДокументРезультат.Вывести(ОбластьМакета);		
	
	Возврат ДокументРезультат;	
	
КонецФункции

2. Переходим к созданию основной формы обработки, она нам понадобится только для исполнения процедур:

  • Добавим параметры к форме, обязательно в свойствах параметров указать "Ключевой параметр", после этого параметры выделятся жирным шрифтом 

  • В модуле основной формы пишем следующий код:
&НаКлиенте
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
	ПараметрыФормы = Новый Структура;
	ОткрытьФорму("ВнешняяОбработка.ПечатнаяФорма.Форма.ФормаВвода",ПараметрыФормы,,,,,Новый ОписаниеОповещения("ПечатьЗавершение", ЭтаФорма, ОбъектыНазначенияМассив), РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);	
КонецПроцедуры

&НаКлиенте
Процедура ПечатьЗавершение(Результат, ДополнительныеПараметры) Экспорт

	Если Результат <> Неопределено Тогда 
		Если Результат.Печать Тогда 
			ВыполняемаяКоманда = Параметры;
			
			ПараметрыОткрытия                                         = Новый Структура("ИсточникДанных, ПараметрыИсточника");
			ПараметрыОткрытия.ИсточникДанных                          = Параметры.ДополнительнаяОбработкаСсылка;
			ПараметрыОткрытия.ПараметрыИсточника                      = Новый Структура("ИдентификаторКоманды, ОбъектыНазначения");
			ПараметрыОткрытия.ПараметрыИсточника.ИдентификаторКоманды = ВыполняемаяКоманда.ИдентификаторКоманды;
			
			ДополнительныеПараметры = Новый Структура();
			ДополнительныеПараметры.Вставить("СтруктураПараметров", Результат);
			
			ОбъектыНазначения = Новый Массив;
			ОбъектыНазначения.Добавить(Результат);
			
			//Ссылки на вызвавшие форму объекты
			Для каждого ОбъектНазначения Из ВыполняемаяКоманда.ОбъектыНазначения Цикл
				ОбъектыНазначения.Добавить(ОбъектНазначения);
			КонецЦикла; 
			ПараметрыОткрытия.ПараметрыИсточника.ОбъектыНазначения = ОбъектыНазначения;
			
			//Вывод сформированного табличного документа в штатную форму.
			ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия);
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры
  • Создаем еще одну форму, и назовем ее "ФормаВвода", разместим на ней реквизит "НазваниеПечатнойФормы":

  • И на команду "Печать" добавим следующий код:
&НаКлиенте
Процедура Печать(Команда)
	Структура = Новый Структура; 
	Структура.Вставить("НазваниеПечатнойФормы", НазваниеПечатнойФормы);
	Структура.Вставить("Печать" , Истина); 
	ЭтаФорма.Закрыть(Структура);
КонецПроцедуры

 

Данная печатная форма тестировалась в конфигурации 1с Бухгалтерия предприятия 3.0 (8.3.10.2561).

Скачать файлы

Наименование Файл Версия Размер
Пример печатной формы
.epf 11,23Kb
23.03.18
6
.epf 11,23Kb 6 Скачать

См. также

В этой теме еще нет сообщений.
Оставьте свое сообщение