Делаю внешнюю печатную форму для ЗУП 3.1.(управляемое приложение). Настройку и регистрацию печатной формы сделал на модуле объекта, всё работает исправно. Пришла задача заполнять реквизиты печатной формы до его открытия, соответственно создал форму и подтянул к нему реквизиты.
Пробовал через вызов ВызовКлиентскогоМетода, но там далее недоступен сам документ из которого буду вызывать эту внешнюю печатную форму. То есть из модуля объекта не могу открыть форму, а если переключить работу на клиент то там не вижу сам документ. Как правильно построить архитектуру.
---
https://www.youtube.com/watch?v=OdY5JdHMilU
http://1clenta.ru/pattern/206

Вот эти статьи мне помогли!
---
Возможно, сделать не внешнюю печатную форму, а внешнюю команду, которая будет открывать внешнюю обработку и там уже сделать кнопку печать.
---
У меня сохранился шаблон, возможно он Вам поможет:

```1c
    //////////////////////////////////////////////////////////
    // МОДУЛЬ ОБРАБОТКИ //
    //////////////////////////////////////////////////////////

    #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

    #Область ПрограммныйИнтерфейс

    Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.3.1.73");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
    ПараметрыРегистрации.Версия = "1.0";

    ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг");

    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = НСтр("ru = 'Демо: накладная (внешняя печатная форма с диалогом)'");
    НоваяКоманда.Идентификатор = "ДемоНакладнаяСДиалогом";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
    НоваяКоманда.Модификатор = "ПечатьMXL";

    Возврат ПараметрыРегистрации;

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

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

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

    КонецПроцедуры

    #КонецОбласти

    #Область СлужебныеПроцедурыИФункции

    Функция СформироватьДемоНакладная(МассивОбъектов, ОбъектыПечати)

    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.КлючПараметровПечати = "ПараметрыПечати_РеализацияТоваровУслуг_ДемоНакладная";

    Макет = ПолучитьМакет("ПФ_MXL_ДемоНакладная");

    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");

    Запрос = Новый Запрос();
    Запрос.Текст =
    "ВЫБРАТЬ
    | ДанныеШапки.Ссылка КАК Ссылка,
    | .....................
    |ИЗ
    | Документ.РеализацияТоваровУслуг КАК ДанныеШапки
    |ГДЕ
    | ДанныеШапки.Ссылка В(&МассивОбъектов)
    |
    |УПОРЯДОЧИТЬ ПО
    | Ссылка
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | ДанныеТаблицы.Ссылка КАК Ссылка,
    | ДанныеТаблицы.НомерСтроки КАК НомерСтроки,
    | .....................
    |ИЗ
    | Документ.РеализацияТоваровУслуг.Товары КАК ДанныеТаблицы
    |ГДЕ
    | ДанныеТаблицы.Ссылка В(&МассивОбъектов)
    |ИТОГИ ПО
    | Ссылка";

    Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);

    Запрос.УстановитьПараметр("Параметр1", ЭтотОбъект.ПолеВвода1);
    Запрос.УстановитьПараметр("Параметр2", ЭтотОбъект.ПолеВвода2);

    РезультатыЗапроса = Запрос.ВыполнитьПакет();
    ДанныеПечати = РезультатыЗапроса[0].Выбрать();
    ВыборкаПоДокументам = РезультатыЗапроса[1].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    ПервыйДокумент = Истина;

    Пока ДанныеПечати.Следующий() Цикл

    Если Не ВыборкаПоДокументам.НайтиСледующий(ДанныеПечати.Ссылка, "Ссылка") Тогда
    Продолжить;
    КонецЕсли;

    Если Не ПервыйДокумент Тогда
    ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    ПервыйДокумент = Ложь;

    НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;

    // Заголовок.

    ОбластьЗаголовок.Параметры.Заполнить(ДанныеПечати);
    ТабличныйДокумент.Вывести(ОбластьЗаголовок);

    // Шапка таблицы.

    ТабличныйДокумент.Вывести(ОбластьШапка);

    // Строки таблицы

    ДетальныеЗаписи = ВыборкаПоДокументам.Выбрать();

    Пока ДетальныеЗаписи.Следующий() Цикл

    ОбластьСтрока.Параметры.Заполнить(ДетальныеЗаписи);

    СтрокаСПодвалом = Новый Массив;
    СтрокаСПодвалом.Добавить(ОбластьСтрока);
    СтрокаСПодвалом.Добавить(ОбластьПодвал);

    Если Не ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, СтрокаСПодвалом) Тогда
    ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    ТабличныйДокумент.Вывести(ОбластьШапка);
    КонецЕсли;

    ТабличныйДокумент.Вывести(ОбластьСтрока);

    КонецЦикла;

    // Подвал.

    ОбластьПодвал.Параметры.Заполнить(ВыборкаПоДокументам);
    ТабличныйДокумент.Вывести(ОбластьПодвал);

    УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент,
    НомерСтрокиНачало, ОбъектыПечати, ДанныеПечати.Ссылка);
    КонецЦикла;

    Возврат ТабличныйДокумент;

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

    #КонецОбласти

    #КонецЕсли

    //////////////////////////////////////////////////////////
    // МОДУЛЬ ФОРМЫ //
    //////////////////////////////////////////////////////////

    #Область ОбработчикиСобытийФормы

    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    ИдентификаторКоманды = Параметры.ИдентификаторКоманды;
    ОбъектыНазначения.ЗагрузитьЗначения(Параметры.ОбъектыНазначения);

    КонецПроцедуры

    #КонецОбласти

    #Область ОбработчикиКомандФормы

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

    КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм(ИдентификаторКоманды);
    ОбъектыПечати = Новый СписокЗначений;

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

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

    Закрыть();

    КонецПроцедуры

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

    Закрыть();

    КонецПроцедуры

    #КонецОбласти

    #Область СлужебныеПроцедурыИФункции

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

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

    // Непосредственная печать.
    ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
    ОбработкаОбъект.Печать(
    ОбъектыНазначения.ВыгрузитьЗначения(),
    ПечатныеФормы,
    ОбъектыПечати,
    Новый Структура);

    // Обратное преобразование таблицы значений в массив структур.
    Для Индекс = 0 По КоллекцияПечатныхФорм.ВГраница() Цикл
    ЗаполнитьЗначенияСвойств(КоллекцияПечатныхФорм[Индекс], ПечатныеФормы[Индекс])
    КонецЦикла;

    КонецПроцедуры

    #КонецОбласти
```
---
А не проще сделать обычную печатную форму,которая бы выводилась бы по кнопке "Печать"?
---
Нельзя так делать, это не по фен-шую)
---
https://www.youtube.com/watch?v=OdY5JdHMilU
http://1clenta.ru/pattern/206

Вот эти статьи мне помогли!