Имя: Пароль:
1C
1С v8
Обработка печати на клиенте ( УправлениеПечатьюКлиент.ВыполнитьКомандуПечати )
0 lexushka
 
04.12.17
15:54
Добрый день
Прошу прощения за название темы - очень хотелось ключевое слово УправлениеПечатьюКлиент.ВыполнитьКомандуПечати в ней поставить

Проблема

Есть внешняя печатная форма для УТ11 для печати Транспортной накладной
Там при вызове печати таких документов проверяется, а сформированы ли транспортные накладные, задаются вопросы и формируются…

Весь этот функционал не хотелось потерять

В итоге ВПФ вызывается как

ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();

НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = 'Товарно-транспортная накладная (1-Т)'");
НоваяКоманда.Идентификатор = "ТТН";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();

Ну в основной форме обработки

&НаКлиенте
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт

Все красиво вроде бы, но

Изначально это была обычная печатнаф форма с вызовом серверного метода
То есть:

Функция Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыПечати) Экспорт
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ТТН") Тогда
  УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ТТН",
  НСтр("ru='Товарно-транспортная накладная (1-Т)'"),
  СформироватьПечатнуюФормуТТН(МассивОбъектов, ОбъектыПечати, ПараметрыПечати));
  ФормированиеПечатныхФорм.ЗаполнитьПараметрыОтправки(ПараметрыПечати.ПараметрыОтправки,
                                                      МассивОбъектов, КоллекцияПечатныхФорм);
КонецЕсли;

Соответственно, понасоздавав отсутствующие транспортные накладные я попытался напечатать их, передав вызов как

РеквизитФормыВЗначение("Объект").Печать(МассивОбъектов, УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(ИдентификаторКоманды),ОбъектыПечати, ПараметрыВывода);

Код отрабатывает и даже Табличный докуемнт созадет, но не показывает :/    

Попытка изучить документацию по БСП вывела меня на процедуру
УправлениеПечатьюКлиент.ВыполнитьКомандуПечати

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


    
    // Откроем форму печати документов.
    ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия, ВладелецФормы, КлючУникальности);
    
КонецПроцедуры

Он даже работает, но есть у меня чувство, что должна быть возможность сделать необходимое без собственного ведосипеда…

Не посоветуете?

Спасибо