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