Вызов стандартной печатной формы из обработки

1. doctorov_s 40 18.11.19 09:19 Сейчас в теме
Доброе утро! Столкнулся с таким вопросом: Можно ли вызвать стандартную печать документа из обработки?? Если можно то как?? Например: У меня есть обработка по созданию документов, при этом я хочу печатать их при этом не хочу толкать туда весь код по печатной форме, а просто вызвать стандартную печать...Как это можно сделать??
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
3. platonov.e 158 18.11.19 09:34 Сейчас в теме
(1) смотря как сделана печатная форма. сейчас их делают через обработки, для таких дел.
вообщем все зависит от печатной формы, как она сделана
2. vugluscr1991 12 18.11.19 09:34 Сейчас в теме
УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, ОбъектыПечати, ДополнительныеПараметры)
ИТС
Дмитрий74Чел; +1 Ответить
4. xSavantx 25 18.11.19 09:38 Сейчас в теме
Конфигурацию не забывайте указывать когда вопрос задаете
5. doctorov_s 40 18.11.19 09:43 Сейчас в теме
(4)БП 3.0, хочу использовать и стандартные печатные формы и внешние!
6. doctorov_s 40 18.11.19 09:56 Сейчас в теме
Все равно не понятно как вывести и как определить ту или иную форму печати!
7. platonov.e 158 18.11.19 10:00 Сейчас в теме
(6) Допустим возьмем документ счет на оплату. Там есть процедура печать(), она экспотрная - значит нам подходит. Вам нужно вызвать эту процедуру с нужными параметрами.
8. Xershi 1473 18.11.19 10:12 Сейчас в теме
Получаешь объект, где процедура печати. Указываешь параметры. Получаешь результат. Выводишь табличный документа.
9. doctorov_s 40 18.11.19 10:56 Сейчас в теме
(8)А можете какой нибудь пример написать??
10. Xershi 1473 18.11.19 11:28 Сейчас в теме
(9) вот так эмулирую окружение для ВПФ:
&НаКлиенте
Процедура Печать(Команда)
	
	ПечатьНаСервере("Херши_ПечатнаяФормаКомплектацииСтендаВнешняя");
	
КонецПроцедуры

&НаСервере
Процедура ПечатьНаСервере(КомандаПечати)
	
	МассивОбъектов = Новый Массив();
	МассивОбъектов.Добавить(Объект.СсылкаНаДокумент);
	
	КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(КомандаПечати);
	ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();	
	
	ОбъектыПечати = Новый СписокЗначений;
	
	ОбъектВЗначении = РеквизитФормыВЗначение("Объект");
	ОбъектВЗначении.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);	
	
	Для Каждого Строка Из КоллекцияПечатныхФорм Цикл
		
		ТабличныйДокумент = Строка.ТабличныйДокумент;		
		
	КонецЦикла;
	
КонецПроцедуры
Показать
Дмитрий74Чел; +1 Ответить
19. doctorov_s 40 18.11.19 13:04 Сейчас в теме
(10)Здесь вы я так понимаю пишите как распечатать внешнюю печатную форму при чем текущую, а я хочу сделать выбор любой печатной формы по документу. Например как это сделано с отправкой по почте!
20. Xershi 1473 18.11.19 13:04 Сейчас в теме
(19) ну так и пишите нужный вам код. Я вам только пример дал.
11. graforlow 3 18.11.19 11:40 Сейчас в теме
Для БП 30 в одно время делал такую обработку групповой печати документов, но в расширении. При этом печатную форму выбирал любую.
12. graforlow 3 18.11.19 11:44 Сейчас в теме
В модуле формы обработки размещаем подключаемые команды

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

// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
Показать
13. graforlow 3 18.11.19 11:45 Сейчас в теме
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)

	если ПолучитьСписокДокументовНаПечать()=0 тогда
		ПоказатьОповещениеПользователя("Актов не найдено.");
		Возврат
	КонецЕсли;
	
	элементы.ТчДокументыНаПечать.ВыделенныеСтроки.Очистить();
	Для Каждого Стр из ТчДокументыНаПечать цикл
		элементы.ТчДокументыНаПечать.ВыделенныеСтроки.Добавить(Стр.ПолучитьИдентификатор());	
	КонецЦикла;

	УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтаФорма, элементы.ТчДокументыНаПечать);
	
КонецПроцедуры
Показать
14. graforlow 3 18.11.19 11:47 Сейчас в теме
&НаСервере
Процедура ДобавитьКомандыПечати(Форма, КомандыПечати, Знач МестоРазмещенияКоманд = Неопределено)
Если МестоРазмещенияКоманд = Неопределено Тогда
		МестоРазмещенияКоманд = Форма.КоманднаяПанель;
	КонецЕсли;
	
	ОднаКомандаПечати = КомандыПечати.Количество() = 1;
	Если Не ОднаКомандаПечати Тогда
		ПодменюПечать = Форма.Элементы.Добавить(МестоРазмещенияКоманд.Имя + "ПодменюПечать", Тип("ГруппаФормы"), МестоРазмещенияКоманд);
		ПодменюПечать.Вид = ВидГруппыФормы.Подменю;
		ПодменюПечать.Заголовок = НСтр("ru = 'Печать'");
		ПодменюПечать.Картинка = БиблиотекаКартинок.Печать;
		
		МестоРазмещенияКоманд = ПодменюПечать;
	КонецЕсли;
	
	Для Каждого ОписаниеКомандыПечати Из КомандыПечати Цикл
		НомерКоманды = ОписаниеКомандыПечати.Владелец().Индекс(ОписаниеКомандыПечати);
		ИмяКоманды = МестоРазмещенияКоманд.Имя + "КомандаПечати" + НомерКоманды;
		
		КомандаФормы = Форма.Команды.Добавить(ИмяКоманды);
		КомандаФормы.Действие = "Подключаемый_ВыполнитьКомандуПечати";
		КомандаФормы.Заголовок = ОписаниеКомандыПечати.Представление;
		КомандаФормы.ИзменяетСохраняемыеДанные = Ложь;
		КомандаФормы.Отображение = ОтображениеКнопки.КартинкаИТекст;
		
		Если ЗначениеЗаполнено(ОписаниеКомандыПечати.Картинка) Тогда
			КомандаФормы.Картинка = ОписаниеКомандыПечати.Картинка;
		ИначеЕсли ОднаКомандаПечати Тогда
			КомандаФормы.Картинка = БиблиотекаКартинок.Печать;
		КонецЕсли;
		
		НовыйЭлемент = Форма.Элементы.Добавить(МестоРазмещенияКоманд.Имя + ИмяКоманды, Тип("КнопкаФормы"), МестоРазмещенияКоманд);
		НовыйЭлемент.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;
		НовыйЭлемент.ИмяКоманды = ИмяКоманды;

КонецПроцедуры
Показать
15. graforlow 3 18.11.19 11:48 Сейчас в теме
и в модуле менеждера
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	
	КомандыПечатиСчет = УправлениеПечатью.КомандыПечатиФормы("Документ.АктСверкиВзаиморасчетов.Форма.ФормаСписка");
	КомандыПечатиСчет.ЗаполнитьЗначения("СписокГруппаПечатиСчета", "МестоРазмещения");
	ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(КомандыПечатиСчет, КомандыПечати);
	
	
КонецПроцедуры
16. doctorov_s 40 18.11.19 12:17 Сейчас в теме
Есть обработка: https://infostart.ru/public/629739/, но у нее закрыт модуль...
17. doctorov_s 40 18.11.19 12:21 Сейчас в теме
(15)А можете сбросить обработку, а то не очень понятно)) Заранее спасибо
18. graforlow 3 18.11.19 12:38 Сейчас в теме
(17) Да конечно. Прикладываю расширение для БП 3.0.54.20
Прикрепленные файлы:
Расширение1_1.0.0.4.cfe
21. KVIKS 395 18.11.19 18:01 Сейчас в теме
Я ломал голову над этим вопросом для УНФ 1.6, думаю подойдет и здесь поскольку используется бсп и вот что получилось. Оказывается, момент печати вызывается не в документе или обработке. Т.е. в модуле документа есть процедура для формирования и возврата табличного документа печатной формы, сама эта процедура вызывается при открытии общей формы "Печать документов", с переданной ей параметрами, какие печатные формы печатать и откуда брать обработчики. Я написал код на скорую руку (не совсем оптимально, зато работает)

// 1 - нужен массив печатаемых объектов, как его получить, дело ваше  
	Мас=Новый Массив;
	Для Каждого стр из строки Цикл
		Мас.Добавить(Стр);
	КонецЦикла;	
	
	П=Новый Структура;
	П.Вставить("ИменаМакетов","ТОРГ13"); 
	п.Вставить("ИмяМенеджераПечати","Документ.ПеремещениеЗапасов"); 
	п.Вставить("ПараметрКоманды",Мас);
	параметрыПечати=Новый Структура();
	параметрыПечати.Вставить("Важность","");
	параметрыПечати.Вставить("Вид","Печать");
	параметрыПечати.Вставить("ВидимостьВФормах","");
	параметрыПечати.Вставить("ДополнительныеПараметры",Новый Структура("ДополнитьКомплектВнешнимиПечатнымиФормами",ложь));
	параметрыПечати.Вставить("ДополнитьКомплектВнешнимиПечатнымиФормами",Ложь);
	параметрыПечати.Вставить("ЕстьУсловияВидимости",Ложь);
	параметрыПечати.Вставить("ЗаголовокФормы","");
	параметрыПечати.Вставить("Идентификатор","ТОРГ13");
	параметрыПечати.Вставить("ИзменяетВыбранныеОбъекты",Ложь);
	параметрыПечати.Вставить("ИмяВФорме","ПодменюПечатьОбычное_ТОРГ13");
	параметрыПечати.Вставить("ИмяПараметраФормы","");
	параметрыПечати.Вставить("ИмяФормы","");	
	параметрыПечати.Вставить("Картинка",Новый Картинка);	
	параметрыПечати.Вставить("МенеджерПечати","Документ.ПеремещениеЗапасов");	
	параметрыПечати.Вставить("МножественныйВыбор",Истина);	
	параметрыПечати.Вставить("Назначение","");	
	параметрыПечати.Вставить("Обработчик","");	
	параметрыПечати.Вставить("ОбъектыПечати",Мас);	
	параметрыПечати.Вставить("ОтображениеКнопки");	
	параметрыПечати.Вставить("ПараметрыФормы");	
	параметрыПечати.Вставить("ПереопределитьПользовательскиеНастройкиКоличества",Ложь);	
	параметрыПечати.Вставить("Подменю","");	
	параметрыПечати.Вставить("Порядок",7);	
	параметрыПечати.Вставить("ПорядокВажности",2);	
	параметрыПечати.Вставить("Представление","ТОРГ13 (Накладная на внутреннее перемещение)");	
	параметрыПечати.Вставить("РежимЗаписи","Записывать");	
	параметрыПечати.Вставить("Серверная",Ложь);	
	параметрыПечати.Вставить("СочетаниеКлавиш");	
	параметрыПечати.Вставить("СразуНаПринтер",Ложь);	
	параметрыПечати.Вставить("ТипПараметра",Новый ОписаниеТипов("ДокументСсылка.ПеремещениеЗапасов"));	
	параметрыПечати.Вставить("ТребуетсяРаботаСФайлами",Ложь);	
	параметрыПечати.Вставить("УсловияВидимости",Новый Массив);	
	параметрыПечати.Вставить("ФиксированныйКомплект",Ложь);	
	параметрыПечати.Вставить("ФорматСохранения");	
	параметрыПечати.Вставить("ФункциональныеОпции","");
	
	п.Вставить("ПараметрыПечати",параметрыПечати);
	п.Вставить("ПараметрыФункциональныхОпций",Новый Структура);
	ОткрытьФорму("ОбщаяФорма.ПечатьДокументов",П);
Показать


Может быть ПараметрыПечати и не надо заполнять так подробно, но все эти поля взял из отладки в момент открытия общей формы. таким образом в обработке делается кнопка с таким кодом, меняется имя макета и имя менеджера печати под ваши нужды. И все готово - выглядит так как будто в списке документов выделил несколько строк и нажал печать.
22. big_ooo 39 24.03.21 20:29 Сейчас в теме
(21)
нашел более элегантное решение используя функцию БСП
УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Документ.ЗаказПокупателя","СчетНаОплатуСФаксимиле",мОбъектов,ЭтаФорма,Новый Структура);

при этом открывается печатная форма и последний реквизит струруту заполнять не обязательно
dukim; keln; +2 Ответить
23. vkozak 06.09.21 11:33 Сейчас в теме
(22)Может подскажешь, как в этом варианте
УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Документ.ЗаказПокупателя","СчетНаОплатуСФаксимиле",мОбъектов,ЭтаФорма,Новый Структура);

Вывести печать без предварительного просмотра сразу на принтер?
24. vkozak 06.09.21 14:12 Сейчас в теме
О разобрался, там оказывается все очень просто, Другая команда: УправлениеПечатьюКлиент.ВыполнитьПечатьНаПринтер(
Оставьте свое сообщение
Вакансии
Программист 1С
Казань
зарплата от 150 000 руб.
Полный день

Программист 1С:ERP
Москва
зарплата от 100 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 200 000 руб. до 300 000 руб.
Полный день

Программист 1С (удаленно)
Самара
зарплата от 230 000 руб. до 230 000 руб.
Полный день

Руководитель группы разработки 1С
Москва
зарплата от 250 000 руб. до 250 000 руб.
Полный день