В новых стандартных конфигах все печатные формы выполняются через

```1c
    УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Документ.РасходнаяНакладная", "АктОбОказанииУслуг", ПараметрКоманды, ПараметрыВыполненияКоманды, УправлениеНебольшойФирмойКлиент.ПолучитьЗаголовокПечатнойФормы(ПараметрКоманды));
```

При этом идет обращение в модуль менеджера и вывод на стандартную форму.

А мне хочется через стандартную форму (ПечатьДокументов) показать табличный документ, сформированный внешней обработкой (из этой самой внешней обработки). Как это делается?
---
juntatalor, А с клиентом то зачем вам мучаться?????? если внешняя печатная форма будет сидеть в справочнике доп.Отчетов и обработок.. то забудьте про клиента.. а отлаживать можно через отладчик внешних печатных форм
То что я написала постом выше в процедуре есть строка: сформироватьпечатную форму() - это процедура печати конкретного документа.
А чтобы ваша внешняя обработка могла о себе рассказать, используйте

```1c
    Функция СведенияОВнешнейОбработке() Экспорт
    // Объявим переменную, в которой мы сохраним и вернем "наружу" необходимые данные
    ПараметрыРегистрации = Новый Структура;

    // Объявим еще одну переменную, которая нам потребуется ниже
    МассивНазначений = Новый Массив;

    // Первый параметр, который мы должны указать - это какой вид обработки системе должна зарегистрировать.
    // Допустимые типы: ДополнительнаяОбработка, ДополнительныйОтчет, ЗаполнениеОбъекта, Отчет, ПечатнаяФорма, СозданиеСвязанныхОбъектов
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");

    // Теперь нам необходимо передать в виде массива имен, к чему будет подключена наша ВПФ
    // Имейте ввиду, что можно задать имя в таком виде: Документ.* - в этом случае обработка будет подключена ко всем документам в системе,
    // которые поддерживают механизм ВПФ
    МассивНазначений.Добавить("Документ.ЗаказКлиента");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);

    // Теперь зададим имя, под которым ВПФ будет зарегистрирована в справочнике внешних обработок
    ПараметрыРегистрации.Вставить("Наименование", "Заказ клиента (в виде счета)");

    // Зададим право обработке на использование безопасного режима. Более подробно можно узнать в справке к платформе (метод УстановитьБезопасныйРежим)
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);

    // Следующие два параметра играют больше информационную роль, т.е. это то, что будет видеть пользователь в информации к обработке
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма 'Счет' к документу заказ клиента");

    // Создадим таблицу команд (подробнее смотрим ниже)
    ТаблицаКоманд = ПолучитьТаблицуКоманд();

    // Добавим команду в таблицу
    ДобавитьКоманду(ТаблицаКоманд, "Счет покупателю", "Заказ клиента (в виде счета)", "ВызовСерверногоМетода", Истина, "ПечатьMXL");

    // Сохраним таблицу команд в параметры регистрации обработки
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

    // Теперь вернем системе наши параметры
    Возврат ПараметрыРегистрации;
    КонецФункции

    Функция ПолучитьТаблицуКоманд()

    // Создадим пустую таблицу команд и колонки в ней
    Команды = Новый ТаблицаЗначений;

    // Как будет выглядеть описание печатной формы для пользователя
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));

    // Имя нашего макета, что бы могли отличить вызванную команду в обработке печати
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));

    // Тут задается, как должна вызваться команда обработки
    // Возможные варианты:
    // - ОткрытиеФормы - в этом случае в колонке идентификатор должно быть указано имя формы, которое должна будет открыть система
    // - ВызовКлиентскогоМетода - вызвать клиентскую экспортную процедуру из модуля формы обработки
    // - ВызовСерверногоМетода - вызвать серверную экспортную процедуру из модуля объекта обработки
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));

    // Следующий параметр указывает, необходимо ли показывать оповещение при начале и завершению работы обработки. Не имеет смысла при открытии формы
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));

    // Для печатной формы должен содержать строку ПечатьMXL
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
    Возврат Команды;
    КонецФункции

    Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = ")
    // Добавляем команду в таблицу команд по переданному описанию.
    // Параметры и их значения можно посмотреть в функции ПолучитьТаблицуКоманд
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление;
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;

    КонецПроцедуры
```
---
juntatalor, Если вы про управлениепечатью, то для внешних:

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

    ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;

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

Хотя для внешщних печатных форм ещё куча процедур, где определяются сведения о вашей форме и параметры её регистрации и команды печати для неё
---
Что мешает воспользоваться подключаемыми внешними печатными формами. Рисуешь свою, подключаешь к базе и получаешь результат ее выполнения в типовом окне.
---
Я создал обработку, в модуле объекта:

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

    Структура = Новый Структура;
    Структура.Вставить("Вид", "ПечатнаяФорма");
    Структура.Вставить("Наименование", "Печать акта для расходной накладной");
    Структура.Вставить("Версия", "1.00");
    Структура.Вставить("БезопасныйРежим", Истина);
    Структура.Вставить("Информация", ");

    Команды = Новый ТаблицаЗначений;
    Команды.Колонки.Добавить("Идентификатор");
    Команды.Колонки.Добавить("Представление");
    Команды.Колонки.Добавить("Модификатор");
    Команды.Колонки.Добавить("ПоказыватьОповещение");
    Команды.Колонки.Добавить("Использование");

    НоваяСтрока = Команды.Добавить();
    НоваяСтрока.Идентификатор = "ПечатьАкта";
    НоваяСтрока.Представление = "ПечатьАкта";
    НоваяСтрока.Модификатор = ";
    НоваяСтрока.ПоказыватьОповещение = Ложь;
    НоваяСтрока.Использование = "ВызовКлиентскогоМетода";

    Структура.Вставить("Команды", Команды);

    Назначение = Новый Массив;
    Назначение.Добавить("Документ.РасходнаяНакладная");

    Структура.Вставить("Назначение", Назначение);

    Возврат Структура;

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

В модуле формы:

```1c
    &НаКлиенте
    Функция Печать(Идентификатор, ОбъектыНазначения) Экспорт

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

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

Подключил ее через дополнительные отчеты и обработки. Команда печати появилась, результата нажатия на нее нет.
---
Уже вижу, процедура печать должна иметь вид

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

    КонецПроцедуры // Печать()
```

И в ней надо вызывать

УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию
---
juntatalor, А с клиентом то зачем вам мучаться?????? если внешняя печатная форма будет сидеть в справочнике доп.Отчетов и обработок.. то забудьте про клиента.. а отлаживать можно через отладчик внешних печатных форм
То что я написала постом выше в процедуре есть строка: сформироватьпечатную форму() - это процедура печати конкретного документа.
А чтобы ваша внешняя обработка могла о себе рассказать, используйте

```1c
    Функция СведенияОВнешнейОбработке() Экспорт
    // Объявим переменную, в которой мы сохраним и вернем "наружу" необходимые данные
    ПараметрыРегистрации = Новый Структура;

    // Объявим еще одну переменную, которая нам потребуется ниже
    МассивНазначений = Новый Массив;

    // Первый параметр, который мы должны указать - это какой вид обработки системе должна зарегистрировать.
    // Допустимые типы: ДополнительнаяОбработка, ДополнительныйОтчет, ЗаполнениеОбъекта, Отчет, ПечатнаяФорма, СозданиеСвязанныхОбъектов
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");

    // Теперь нам необходимо передать в виде массива имен, к чему будет подключена наша ВПФ
    // Имейте ввиду, что можно задать имя в таком виде: Документ.* - в этом случае обработка будет подключена ко всем документам в системе,
    // которые поддерживают механизм ВПФ
    МассивНазначений.Добавить("Документ.ЗаказКлиента");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);

    // Теперь зададим имя, под которым ВПФ будет зарегистрирована в справочнике внешних обработок
    ПараметрыРегистрации.Вставить("Наименование", "Заказ клиента (в виде счета)");

    // Зададим право обработке на использование безопасного режима. Более подробно можно узнать в справке к платформе (метод УстановитьБезопасныйРежим)
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);

    // Следующие два параметра играют больше информационную роль, т.е. это то, что будет видеть пользователь в информации к обработке
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма 'Счет' к документу заказ клиента");

    // Создадим таблицу команд (подробнее смотрим ниже)
    ТаблицаКоманд = ПолучитьТаблицуКоманд();

    // Добавим команду в таблицу
    ДобавитьКоманду(ТаблицаКоманд, "Счет покупателю", "Заказ клиента (в виде счета)", "ВызовСерверногоМетода", Истина, "ПечатьMXL");

    // Сохраним таблицу команд в параметры регистрации обработки
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

    // Теперь вернем системе наши параметры
    Возврат ПараметрыРегистрации;
    КонецФункции

    Функция ПолучитьТаблицуКоманд()

    // Создадим пустую таблицу команд и колонки в ней
    Команды = Новый ТаблицаЗначений;

    // Как будет выглядеть описание печатной формы для пользователя
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));

    // Имя нашего макета, что бы могли отличить вызванную команду в обработке печати
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));

    // Тут задается, как должна вызваться команда обработки
    // Возможные варианты:
    // - ОткрытиеФормы - в этом случае в колонке идентификатор должно быть указано имя формы, которое должна будет открыть система
    // - ВызовКлиентскогоМетода - вызвать клиентскую экспортную процедуру из модуля формы обработки
    // - ВызовСерверногоМетода - вызвать серверную экспортную процедуру из модуля объекта обработки
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));

    // Следующий параметр указывает, необходимо ли показывать оповещение при начале и завершению работы обработки. Не имеет смысла при открытии формы
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));

    // Для печатной формы должен содержать строку ПечатьMXL
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
    Возврат Команды;
    КонецФункции

    Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = ")
    // Добавляем команду в таблицу команд по переданному описанию.
    // Параметры и их значения можно посмотреть в функции ПолучитьТаблицуКоманд
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление;
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;

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