kb-personal/src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Дополнительные отчеты и обработки/Настройки/Внешняя печатная форма (С ручным созданием элементов формы).md
wakadakawaka d0c69a8cea files
2025-07-21 21:45:52 +05:00

178 KiB
Raw Blame History

title, slug
title slug
Внешняя печатная форма (С ручным созданием элементов формы) общие-бсп-стандартные-подсистемы-дополнительные-отчеты-и-обработки-настройки/внешняя-печатная-форма-с-ручным-созданием-элементов-формы

Настройка обработки

Создаем новую внешнюю обработку

Создаем макет печатной формы и форму обработки для тестирования. На форму обработки выводим один реквизит с типом того документа, для которого разрабатываем эту ПФ image.png

На форме обработки определяем ключевые параметры

Имя параметра Тип
ДополнительнаяОбработкаСсылка СправочникСсылка.ДополнительныеОтчетыИОбработки
ИдентификаторКоманды Строка
ИмяФормы Строка
ОбъектыНазначения Произвольный

Модуль объекта обработки

#Область СлужебныйПрограммныйИнтерфейс
 
Функция СведенияОВнешнейОбработке() Экспорт
	
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(СтандартныеПодсистемыСервер.ВерсияБиблиотеки());
	Представление = "Моя печатная форма. Это будет видеть пользователь";
	Идентификатор = "УникальноеИмяКомандыКонкретноЭтойПечатнойФормы"; // произвольное имя. используется далее по коду и в модуле формы
	
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
	ПараметрыРегистрации.Назначение = МассивНазначений();
	ПараметрыРегистрации.Версия = "1.0";
	ПараметрыРегистрации.БезопасныйРежим = Ложь;
	ПараметрыРегистрации.Информация = "Это будет видно в карточке дополнительной обработки. Сюда пишем всякую полезную информацию";
	
	Команда = ПараметрыРегистрации.команды.Добавить();
	Команда.Представление = Представление;
	Команда.Идентификатор = Идентификатор;
	Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();
	Команда.ПоказыватьОповещение = Истина;
	Команда.Модификатор = "ПечатьMXL"; // ВАЖНО
	
	Возврат ПараметрыРегистрации;
	
КонецФункции
 
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
 
	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "УникальноеИмяКомандыКонкретноЭтойПечатнойФормы") Тогда
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
			КоллекцияПечатныхФорм,
			"УникальноеИмяКомандыКонкретноЭтойПечатнойФормы",
			"Синоним макета",
			СформироватьСобственнуюПечатнуюФорму(МассивОбъектов, ОбъектыПечати)); // тут вызов нашей функции, которая будет возвращать заполненный ТабДок
	КонецЕсли;
	
КонецПроцедуры
 
#КонецОбласти
 
#Область СлужебныеПроцедурыИФункции
 
Функция МассивНазначений()
	
	МассивНазначений = Новый Массив;
	// Имя документа, для которого нацелена эта печатка. Пишем как в запросе
	// Можно добавлять несколько назначений, но тогда нужно при получении данных для ПФ это учитывать
	// Это назначение определяет, для каких документов будет выведена команда в группу "Печать"
	МассивНазначений.Добавить("Документ.ПриобретениеТоваровУслуг"); 
	Возврат МассивНазначений;
	
КонецФункции
 
Функция СформироватьСобственнуюПечатнуюФорму(МассивОбъектов, ОбъектыПечати) Экспорт
	
	ТабДок = Новый ТабличныйДокумент;
	
	ДанныеДляПечати = ДанныеДляПечатиМоихДокументов(МассивОбъектов); // тут получаем данные для вывода
	
	// Получаем данные, получаем макет, заполняем, возвращаем
	
	ТабДок.Область("R1C1").Текст = "Пример вывода";
	
	Возврат ТабДок;
	
КонецФункции
 
Функция ДанныеДляПечатиМоихДокументов(МассивОбъектов)
	
	// Тут получаем данные
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ * Из Документ.ПриобретениеТоваровУслуг КАК Т ГДЕ Т.Ссылка В(&МассивОбъектов)";
	Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
	
	Выборка = Запрос.Выполнить().Выбрать();
	
	Возврат Выборка;
	
КонецФункции
 
#КонецОбласти

Модуль формы

&НаКлиенте
Процедура Печать(ИмяКоманды, 
		МассивОбъектов, 
		ПараметрыПечати = Неопределено, 
		КоллекцияПечатныхФорм = Неопределено, 
		ОбъектыПечати = Неопределено,
		ПараметрыВывода = Неопределено) Экспорт
	
	ВыполняемаяКоманда = Параметры;
	
	ПараметрыИсточника = Новый Структура("ИдентификаторКоманды, ОбъектыНазначения");
	ПараметрыИсточника.ИдентификаторКоманды = Выполняемаякоманда.ИдентификаторКоманды;
	ПараметрыИсточника.ОбъектыНазначения = ВыполняемаяКоманда.ОбъектыНазначения;
	
	ПараметрыОткрытия = Новый Структура("ИсточникДанных, ПараметрыИсточника");
	ПараметрыОткрытия.ИсточникДанных = ВыполняемаяКоманда.ДополнительнаяОбработкаСсылка;
	ПараметрыОткрытия.ПараметрыИсточника = ПараметрыИсточника;
	
	ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия);
 
КонецПроцедуры
 
&НаСервере
Функция СформироватьТабличныйДокументНаСервере(МассивДокументов)
	
	ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
	
	// ТУТ ТОТ ЖЕ ИДЕНТИФИКАТОР КОМАНДЫ, ЧТО И В МОДУЛЕ ОБЪЕКТА
	КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("УникальноеИмяКомандыКонкретноЭтойПечатнойФормы");
	ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
	
	ОбработкаОбъект.Печать(МассивДокументов, КоллекцияПечатныхФорм, МассивДокументов, ПараметрыВывода);
	
	МассивПечатныхФорм = ОбщегоНазначения.ТаблицаЗначенийВМассив(КоллекцияПечатныхФорм);
	
	Возврат МассивПечатныхФорм;
	
КонецФункции
 
&НаКлиенте
Процедура ТестПечати(Команда)
	
	МассивДокументов = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ДокументСсылка);
	
	МассивПечатныхФорм = СформироватьТабличныйДокументНаСервере(МассивДокументов);
	
	УправлениеПечатьюКлиент.ПечатьДокументов(МассивПечатныхФорм, МассивДокументов, ЭтотОбъект);
	
КонецПроцедуры

Теперь можно заниматься отладкой печати БЕЗ добавления нового элемента в справочник «ДополнительныеОтчетыОбработки». Для этого мы рисовали форму в обработке image.png image.png