Имя: Пароль:
1C
1С v8
ут 11.5 вызов печати впф кодом
0 saradip
 
31.07.23
13:28
Добрый день.
Как заставить механизм БСП печатать ВПФ?
Используя УправлениеПечатьюКлиент.ВыполнитьКомандуПечати, либо ДополнительныеОтчетыИОбработкиКлиент, либо что-то еще (хз что)

Есть:
Обработка формирует массив документов, далее вызывает УправлениеПечатьюКлиент.ВыполнитьКомандуПечати и выводит стандартную форму счета на оплату.
Нужно:
Я добавил модернизированную впф счета на оплату через доп. обработки и отчеты, теперь хочу, печатать впф в том же модуле, из того же массива.
Как сейчас, в новых конфигурациях решить данную задачу?
1 saradip
 
31.07.23
14:24
Ладно, хотя бы укажите на актуальность данного решения:

1. МассивСчетов найден заблаговременно
2. "Идентификатор" известен изначально из данных ВПФ
3. "ИмяОбъекта" известно изначально из данных ВПФ

Код исполняется в другой внешней обработке

&НаКлиенте
Процедура Сформировать(Команда)

    ТабДок = СформироватьВнешнююПечатнуюФорму(МассивСчетов);

    КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм("Идентификатор");
    КоллекцияПечатныхФорм[0].ТабличныйДокумент = ТабДок;                                
    
    УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм,, ЭтотОбъект);

КонецПроцедуры

&НаСервереБезКонтекста
Функция СформироватьВнешнююПечатнуюФорму(МассивДокументов)
    
    КоллекцияПечатныхФорм = Новый ТаблицаЗначений;
    
    ПараметрыИсточника = Новый Структура;                                                    
    ПараметрыИсточника.Вставить("ИдентификаторКоманды", "Идентификатор"); //ИдентификаторКоманды
    ПараметрыИсточника.Вставить("ОбъектыНазначения", МассивДокументов);
    
    ОбъектыПечати = Новый СписокЗначений;
    ОбъектыПечати.ЗагрузитьЗначения(МассивДокументов);                      
    
        ВнешняяОбработка = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоРеквизиту("ИмяОбъекта", "ИмяОбъекта"); //ПоискОбработки
    
    ДополнительныеОтчетыИОбработки.ПечатьПоВнешнемуИсточнику(ВнешняяОбработка, ПараметрыИсточника, КоллекцияПечатныхФорм, ОбъектыПечати, Неопределено);
                                                                
    Если КоллекцияПечатныхФорм.Количество() > 0 Тогда
        ТабДок = КоллекцияПечатныхФорм[0].ТабличныйДокумент;
    Иначе                                                  
        ТабДок = Новый ТабличныйДокумент;
    КонецЕсли;                          
    
    Возврат ТабДок;    
    
КонецФункции
2 saradip
 
31.07.23
16:43
Упрощенный вариант

&НаКлиенте
Процедура ПечатьВПФ(МассивСчетов)
    ВПФ = НайтиВПФ();
    Если ВПФ.Пустая() Тогда
        Возврат;
    КонецЕсли;

    ПараметрыОткрытия = Новый Структура("ИсточникДанных, ПараметрыИсточника");
    ПараметрыОткрытия.ИсточникДанных = ВПФ;
    ПараметрыОткрытия.ПараметрыИсточника = Новый Структура("ИдентификаторКоманды, ОбъектыНазначения");
    ПараметрыОткрытия.ПараметрыИсточника.ИдентификаторКоманды = "Идентификатор";
    ПараметрыОткрытия.ПараметрыИсточника.ОбъектыНазначения = МассивСчетов;
    ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия);    
КонецПроцедуры

&НаСервереБезКонтекста
Функция НайтиВПФ()
    Возврат Справочники.ДополнительныеОтчетыИОбработки.НайтиПоРеквизиту("ИмяОбъекта", "ИмяОбъекта");
КонецФункции