Внешняя печ.форма в УФ (типовая бухия)

  1. 3 мес. назад

    Господа. У меня на 2.0 одной базе бух была печ.форма, которая при вызове сперва модально открывала окошко для заполнения параметров для печати. Можно что-нить подобное сделать в типовом механизме печати нынешних типовых же конфигураций?
    Т.е. ещё раз: я жмянькаю на кнопку печати, открывается диалог ввода некоторых данных, я его заполняю, жму кнопку, форма закрывается, печ.форма выводится.

    Ответы: (1)
  2. (0) Можно.
    Нужно сделать внешнюю обработку с типом команды ВызовКлиентскогоМетода

    Ответы: (3) (4) (5)
  3. Или с типом команды ОткрытиеФормы

    Ответы: (4) (5)
  4. (1) В справочнике внешних обработок?

  5. (1) (2) это как?

    Ответы: (5) (8)
  6. Дуб (1) (2) это как?

    Лббую внешнюю пф сохрани и там в модуле будет оьраьотка печатт

  7. Ее подкорректируй и норм)

  8. Так ведь из модуля объекта интерактивные операции недоступны...

    Ответы: (12)
  9. 16.06.2022 10:35:40 отредактировано Фёдор14

    (4)
    https://infostart.ru/1c/articles/825702/

    https://infostart.ru/1c/articles/558559/

  10. Ничего не понял. Обработку подключил, в документах ничего не добавилось.

  11. шура - молодец...

  12. Не, видимо - что-то не указано.

  13. Проверь, что в модуле формы документа есть процедуры. Если это печатная форма, то в модуле менеджера должна быть процедура. Какие именно смотри в типовых. Только (7)

  14. Итить... А как-нить по-простому тут нельзя? Чтобы как в 2.0 было реализовано?

    Ответы: (14)
  15. (13) Это прогресс. Тут по простому не получится. Я помню дорабатывал когда то для УФ справочник внешних обработок, чтобы можно было параметры там задавать, как в старом добром УПП. Много возни, а выхлопа чуть.
    Вызов клиентского метода чем не устраивает?

    Ответы: (15)
  16. (14) как именно?

  17. Короче, если кому надо: общий смысл в том, чтобы перенаправить вызов Печати из модуля объекта в модуль основной формы.
    Для этого в Использование пишется ВызовКлиентскогоМетода.
    Вот мой пример:

    Функция СведенияОВнешнейОбработке() Экспорт
    	
    	МассивИсполняемыхДокументов = Новый Массив;
        МассивИсполняемыхДокументов.Добавить("Документ.РеализацияТоваровУслуг");
        
        ТзКоманды = Новый ТаблицаЗначений;
        ТзКоманды.Колонки.Добавить("Представление");
        ТзКоманды.Колонки.Добавить("Идентификатор");
        ТзКоманды.Колонки.Добавить("Использование");
        ТзКоманды.Колонки.Добавить("ПоказыватьОповещения");
        ТзКоманды.Колонки.Добавить("Модификатор");
        
        НСтрКоманд = ТзКоманды.Добавить();
        НСтрКоманд.Представление = "Печать УПД (Счетчики)";
        НСтрКоманд.Идентификатор = "УПДСчетчики";
        НСтрКоманд.Использование ="ВызовКлиентскогоМетода";
        НСтрКоманд.ПоказыватьОповещения = Ложь;
        НСтрКоманд.Модификатор = "ПечтатьMXL";
        
        ДанныеОбработки = новый Структура;
        ДанныеОбработки.Вставить("Наименование", "Печать УПД (Счетчики)");
        ДанныеОбработки.Вставить("Информация", "Печатная форма с заполнением параметров");
        ДанныеОбработки.Вставить("Назначение", МассивИсполняемыхДокументов);
        ДанныеОбработки.Вставить("Вид", "ПечатнаяФорма");
        ДанныеОбработки.Вставить("Версия", "1.0");
        ДанныеОбработки.Вставить("БезопасныйРежим", Ложь);
        
        ДанныеОбработки.Вставить("Команды", ТзКоманды);
        
        Возврат ДанныеОбработки;
    
    КонецФункции
    

    А в модуле формы, соответственно, пишется

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

    Т.е. в моём случае это

    &НаКлиенте
    Процедура Печать(ВыполняемаяКомандаИдентификатор, ОбъектыНазначения) Экспорт
    	
    	Если ОбъектыНазначения.Количество() > 0 Тогда
    		ТекДок = ОбъектыНазначения[0];
    		пФорма = ПолучитьФорму("ВнешняяОбработка.ПечатьУПДСчетчики.Форма.ФормаВыбораПараметров");
    		пФорма.СсылкаНаОбъект = ТекДок;
    		пФорма.Открыть();
    	КонецЕсли;
    	
    КонецПроцедуры
    

    Т.е. всё несколько проще. Хотя и через задницу.

  18. Теперь у меня другой вопрос: а как можно по-человечески вызвать (программно) штатную печать выбранной внешней печатной формы?
    Я пока не смог докопать. Сделал просто перехват сформированного макета с передачей на клиента и дальше - "Показать()". Но хотелось бы совсем не этого.

    Ответы: (18)
  19. 22.06.2022 11:48:42 отредактировано КитайскийМуй

    (17) Что-то типа? :

    ИмяФайлаОбработки = "нужное имя";
    ВнешняяОбработка = Справочники.ВнешниеОбработки.НайтиПоНаименованию(ИмяФайлаОбработки);
    Если ВнешняяОбработка.Пустая() Тогда
    Сообщить("Не найдена обработка нужное имя");
    Возврат;
    КонецЕсли;

    ИмяФайла = ПолучитьИмяВременногоФайла("tmp");
    ОбъектВнешнейФормы = ВнешняяОбработка.ПолучитьОбъект();
    ДвоичныеДанные = ОбъектВнешнейФормы.ХранилищеВнешнейОбработки.Получить();
    ДвоичныеДанные.Записать(ИмяФайла);

    Попытка
    Обработка = ВнешниеОбработки.Создать(ИмяФайла);
    Исключение
    Сообщить("Ошибка исполнения внешней обработки."+Символы.ПС+ОписаниеОшибки(), СтатусСообщения.Важное);
    Возврат;
    КонецПопытки;

    Форма = Обработка.ПолучитьФорму();
    ...
    тут можно прописать всякие действия...
    ...
    Форма.Открыть();

    Ответы: (19)
  20. (18) эээ... Там же вызов через встроенный механизм печати. Это же печ.форма, со всей байдой.

или зарегистрируйтесь чтобы ответить!