Имя: Пароль:
1C
1С v8
Внешняя печатная форма (УФ): ПараметрыПечати
0 Alamo-10
 
19.12.16
14:27
Всем добрый день! Прошу помочь с созданием внешней печатной формы.
Конфигурация Розница 2.1.5, есть типовой документ РасходныйКассовыйОрдер. У документа в модуле менеджера определены 3 печатных формы. Нам требуется по каждой из них сделать внешнюю печатную форму.

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

По двум макетам проблем не возникло, но при попытке создать ВПФ для макета ПечатьПрепроводительнаяВедомостьНакладнаяКСумке (второй в списке) возникла сложность. Дело в том, что там помимо прочих передается параметром ПараметрыПечати - это структура, которая содержит некоторые данные формы документа. Эти данные как раз и требуются при печати, поскольку они не сохраняются в объекте, а присутствуют только на форме.

Но по стандартам БСП, насколько я понимаю, если я делаю ВПФ с вариантом использования ВызовСерверногоМетода, то моя процедура печати должна иметь такой вид:

Процедура Печать(МассивОбъектов,
                КоллекцияПечатныхФорм,
                ОбъектыПечати,
                ПараметрыВывода) Экспорт

Соответственно, доступа к ПараметрыПечати я не имею, и данные вытащить не могу. Подскажите, как грамотно нужно выстроить структуру моей внешней обработки, чтобы такая печать стала возможной.
Спасибо!
1 aleks_default
 
19.12.16
17:10
А что там передается в ПараметрыПечати? Может проще их определить в твоей процедуре?
2 Вафель
 
19.12.16
17:26
делай печать через клиентский вызов
3 Alamo-10
 
19.12.16
18:00
(1) Там передается ДанныеФормыСтруктура. На форме документа присутствует ТаблицаЗначений, в которую пользователь вводит количество банкнот различного номинала, после чего эта таблица как раз и выводится в печатную форму. Проблема в том, что таблица эта не хранится в объекте в табличной части, а является реквизитом формы.
4 Alamo-10
 
19.12.16
18:01
(2) Я уже интуитивно понимаю, что мне нужен либо клиентский вызов, либо открытие формы (но реально открытие формы мне не требуется), но все равно не понимаю, как в форму моей внешней обработки попадут данные с формы документа? Они передаются через какой-либо параметр, чтобы можно было к ним обратиться в форме моей внешней обработки?
5 Вафель
 
19.12.16
18:03
а как они в обычную форму передаются?
6 Alamo-10
 
19.12.16
18:11
(5) У типового документа есть команда, в модуле этой команды написано это

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

Вот в самом конце последним параметром как раз передается структура со всеми нужными мне данными. По стандартам БСП эта процедура ожидает только 4 параметра:

ВнешняяОбработкаОбъект.Печать(
        ПараметрыИсточника.ОбъектыНазначения,
        КоллекцияПечатныхФорм,
        ОбъектыПечати,
        ПараметрыВывода);
Независимо от того, куда вы едете — это в гору и против ветра!