Программная печать внешних печатных форм для УТ 11 (управляемые формы) двумя методами, с выводом шаблона на экран и печатью напрямую на принтер

Программирование - Практика программирования

внешняя обработка печать сразу на принтер

15
Программная печать внешних печатных форм для УТ 11 (управляемые формы) двумя методами, с выводом шаблона на экран и печатью напрямую на принтер.

Для того, чтобы не захламлять интерфейс печати внешними формами и исключить ошибку печати не той формы, которая нужна в конкретной ситуации был реализован алгоритм печати внешних печатных форм. В форме добавляется Команда "Печать ..."  (чтобы было понятно для пользователя), размещается где-нибудь на форме и создаётся Процедура в модуле формы.

Предлагаю на суд читателей два алгоритма печати внешних печатных форм.

1. Печать с выводом шаблона на экран.

&НаКлиенте
Процедура ПечатьАкта(Команда) // команда печати формы
        Док = ТекДанные.Ссылка; // получение ссылки Документа
        ВПФ = НайтиВПФ(Док); // получение Внешней печатной формы
// у меня ВПФ привязана к реквизиту документа, если нужно найти запись в Справочнике ДополнительныеОтчетыИОбработки,
// то надо переписать Функцию НайтиВПФ

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

&НаСервереБезКонтекста
Функция НайтиВПФ(Док) //можно передавать НаименованиеВПФ
    ВПФ = Док.Контракт.ПечатнаяФормаАкта; // получаем ссылку на ВПФ из переданного документа
    Возврат ВПФ;//Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(НаименованиеВПФ);//если надо найти по имени
КонецФункции

&НаСервереБезКонтекста
Функция КомандыНаСервере(ВПФ)
    Возврат ВПФ.Наименование;
КонецФункции

В результате, Вы сможете лицезреть заполненный шаблон печатной формы на экране.

В случае, когда надо печатать массив документов с различными шаблонами форм (внешними печатными формами), то 

2. Печать внешней печатной формы прямо на принтер.

&НаКлиенте
Процедура ПечатьАкта(Команда)
    Для каждого ТекДанные из Объект.Акты Цикл //массив документов
        Док = ТекДанные.Акт;
        ВПФ = НайтиВПФ(Док);

        ОбъектыНазначения = Новый Массив;
        ОбъектыНазначения.Добавить(Док);

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

&НаСервереБезКонтекста
Функция ПечатьФормыНаСервере(ОбъектыНазначения, Форма , ОбъектыПечати)
    КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(Форма.Команды[0].Идентификатор);
    ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
    ДвоичныеДанные = Форма.ХранилищеОбработки.Получить();
    АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
    ИмяОбр = ВнешниеОбработки.Подключить(АдресВоВременномХранилище,, Ложь);
    Об    = ВнешниеОбработки.Создать(ИмяОбр);
    Об.Печать(ОбъектыНазначения, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
    МассивПечатныхФорм = ОбщегоНазначения.ТаблицаЗначенийВМассив(КоллекцияПечатныхФорм);
    Возврат МассивПечатныхФорм;
КонецФункции

&НаСервереБезКонтекста
Функция НайтиВПФ(Док)
    ВПФ = Док.Контракт.ПечатнаяФормаАкта;
    Возврат ВПФ;//Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(НаименованиеВПФ);//если надо найти по имени
КонецФункции

сразу печатает на принтер.

P.S. Чтобы не потерялось и, может, кому пригодится.

15

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. pentanom 16 21.03.18 20:04 Сейчас в теме
Это для любой конфигурации ?
2. Misha_J 78 22.03.18 08:54 Сейчас в теме
3. pentanom 16 22.03.18 18:24 Сейчас в теме
(2) Я про номер релиза. Например, в 11.3.4.197 я не могу найти Док.Контракт.
4. Misha_J 78 22.03.18 19:22 Сейчас в теме
Вы внимательно прочитайте комментарии в коде. Этот реквизит НЕ стандартный.
Оставьте свое сообщение