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

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

параметры в печатную форму печатная форма настройки печатной формы

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

 

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

14

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

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

См. также

Специальные предложения

Избранное Подписка Сортировка: Древо
В этой теме еще нет сообщений.
Оставьте свое сообщение