Код, который выводит на экран. Как сразу на принтер?
Накл - массив реализаций

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

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

    Возврат Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(ЧтоНайти);

    КонецФункции
```
---
Сделай для внешней обработки процедуру формирования табличного документа экспортной.
---
Товарищи подскажите, как при выводе ВПФ, добавить значение (дата отгрузки) из другого документа? вроде как через дополнительные параметры можно, но не могу врубиться пока

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

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

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

   КонецПроцедуры
---
У меня дежавю ? Вы же уже завели такую тему ?
---
нет, там про обычные печатные формы и там проблема решена. Тут же история про внешние
---
И в чем затруднения сразу отправить на принтер? Правда на какой принтер, нужно задать имя или отправится по умолчанию.
---
по умолчанию. Затруднение в том, что вызвается общая форма, в которой нет параметра печати сразу на принтер
---
Так вообще не надо форму вызвать.
---
дак её в ВПФ и нет!
---
А зачем вообще её вызывать? Если ВПФ формирует табличный документ, то пусть сразу и отправляет на принтер или если нельзя в ней такое делать, то уже возвращенный табличный документ отправить на принтер, а не открывать общую форму.

Ну либо смотрите в сторону:

```1c
    // Распечатаем
    РаспечататьТабличныеДокументы(ПечатныеФормы.ТабличныеДокументы, ПечатныеФормы.ОбъектыПечати);
```
---
Если ВПФ формирует табличный документ, то пусть сразу и отправляет на принтер или если нельзя в ней такое делать

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

РаспечататьТабличныеДокументы(ПечатныеФормы.ТабличныеДокументы
Тут параметром уже готовый список ТД? Где б его взять
---
А вы смотрели данную процедуру? Или только по названию определили, что это готовый ТД?
---
Может и не то, в БСП наверняка есть такая процедура (а может и нет). Я бы просто нашел программно ВПФ, вызвал бы процедуру формирования ТД и уже его отправил бы на печать.
С БСП, либо надо знать, либо это должно гуглиться просто.
---
Вот такая процедура есть рядом

```1c
    ВыполнитьКомандуПечатиНаПринтер(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати = Неопределено) Экспорт
```
---
эту процедуру я использую, когда печатаю внутренние формы, просто вряд ли получится использовать внешнюю форму как менеджер печати, хотя сейчас попробую, конечно
---
Сделай для внешней обработки процедуру формирования табличного документа экспортной.
---
она экспортная. И что?

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

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

КонецПроцедуры
---
```1c
    Функция СформироватьПечатнуюФормуМЛ(МассивОбъектов, ОбъектыПечати, ПараметрыПечати) Экспорт
```

Это вот функция, которая как раз вернет ТД
И что такое объектыПечати и ПараметрыПечати?
---
на ИТС доступа нет?

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

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

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

Дополнительные параметры печати, переданные из модуля команды
В большинстве случаев ОбъектыПечати - это пустой список значений, а ПараметрыПечати - пустая структура
---
нет, не канает, первый параметр никак не передать по значению, потому что это просто ссылка на элемент справочника у меня.
---
И в чем же проблема сразу к ней обратится? А не пользоваться механизмом БСП?
---
ни в чем, кроме того, что возвращает ТД не она, а
Функция СформироватьПечатнуюФормуМЛ(МассивОбъектов, ОбъектыПечати, ПараметрыПечати) Экспорт

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

при попытке создать валиться на безопасном режиме. В новом релизе платформы нужно как-то по особому отключать безопасный режим у внешних обработок? По сути-то я тут экземпляр создаю
---
А дальше уже
ВнешняяОбработка = ВнешниеОбработки.Создать(ЗарегистрированноеИмя);
---
нет, валится на ДвоичныеДанные.Записать(ИмяФайла);
---
https://1centerprise8.blogspot.com/2016/10/otkrytie-vneshnih-obrabotok.html
---
создание обработки не причем. Валится на

```1c
    ДвоичныеДанные.Записать(ИмяФайла);
```
---
Защита от опасных действий у пользователя снята, ессно. УстановитьБезопасныйРежим не помогает, потому что говорит что и не был включен безопасный режим. Тем не менее при попытке записи - болт
---
А какое полное имя файла при записи?
---
C:\Users\user1\AppData\Local\Temp\v8_7DAE_1b.epf

работаю на локальной машине
обычный темп-файл. Права у меня туда есть, конечно
---
безопасный режим расширения был !!!
---
похоже вопрос про безопасный режим надо выделять в отдельную ветку. Решения в и-нете не нашел. Все талдонят про внешние обработки
---
Ну теперь то все получилось? :-)
---
да!!!!!
спасибо всем
---
финальный код

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

накл - массив накладных
ВПФ - ссылка на справочник допобработок
---
Получилось компактнее, чем было изначально :-)