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

1. doctorov_s 41 18.11.19 09:19 Сейчас в теме
Доброе утро! Столкнулся с таким вопросом: Можно ли вызвать стандартную печать документа из обработки?? Если можно то как?? Например: У меня есть обработка по созданию документов, при этом я хочу печатать их при этом не хочу толкать туда весь код по печатной форме, а просто вызвать стандартную печать...Как это можно сделать??
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. platonov.e 160 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 41 18.11.19 09:43 Сейчас в теме
(4)БП 3.0, хочу использовать и стандартные печатные формы и внешние!
6. doctorov_s 41 18.11.19 09:56 Сейчас в теме
Все равно не понятно как вывести и как определить ту или иную форму печати!
7. platonov.e 160 18.11.19 10:00 Сейчас в теме
(6) Допустим возьмем документ счет на оплату. Там есть процедура печать(), она экспотрная - значит нам подходит. Вам нужно вызвать эту процедуру с нужными параметрами.
8. Xershi 1553 18.11.19 10:12 Сейчас в теме
Получаешь объект, где процедура печати. Указываешь параметры. Получаешь результат. Выводишь табличный документа.
9. doctorov_s 41 18.11.19 10:56 Сейчас в теме
(8)А можете какой нибудь пример написать??
10. Xershi 1553 18.11.19 11:28 Сейчас в теме
(9) вот так эмулирую окружение для ВПФ:
&НаКлиенте
Процедура Печать(Команда)
	
	ПечатьНаСервере("Херши_ПечатнаяФормаКомплектацииСтендаВнешняя");
	
КонецПроцедуры

&НаСервере
Процедура ПечатьНаСервере(КомандаПечати)
	
	МассивОбъектов = Новый Массив();
	МассивОбъектов.Добавить(Объект.СсылкаНаДокумент);
	
	КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(КомандаПечати);
	ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();	
	
	ОбъектыПечати = Новый СписокЗначений;
	
	ОбъектВЗначении = РеквизитФормыВЗначение("Объект");
	ОбъектВЗначении.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);	
	
	Для Каждого Строка Из КоллекцияПечатныхФорм Цикл
		
		ТабличныйДокумент = Строка.ТабличныйДокумент;		
		
	КонецЦикла;
	
КонецПроцедуры
Показать
olezhe; romulanin; Дмитрий74Чел; +3 Ответить
19. doctorov_s 41 18.11.19 13:04 Сейчас в теме
(10)Здесь вы я так понимаю пишите как распечатать внешнюю печатную форму при чем текущую, а я хочу сделать выбор любой печатной формы по документу. Например как это сделано с отправкой по почте!
20. Xershi 1553 18.11.19 13:04 Сейчас в теме
(19) ну так и пишите нужный вам код. Я вам только пример дал.
25. user1860440 30.09.24 15:51 Сейчас в теме
(10) Добрый день! Подскажите, вот этот код для печати прописывается в модуле обработки или в форме? Не пойму откуда вызывается процедура печать, если это обработка(не внешняя)
26. Xershi 1553 30.09.24 16:35 Сейчас в теме
(25) создаете новую форму и указываете этот код.
Желательно форму указать основной (по умолчанию так и делается).
28. user1860440 30.09.24 16:37 Сейчас в теме
(26) я весь код в основной форме пишу, ругается на строку Об.Печать(). Не видит процедуру почему-то. Поэтому и решила, что не так что-то)
29. Xershi 1553 30.09.24 16:40 Сейчас в теме
(28) значит процедура не экспортная. Или об мусор какой.
30. user1860440 30.09.24 16:46 Сейчас в теме
(29)
Извините за кривое фото) вот так прописала, не видит(
Форма выбрана основной, объект формы - "Объект", процедура моей кнопки печати называется Печать. Вроде все верно
Прикрепленные файлы:
31. user1860440 30.09.24 17:01 Сейчас в теме
(29) я создала команду формы, может надо команду обработки?
32. Xershi 1553 30.09.24 19:06 Сейчас в теме
(31) посмотрите как работает в БСП. Или скачайте одну из форм. У вас пока нету понимания что вы пишите.
Код печати в модуле, возврат ТД и на форме выводим.
33. user1860440 30.09.24 19:15 Сейчас в теме
(32)
Благодарю) это и хотела понять. Потому что с документами понятно, а вот если обработки, ещё и не внешняя, вообще путаница
11. graforlow 4 18.11.19 11:40 Сейчас в теме
Для БП 30 в одно время делал такую обработку групповой печати документов, но в расширении. При этом печатную форму выбирал любую.
12. graforlow 4 18.11.19 11:44 Сейчас в теме
В модуле формы обработки размещаем подключаемые команды

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

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

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

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

КонецПроцедуры
Показать
15. graforlow 4 18.11.19 11:48 Сейчас в теме
и в модуле менеждера
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	
	КомандыПечатиСчет = УправлениеПечатью.КомандыПечатиФормы("Документ.АктСверкиВзаиморасчетов.Форма.ФормаСписка");
	КомандыПечатиСчет.ЗаполнитьЗначения("СписокГруппаПечатиСчета", "МестоРазмещения");
	ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(КомандыПечатиСчет, КомандыПечати);
	
	
КонецПроцедуры
16. doctorov_s 41 18.11.19 12:17 Сейчас в теме
Есть обработка: https://infostart.ru/public/629739/, но у нее закрыт модуль...
17. doctorov_s 41 18.11.19 12:21 Сейчас в теме
(15)А можете сбросить обработку, а то не очень понятно)) Заранее спасибо
18. graforlow 4 18.11.19 12:38 Сейчас в теме
(17) Да конечно. Прикладываю расширение для БП 3.0.54.20
Прикрепленные файлы:
Расширение1_1.0.0.4.cfe
21. KVIKS 427 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 Сейчас в теме
О разобрался, там оказывается все очень просто, Другая команда: УправлениеПечатьюКлиент.ВыполнитьПечатьНаПринтер(
27. Xershi 1553 30.09.24 16:37 Сейчас в теме
А вот подключенную обработку, можно отладить вот так (также запуск в фоне):
// Интерфейс для выполнения команд обработки.
Процедура ВыполнитьКоманду(ИмяКоманды, ДополнительныеПараметры) Экспорт

// Для тестирования контекста отладки, закомментировать после завершения отладки!
	//Адрес = "F:\Обработки\Внешние обработки и отчеты\Внешние обработки\Дополнительная обработка\Загрузка данных из Excel 2.4.epf";
	//Если Адрес <> ЭтотОбъект.ИспользуемоеИмяФайла Тогда
	//	ТекущаяОбработка = ВнешниеОбработки.Создать(Адрес, БезопасныйРежим());
	//	ЗаполнитьЗначенияСвойств(ТекущаяОбработка, ЭтотОбъект);
	//	ТекущаяОбработка.ВыполнитьКоманду(ИмяКоманды, ДополнительныеПараметры);
	//	Возврат;
	//КонецЕсли;
Показать

Единственное, после записи в справочник, нужно модифицировать обработку и сохранить, например добавить пробел и удалить. Иначе будет переполнение стека. Т.к. обработка будет сама себя вызывать в цикле.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот