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