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

20.02.18

Задачи пользователя - Адаптация типовых решений

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    5185    11    5    

20

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    3559    8    0    

27

Адаптация типовых решений Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)

Каждый из нас сталкивается с ситуацией, когда какой-нибудь менеджер показывает свой Excel и рассказывает, как он что-то из 1С копирует в него, снабжает пояснениями, выделяет цветом и т.д. и т.п. Заканчивается все просьбой сделать вот чтобы также было в 1С. И оказывается такой человек (почти с гарантией) либо лучшим продажником, либо каким-то важным, за все отвечающим, - на ком все держится.

2 стартмани

22.04.2024    4765    dimanich70    15    

21

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    3786    dimanich70    8    

16

Адаптация типовых решений Программист Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Доработка типового отчета "Связанные документы" позволяет просто и быстро расширять состав объектов для построения структуры подчиненности документов, используя объекты основной конфигурации и любых расширений.

1 стартмани

27.10.2023    2832    21    avmartynov    14    

53
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. pentanom 25 21.03.18 20:04 Сейчас в теме
Это для любой конфигурации ?
2. Misha_J 94 22.03.18 08:54 Сейчас в теме
Тестировалось на УТ 11.
3. pentanom 25 22.03.18 18:24 Сейчас в теме
(2) Я про номер релиза. Например, в 11.3.4.197 я не могу найти Док.Контракт.
4. Misha_J 94 22.03.18 19:22 Сейчас в теме
Вы внимательно прочитайте комментарии в коде. Этот реквизит НЕ стандартный.
5. Bahyt 20 14.11.19 13:54 Сейчас в теме
УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм() теперь не экспортная функция
6. Misha_J 94 03.12.19 10:50 Сейчас в теме
7. unknown181538 158 07.12.21 01:23 Сейчас в теме
&НаСервереБезКонтекста
Функция КомандыНаСервере(ВПФ)
Возврат ВПФ.Наименование;
КонецФункции
Вот сюда вписал идентификатор команды печати, который у меня не совпадает с наименованием в справочнике, в котором представление. В остальном - все сработало.
8. user645544_Snimchenko.Aa 07.07.22 16:46 Сейчас в теме
Спасибо! пригодилось.
9. unknown181538 158 22.08.22 01:59 Сейчас в теме
Второй вариант на сервере и в виде одной процедуры

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