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

Проблема

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

Спасибо
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn