Особенности внешних отчетов и обработок

Для правильной регистрации с помощью БСП в модуле внешней обработки требуется наличие экспортной функции «СведенияОВнешнейОбработке()», возвращающей структуру с параметрами регистрации внешней обработки.

#Область Сведения
	
Функция СведенияОВнешнейОбработке() Экспорт

	ПараметрыРегистрации = Новый Структура;
	
	ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");
	// возможные значения «ДополнительныйОтчет», «ЗаполнениеОбъекта»,
	// «ДополнительнаяОбработка», «Отчет», «ПечатнаяФорма»
	// или «СозданиеСвязанныхОбъектов»
	
	//НазначениеОбработки = Новый Массив;
	// Массив названий объектов, для которого предназначается
	// данных отчет или обработка. Например — «Документ.РеализацияТоваровУслуг».
	//НазначениеОбработки.Добавить("Документ.АвансовыйОтчет");
	//ПараметрыРегистрации.Вставить("Назначение", НазначениеОбработки);
	
	ПараметрыРегистрации.Вставить("Наименование", НСтр("ru = 'Внешняя обработка'"));
	// Пользовательское имя обработки
		
	//ПараметрыРегистрации.Вставить("ВерсияБСП", "1.2.1.4");
	// Номер версии БСП для Совместимости
	
	ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
	// БезопасныйРежим — булево, отображает режим запуска обработка — безопасный или нет.
	// В безопасном режиме недоступен привилегированный режим,
	// COM-соединение, загрузка dll, доступ к файловой системе и интернету
	
	ПараметрыРегистрации.Вставить("Информация", НСтр("ru = 'Информация отсутствует'"));
	// Информация — строка, комментарий, который характеризует обработку.
	
	ПараметрыРегистрации.Вставить("Версия", "1.0");
	// Версия — строка, версия обработки
	
	ТаблицаКоманд = ПолучитьТаблицуКоманд();
	// Команда открытия обработки
	ДобавитьКоманду(ТаблицаКоманд,
		НСтр("ru = 'Открытие внешней обработки'"),
		"ОткрытиеВнешнейОбработки",
		"ОткрытиеФормы",
		Истина,
		"");
	ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
	
	Возврат ПараметрыРегистрации;

КонецФункции // СведенияОВнешнейОбработке()

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

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
	
	НоваяКоманда = ТаблицаКоманд.Добавить();
	НоваяКоманда.Представление = Представление;
	НоваяКоманда.Идентификатор = Идентификатор;
	НоваяКоманда.Использование = Использование;
	НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
	НоваяКоманда.Модификатор = Модификатор;
	
КонецПроцедуры

#КонецОбласти

Шаблон

В модуле внешней печатной формы должна содержаться экспортная процедура «Печать».

//
// Параметры:
// МассивОбъектов - Массив - ссылки на объекты
// КоллекцияПечатныхФорм - ТаблицаЗначений - уже сформированные документы
// ОбъектыПечати - СписокЗначений - значение это ссылка на объект, а представление это имя области в которой был введен объект
// ПараметрыВывода - произвольные параметры для печати.
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	
	ТабДокумент = СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати);
	КоллекцияПечатныхФорм[0].ТабличныйДокумент = ТабДокумент;
	УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "Макет1", "Макет 1", ТабДокумент);

КонецПроцедуры

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