Вызов стандартной печатной формы из обработки
Доброе утро! Столкнулся с таким вопросом: Можно ли вызвать стандартную печать документа из обработки?? Если можно то как?? Например: У меня есть обработка по созданию документов, при этом я хочу печатать их при этом не хочу толкать туда весь код по печатной форме, а просто вызвать стандартную печать...Как это можно сделать??
По теме из базы знаний
- Внешние печатные формы для нетиповой конфигурации (управляемое приложение)
- Дополнительные отчеты и обработки для конфигураций, основанных на БСП. Часть 2. Печатные формы (MXL).
- Расходная накладная (со скидками) - внешняя печатная форма к документу Реализация товаров и услуг
- Вывод печатных форм с запросом данных в форму "Печать документов" из подсистемы БСП "Печать".
- Универсальная печатная форма "Анализ объекта" + шаблон подключаемой обработки для 1С на управляемых формах + отладка внешней печатной формы.
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(9) вот так эмулирую окружение для ВПФ:
&НаКлиенте
Процедура Печать(Команда)
ПечатьНаСервере("Херши_ПечатнаяФормаКомплектацииСтендаВнешняя");
КонецПроцедуры
&НаСервере
Процедура ПечатьНаСервере(КомандаПечати)
МассивОбъектов = Новый Массив();
МассивОбъектов.Добавить(Объект.СсылкаНаДокумент);
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(КомандаПечати);
ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
ОбъектыПечати = Новый СписокЗначений;
ОбъектВЗначении = РеквизитФормыВЗначение("Объект");
ОбъектВЗначении.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
Для Каждого Строка Из КоллекцияПечатныхФорм Цикл
ТабличныйДокумент = Строка.ТабличныйДокумент;
КонецЦикла;
КонецПроцедуры
Показать
В модуле формы обработки размещаем подключаемые команды
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПараметрыРазмещения = ПодключаемыеКоманды.ПараметрыРазмещения();
ПараметрыРазмещения.Источники = Новый ОписаниеТипов("ДокументСсылка.АктСверкиВзаиморасчетов");
ПараметрыРазмещения.КоманднаяПанель = Элементы.СписокГруппаПечатиСчета;
ПараметрыРазмещения.ПрефиксГрупп = "СписокГруппаПечатиСчета";
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект,ПараметрыРазмещения);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
Показать&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
если ПолучитьСписокДокументовНаПечать()=0 тогда
ПоказатьОповещениеПользователя("Актов не найдено.");
Возврат
КонецЕсли;
элементы.ТчДокументыНаПечать.ВыделенныеСтроки.Очистить();
Для Каждого Стр из ТчДокументыНаПечать цикл
элементы.ТчДокументыНаПечать.ВыделенныеСтроки.Добавить(Стр.ПолучитьИдентификатор());
КонецЦикла;
УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтаФорма, элементы.ТчДокументыНаПечать);
КонецПроцедуры
Показать&НаСервере
Процедура ДобавитьКомандыПечати(Форма, КомандыПечати, Знач МестоРазмещенияКоманд = Неопределено)
Если МестоРазмещенияКоманд = Неопределено Тогда
МестоРазмещенияКоманд = Форма.КоманднаяПанель;
КонецЕсли;
ОднаКомандаПечати = КомандыПечати.Количество() = 1;
Если Не ОднаКомандаПечати Тогда
ПодменюПечать = Форма.Элементы.Добавить(МестоРазмещенияКоманд.Имя + "ПодменюПечать", Тип("ГруппаФормы"), МестоРазмещенияКоманд);
ПодменюПечать.Вид = ВидГруппыФормы.Подменю;
ПодменюПечать.Заголовок = НСтр("ru = 'Печать'");
ПодменюПечать.Картинка = БиблиотекаКартинок.Печать;
МестоРазмещенияКоманд = ПодменюПечать;
КонецЕсли;
Для Каждого ОписаниеКомандыПечати Из КомандыПечати Цикл
НомерКоманды = ОписаниеКомандыПечати.Владелец().Индекс(ОписаниеКомандыПечати);
ИмяКоманды = МестоРазмещенияКоманд.Имя + "КомандаПечати" + НомерКоманды;
КомандаФормы = Форма.Команды.Добавить(ИмяКоманды);
КомандаФормы.Действие = "Подключаемый_ВыполнитьКомандуПечати";
КомандаФормы.Заголовок = ОписаниеКомандыПечати.Представление;
КомандаФормы.ИзменяетСохраняемыеДанные = Ложь;
КомандаФормы.Отображение = ОтображениеКнопки.КартинкаИТекст;
Если ЗначениеЗаполнено(ОписаниеКомандыПечати.Картинка) Тогда
КомандаФормы.Картинка = ОписаниеКомандыПечати.Картинка;
ИначеЕсли ОднаКомандаПечати Тогда
КомандаФормы.Картинка = БиблиотекаКартинок.Печать;
КонецЕсли;
НовыйЭлемент = Форма.Элементы.Добавить(МестоРазмещенияКоманд.Имя + ИмяКоманды, Тип("КнопкаФормы"), МестоРазмещенияКоманд);
НовыйЭлемент.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;
НовыйЭлемент.ИмяКоманды = ИмяКоманды;
КонецПроцедуры
Показать
и в модуле менеждера
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КомандыПечатиСчет = УправлениеПечатью.КомандыПечатиФормы("Документ.АктСверкиВзаиморасчетов.Форма.ФормаСписка");
КомандыПечатиСчет.ЗаполнитьЗначения("СписокГруппаПечатиСчета", "МестоРазмещения");
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(КомандыПечатиСчет, КомандыПечати);
КонецПроцедуры
(17) Да конечно. Прикладываю расширение для БП 3.0.54.20
Прикрепленные файлы:
Расширение1_1.0.0.4.cfe
Я ломал голову над этим вопросом для УНФ 1.6, думаю подойдет и здесь поскольку используется бсп и вот что получилось. Оказывается, момент печати вызывается не в документе или обработке. Т.е. в модуле документа есть процедура для формирования и возврата табличного документа печатной формы, сама эта процедура вызывается при открытии общей формы "Печать документов", с переданной ей параметрами, какие печатные формы печатать и откуда брать обработчики. Я написал код на скорую руку (не совсем оптимально, зато работает)
Может быть ПараметрыПечати и не надо заполнять так подробно, но все эти поля взял из отладки в момент открытия общей формы. таким образом в обработке делается кнопка с таким кодом, меняется имя макета и имя менеджера печати под ваши нужды. И все готово - выглядит так как будто в списке документов выделил несколько строк и нажал печать.
// 1 - нужен массив печатаемых объектов, как его получить, дело ваше
Мас=Новый Массив;
Для Каждого стр из строки Цикл
Мас.Добавить(Стр);
КонецЦикла;
П=Новый Структура;
П.Вставить("ИменаМакетов","ТОРГ13");
п.Вставить("ИмяМенеджераПечати","Документ.ПеремещениеЗапасов");
п.Вставить("ПараметрКоманды",Мас);
параметрыПечати=Новый Структура();
параметрыПечати.Вставить("Важность","");
параметрыПечати.Вставить("Вид","Печать");
параметрыПечати.Вставить("ВидимостьВФормах","");
параметрыПечати.Вставить("ДополнительныеПараметры",Новый Структура("ДополнитьКомплектВнешнимиПечатнымиФормами",ложь));
параметрыПечати.Вставить("ДополнитьКомплектВнешнимиПечатнымиФормами",Ложь);
параметрыПечати.Вставить("ЕстьУсловияВидимости",Ложь);
параметрыПечати.Вставить("ЗаголовокФормы","");
параметрыПечати.Вставить("Идентификатор","ТОРГ13");
параметрыПечати.Вставить("ИзменяетВыбранныеОбъекты",Ложь);
параметрыПечати.Вставить("ИмяВФорме","ПодменюПечатьОбычное_ТОРГ13");
параметрыПечати.Вставить("ИмяПараметраФормы","");
параметрыПечати.Вставить("ИмяФормы","");
параметрыПечати.Вставить("Картинка",Новый Картинка);
параметрыПечати.Вставить("МенеджерПечати","Документ.ПеремещениеЗапасов");
параметрыПечати.Вставить("МножественныйВыбор",Истина);
параметрыПечати.Вставить("Назначение","");
параметрыПечати.Вставить("Обработчик","");
параметрыПечати.Вставить("ОбъектыПечати",Мас);
параметрыПечати.Вставить("ОтображениеКнопки");
параметрыПечати.Вставить("ПараметрыФормы");
параметрыПечати.Вставить("ПереопределитьПользовательскиеНастройкиКоличества",Ложь);
параметрыПечати.Вставить("Подменю","");
параметрыПечати.Вставить("Порядок",7);
параметрыПечати.Вставить("ПорядокВажности",2);
параметрыПечати.Вставить("Представление","ТОРГ13 (Накладная на внутреннее перемещение)");
параметрыПечати.Вставить("РежимЗаписи","Записывать");
параметрыПечати.Вставить("Серверная",Ложь);
параметрыПечати.Вставить("СочетаниеКлавиш");
параметрыПечати.Вставить("СразуНаПринтер",Ложь);
параметрыПечати.Вставить("ТипПараметра",Новый ОписаниеТипов("ДокументСсылка.ПеремещениеЗапасов"));
параметрыПечати.Вставить("ТребуетсяРаботаСФайлами",Ложь);
параметрыПечати.Вставить("УсловияВидимости",Новый Массив);
параметрыПечати.Вставить("ФиксированныйКомплект",Ложь);
параметрыПечати.Вставить("ФорматСохранения");
параметрыПечати.Вставить("ФункциональныеОпции","");
п.Вставить("ПараметрыПечати",параметрыПечати);
п.Вставить("ПараметрыФункциональныхОпций",Новый Структура);
ОткрытьФорму("ОбщаяФорма.ПечатьДокументов",П);
ПоказатьМожет быть ПараметрыПечати и не надо заполнять так подробно, но все эти поля взял из отладки в момент открытия общей формы. таким образом в обработке делается кнопка с таким кодом, меняется имя макета и имя менеджера печати под ваши нужды. И все готово - выглядит так как будто в списке документов выделил несколько строк и нажал печать.
(21)
нашел более элегантное решение используя функцию БСП
УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Документ.ЗаказПокупателя","СчетНаОплатуСФаксимиле",мОбъектов,ЭтаФорма,Новый Структура);
при этом открывается печатная форма и последний реквизит струруту заполнять не обязательно
нашел более элегантное решение используя функцию БСП
УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Документ.ЗаказПокупателя","СчетНаОплатуСФаксимиле",мОбъектов,ЭтаФорма,Новый Структура);
при этом открывается печатная форма и последний реквизит струруту заполнять не обязательно
А вот подключенную обработку, можно отладить вот так (также запуск в фоне):
Единственное, после записи в справочник, нужно модифицировать обработку и сохранить, например добавить пробел и удалить. Иначе будет переполнение стека. Т.к. обработка будет сама себя вызывать в цикле.
// Интерфейс для выполнения команд обработки.
Процедура ВыполнитьКоманду(ИмяКоманды, ДополнительныеПараметры) Экспорт
// Для тестирования контекста отладки, закомментировать после завершения отладки!
//Адрес = "F:\Обработки\Внешние обработки и отчеты\Внешние обработки\Дополнительная обработка\Загрузка данных из Excel 2.4.epf";
//Если Адрес <> ЭтотОбъект.ИспользуемоеИмяФайла Тогда
// ТекущаяОбработка = ВнешниеОбработки.Создать(Адрес, БезопасныйРежим());
// ЗаполнитьЗначенияСвойств(ТекущаяОбработка, ЭтотОбъект);
// ТекущаяОбработка.ВыполнитьКоманду(ИмяКоманды, ДополнительныеПараметры);
// Возврат;
//КонецЕсли;
ПоказатьЕдинственное, после записи в справочник, нужно модифицировать обработку и сохранить, например добавить пробел и удалить. Иначе будет переполнение стека. Т.к. обработка будет сама себя вызывать в цикле.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот