Здравствуйте, подскажите пожалуйста как мне программно распечатать внешнюю печатную форму, перечитал кучу статей и форумов, но все равно не получается.
В внешней печатной форме
```1c
    Процедура Печать() Экспорт.
```

```1c
    МассивДокументов = Новый Массив;
    МассивДокументов.Добавить(Объект.Ссылка);

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

    ОбъектОбработки.СсылкаНаОбъект = Объект.Ссылка;
    ОбъектОбработки.Печать(МассивДокументов);
```

Пишет ошибку Недостаточно фактических параметров ОбъектОбработки.Печать(МассивДокументов);
---
(3) Мне кажется, можно пойти по чуть более простому пути и воспользоваться одной из служебных процедур выполнения команд дополнительных отчетов и обработок:

```1c
    ВыполняемаяКоманда = Новый Структура("Ссылка,Идентификатор");
    ВыполняемаяКоманда.Ссылка = ... // ссылка на доп. обработку
    ВыполняемаяКоманда.Идентификатор = ... // имя печатной формы

    ОбъектыНазначения = Новый Массив;
    ОбъектыНазначения.Добавить(Объект.СсылкаНаОбъект);

    ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьОткрытиеПечатнойФормы(ВыполняемаяКоманда, ЭтаФорма, ОбъектыНазначения);
```
Выполнить код соответственно нужно в клиентском контексте.
---
управляемые формы и процедура печать такая?

```1c
    Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
```
---
da
---
ну тогда это намного сложнее чем может показаться :)
для проверки использую следующий код на форме (где то на форуме подобная тема была):

```1c
    &НаСервере
    Функция ПечатьНаСервере()

    ОбъектыНазначения = Новый Массив;
    ОбъектыНазначения.Добавить (Объект.СсылкаНаОбъект);

    КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм ("М11");//<- Идентификатор указанный в СведенияОВнешнейОбработке

    ОбъектыПечати = Новый СписокЗначений;

    ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();

    ОбработкаОбъект = РеквизитФормыВЗначение ("Объект");

    ОбработкаОбъект.Печать (ОбъектыНазначения, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);

    ТабличныеДокументы = Новый СписокЗначений;
    Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл
    Если (ТипЗнч(ПечатнаяФорма.ТабличныйДокумент) = Тип("ТабличныйДокумент")) И (ПечатнаяФорма.ТабличныйДокумент.ВысотаТаблицы <> 0) Тогда
    ТабличныеДокументы.Добавить (ПечатнаяФорма.ТабличныйДокумент, ПечатнаяФорма.СинонимМакета);
    КонецЕсли;
    КонецЦикла;

    Возврат Новый Структура ("ТабличныеДокументы, ОбъектыПечати", ТабличныеДокументы, ОбъектыПечати);

    КонецФункции

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

    Результат = ПечатьНаСервере ();

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

    КонецПроцедуры
```
---
(3) Мне кажется, можно пойти по чуть более простому пути и воспользоваться одной из служебных процедур выполнения команд дополнительных отчетов и обработок:

```1c
    ВыполняемаяКоманда = Новый Структура("Ссылка,Идентификатор");
    ВыполняемаяКоманда.Ссылка = ... // ссылка на доп. обработку
    ВыполняемаяКоманда.Идентификатор = ... // имя печатной формы

    ОбъектыНазначения = Новый Массив;
    ОбъектыНазначения.Добавить(Объект.СсылкаНаОбъект);

    ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьОткрытиеПечатнойФормы(ВыполняемаяКоманда, ЭтаФорма, ОбъектыНазначения);
```
Выполнить код соответственно нужно в клиентском контексте.
---
ВыполняемаяКоманда = Новый Структура("Ссылка,Идентификатор");
ВыполняемаяКоманда.Ссылка = ... // ссылка на доп. обработку
ВыполняемаяКоманда.Идентификатор = ... // имя печатной формы

ОбъектыНазначения = Новый Массив;
ОбъектыНазначения.Добавить(Объект.СсылкаНаОбъект);

ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьОткрытиеПечатнойФормы(ВыполняемаяКоманда, ЭтаФорма, ОбъектыНазначения);

Если я не ошибаюсь, ссылку на доп. обработку можно подставить только на сервере

```1c
    Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Гарантийный талон")
```
---
это же обычный справочник, почему только на сервере?
---
на клиенте пишет ошибку
```1c
    {Документ.ЗаказКлиента.Форма.ФормаДокумента.Форма(400,33)}: Переменная не определена (Справочники)
    ВыполняемаяКоманда.Ссылка = <<?>>Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Гарантийный талон"); // ссылка на доп. обработку (Проверка: Тонкий клиент)
```

а на сервере ругается на

```1c
    {Документ.ЗаказКлиента.Форма.ФормаДокумента.Форма(368,5)}: Переменная не определена (ДополнительныеОтчетыИОбработкиКлиент)
    <<?>>ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьОткрытиеПечатнойФормы(ВыполняемаяКоманда, ЭтаФорма, ОбъектыНазначения); (Проверка: Сервер)
```
---
Оформите поиск доп. обработки по наименованию отдельной функцией, выполняемой на сервере.
---
Получить ссылку, например, по наименованию - да, действительно можно только на сервере. Но ее же можно вернуть на клиент. К тому же непонятно, что за обработка инициирует печать.
---
Передавать через хранилище значений?
---
Нет, обычную функцию:

```1c
    &НаСервереБезКонтекста
    Функция СсылкаНаДопОбработку()
    Возврат Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Гарантийный талон");
    КонецФункции
```
---
На этой строке
```1c
    ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьОткрытиеПечатнойФормы(ВыполняемаяКоманда, ЭтаФорма, ОбъектыНазначения);
```
 выдает ошибку

```1c
    {ОбщийМодуль.УправлениеПечатью.Модуль(1214)}: В обработчике печати не был сформирован табличный документ для: Гарантийный талон
    ВызватьИсключение(ТекстСообщенияОбОшибке);
```
---
Предположу, что Вы не верно указали идентификатор команды. Загляните в модуль объекта внешней печатной формы. Там Вы в функции "СведенияОВнешнейОбработке" сможете увидеть идентификаторы команд, которые и нужно указывать.
---
Спасибо огромное, но это немного не то, печатная форма открывается, а мне надо, чтоб она сразу на печать выводилась.
---
в печатной форме дописал
```1c
    ТабДокумент.Напечатать();
```
 получается после открытия сразу печатается.
---
интересно, надо запомнить
может пригодиться
---
нужно немного допилить