Как вывести сразу(!) на принтер ВПФ программно. УТ 11.4

1. Snus71 233 01.12.20 10:24 Сейчас в теме +0.03 $m
Код, который выводит на экран. Как сразу на принтер?
Накл - массив реализаций
&НаКлиенте
Процедура Печать1()
       Накл = ВернутьНакладные(СпПар, ДатаНачала, ДатаКонца); // для всех
       ВПФ = НайтиВПФ("Маршрутный лист");
    Если ЗначениеЗаполнено(ВПФ) Тогда
    ОбъектыНазначения = Новый Массив;
        ОбъектыНазначения.Добавить(Накл);
        ПараметрыОткрытия = Новый Структура("ИсточникДанных, ПараметрыИсточника");
        ПараметрыОткрытия.ИсточникДанных = ВПФ;
        ПараметрыОткрытия.ПараметрыИсточника = Новый Структура("ИдентификаторКоманды, ОбъектыНазначения");
        ПараметрыОткрытия.ПараметрыИсточника.ИдентификаторКоманды = "МаршрутныйЛист";
        ПараметрыОткрытия.ПараметрыИсточника.ОбъектыНазначения = ОбъектыНазначения;
        ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия);        
       КонецЕсли;            
КонецПроцедуры

&НаСервере
Функция НайтиВПФ(ЧтоНайти)

   Возврат Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(ЧтоНайти); 
    
КонецФункции 
Показать
Вознаграждение за ответ
Показать полностью
Найденные решения
14. user633533_encantado 11 01.12.20 14:28 Сейчас в теме
(11) Сделай для внешней обработки процедуру формирования табличного документа экспортной.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
36. user1504483 22.07.21 15:06 Сейчас в теме
(1) Товарищи подскажите, как при выводе ВПФ, добавить значение (дата отгрузки) из другого документа? вроде как через дополнительные параметры можно, но не могу врубиться пока

&НаКлиенте
Процедура Дополнение_МППисьмоКлиентуПосле(Команда) Экспорт

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

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



КонецПроцедуры
2. user633533_encantado 11 01.12.20 10:39 Сейчас в теме
У меня дежавю ? Вы же уже завели такую тему ?
3. Snus71 233 01.12.20 10:43 Сейчас в теме
(2) нет, там про обычные печатные формы и там проблема решена. Тут же история про внешние
4. oleg-x 26 01.12.20 11:05 Сейчас в теме
(1) И в чем затруднения сразу отправить на принтер? Правда на какой принтер, нужно задать имя или отправится по умолчанию.
5. Snus71 233 01.12.20 11:37 Сейчас в теме
(4) по умолчанию. Затруднение в том, что вызвается общая форма, в которой нет параметра печати сразу на принтер
12. user633533_encantado 11 01.12.20 13:32 Сейчас в теме
(5) Так вообще не надо форму вызвать.
13. Snus71 233 01.12.20 13:48 Сейчас в теме
6. oleg-x 26 01.12.20 12:04 Сейчас в теме
(5) А зачем вообще её вызывать? Если ВПФ формирует табличный документ, то пусть сразу и отправляет на принтер или если нельзя в ней такое делать, то уже возвращенный табличный документ отправить на принтер, а не открывать общую форму.

Ну либо смотрите в сторону:
	// Распечатаем
	РаспечататьТабличныеДокументы(ПечатныеФормы.ТабличныеДокументы, ПечатныеФормы.ОбъектыПечати);
7. Snus71 233 01.12.20 12:18 Сейчас в теме
(6)
Если ВПФ формирует табличный документ, то пусть сразу и отправляет на принтер или если нельзя в ней такое делать


ВПФ используется и в обычном режиме тоже.

РаспечататьТабличныеДокументы(ПечатныеФормы.ТабличныеДокументы
Тут параметром уже готовый список ТД? Где б его взять
8. oleg-x 26 01.12.20 12:34 Сейчас в теме
(7) А вы смотрели данную процедуру? Или только по названию определили, что это готовый ТД?
9. oleg-x 26 01.12.20 12:43 Сейчас в теме
Может и не то, в БСП наверняка есть такая процедура (а может и нет). Я бы просто нашел программно ВПФ, вызвал бы процедуру формирования ТД и уже его отправил бы на печать.
С БСП, либо надо знать, либо это должно гуглиться просто.
10. oleg-x 26 01.12.20 12:49 Сейчас в теме
Вот такая процедура есть рядом
ВыполнитьКомандуПечатиНаПринтер(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати = Неопределено) Экспорт
11. Snus71 233 01.12.20 13:12 Сейчас в теме
(10) эту процедуру я использую, когда печатаю внутренние формы, просто вряд ли получится использовать внешнюю форму как менеджер печати, хотя сейчас попробую, конечно
14. user633533_encantado 11 01.12.20 14:28 Сейчас в теме
(11) Сделай для внешней обработки процедуру формирования табличного документа экспортной.
16. Snus71 233 01.12.20 14:38 Сейчас в теме
(14) она экспортная. И что?

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

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

КонецПроцедуры
18. Snus71 233 01.12.20 14:41 Сейчас в теме
(14)
Функция СформироватьПечатнуюФормуМЛ(МассивОбъектов, ОбъектыПечати, ПараметрыПечати) Экспорт


Это вот функция, которая как раз вернет ТД
И что такое объектыПечати и ПараметрыПечати?
26. RocKeR_13 1321 01.12.20 15:54 Сейчас в теме
(18) на ИТС доступа нет?

ОбъектыПечати

Список значений, в котором обработчик печати устанавливает соответствие между объектами и именами областей печати табличного документа: значение – Объект, представление – имя области, в которой был выведен объект

ПараметрыПечати

Дополнительные параметры печати, переданные из модуля команды

В большинстве случаев ОбъектыПечати - это пустой список значений, а ПараметрыПечати - пустая структура
15. Snus71 233 01.12.20 14:36 Сейчас в теме
(10) нет, не канает, первый параметр никак не передать по значению, потому что это просто ссылка на элемент справочника у меня.
17. oleg-x 26 01.12.20 14:41 Сейчас в теме
(16) И в чем же проблема сразу к ней обратится? А не пользоваться механизмом БСП?
19. Snus71 233 01.12.20 14:43 Сейчас в теме
(17) ни в чем, кроме того, что возвращает ТД не она, а
Функция СформироватьПечатнуюФормуМЛ(МассивОбъектов, ОбъектыПечати, ПараметрыПечати) Экспорт

Которая тоже экспортная, но что за параметры, которые в неё передаются, кроме массива объектов - без понятия
20. oleg-x 26 01.12.20 14:46 Сейчас в теме
(19) Это стандартные параметры, которые передает БСП, для возможности печати (если разработчик предусмотрел), возможно кроме массиваОбъектов там в принципе ничего не используется и передать можно неопределено. Можно по коду посмотреть использование этих параметров.
21. Snus71 233 01.12.20 15:12 Сейчас в теме
(20) вроде близок к победе, но
ДвоичныеДанные = ВПФ.ХранилищеОбработки.Получить();
	ИмяФайла = ПолучитьИмяВременногоФайла("epf");
	ДвоичныеДанные.Записать(ИмяФайла);
	ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяФайла);
	ТД = ВнешняяОбработка.СформироватьПечатнуюФормуМЛ(Накл, Неопределено, Неопределено);
	ТД.Показать();


при попытке создать валиться на безопасном режиме. В новом релизе платформы нужно как-то по особому отключать безопасный режим у внешних обработок? По сути-то я тут экземпляр создаю
27. RocKeR_13 1321 01.12.20 16:07 Сейчас в теме
(21)

ВнешниеОбработкиМенеджер (ExternalDataProcessorsManager)
Подключить (Connect)
Синтаксис:
Подключить(<Путь>, <Имя>, <БезопасныйРежим>, <ЗащитаОтОпасныхДействий>)
Параметры:
<Путь> (обязательный)
Тип: Строка.
Ссылка на реквизит объекта конфигурации, который содержит данные внешней обработки. Ссылка может быть получена методом ПолучитьНавигационнуюСсылку.
<Имя> (необязательный)
Тип: Строка.
Имя внешней обработки, с которым она будет зарегистрирована в системе.
Наличие одинаковых имен в процессе работы сеанса не допускается. Если имя не указано, будет использовано имя, содержащееся в самой обработке.
<БезопасныйРежим> (необязательный)
Тип: Булево, Строка.
Признак подключения внешней обработки в безопасном режиме. Если параметр не указан, подключение будет осуществлено в безопасном режиме.
Если указана строка, то внешняя обработка будет исполняться в безопасном режиме под управлением профиля безопасности с этим именем. Профиль безопасности должен иметь SafeModeProfile=Истина.
Значение по умолчанию: Истина.
<ЗащитаОтОпасныхДействий> (необязательный)
Тип: ОписаниеЗащитыОтОпасныхДействий.
Структура, описывающая параметры защиты от опасных действий для подключаемого модуля.
Возвращаемое значение:
Тип: Строка.
Описание:
Выполняет подключение внешней обработки по указанному пути.
Возвращает имя подключенной внешней обработки.
Показать

А дальше уже
ВнешняяОбработка = ВнешниеОбработки.Создать(ЗарегистрированноеИмя);
28. Snus71 233 01.12.20 16:30 Сейчас в теме
(27) нет, валится на ДвоичныеДанные.Записать(ИмяФайла);
23. Snus71 233 01.12.20 15:39 Сейчас в теме
(22) создание обработки не причем. Валится на
ДвоичныеДанные.Записать(ИмяФайла);
24. Snus71 233 01.12.20 15:46 Сейчас в теме
(23) Защита от опасных действий у пользователя снята, ессно. УстановитьБезопасныйРежим не помогает, потому что говорит что и не был включен безопасный режим. Тем не менее при попытке записи - болт
25. oleg-x 26 01.12.20 15:48 Сейчас в теме
(24) А какое полное имя файла при записи?
29. Snus71 233 01.12.20 16:38 Сейчас в теме
(25) C:\Users\user1\AppData\Local\Temp\v8_7DAE_1b.epf

работаю на локальной машине
обычный темп-файл. Права у меня туда есть, конечно
31. Snus71 233 01.12.20 16:58 Сейчас в теме
(25) безопасный режим расширения был !!!
30. Snus71 233 01.12.20 16:45 Сейчас в теме
похоже вопрос про безопасный режим надо выделять в отдельную ветку. Решения в и-нете не нашел. Все талдонят про внешние обработки
32. oleg-x 26 01.12.20 17:06 Сейчас в теме +0.8 $m
(31) Ну теперь то все получилось? :-)
33. Snus71 233 01.12.20 17:20 Сейчас в теме
34. Snus71 233 01.12.20 17:22 Сейчас в теме
финальный код

&НаСервере
Функция НапечататьВПФ(ВПФ, Накл)
	ДвоичныеДанные = ВПФ.ХранилищеОбработки.Получить();
	ИмяФайла = ПолучитьИмяВременногоФайла("epf");
	ДвоичныеДанные.Записать(ИмяФайла);
	ВН = ВнешниеОбработки.Создать(ИмяФайла, Ложь);
	ТД = ВН.СформироватьПечатнуюФормуМЛ(Накл, Новый СписокЗначений, Новый Структура);
	Возврат ТД;


накл - массив накладных
ВПФ - ссылка на справочник допобработок
35. oleg-x 26 01.12.20 17:27 Сейчас в теме
(34) Получилось компактнее, чем было изначально :-)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот