Skip to content

Внешняя печатная форма

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

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

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

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

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

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

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

Модуль формы

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

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

А после добавления в справочник у нас автоматом нарисуется нужная команда печати для тех элементов, которые мы указали в массиве назначений (Если на форме используются подключаемые команды, конечно. Просто так ничего не нарисуется)