При печати документа, должна открыться форма с доп настройками и далее продолжиться печать. Не получается открыть эту форму, делаю через расширение, пишет что не обнаружен общий модуль. Помогите решить данную проблемку
---
На сервере это надо делать.
То есть сделать еще одну процедуру с контекстом &НаСервереБезКонтекста или &НаСервере.
Передать в нее "Результат".
И в ней уже сохранять

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

    СохранитьНастройкиДляПечати(Результат);

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

    &НаСервереБезКонтекста
    Процедура СохранитьНастройкиДляПечати(Результат)
    ХранилищеОбщихНастроек.Сохранить("МТД_НастройкиПечати",,Результат);
    КонецПроцедуры
```
---
код вызова в студию
ЗЫ и модуль в расширение надо добавить, как минимум с процедурой вызова.
---
```1c
    &Вместо("ДобавитьКомандыПечати")
    Процедура МТД_ДобавитьКомандыПечати(КомандыПечати) //Добавление команды
    //Лукин++ Накладная на передачу готовой продукции (МХ-18)
    КомандаПечати = КомандыПечати.Добавить();
    //КомандаПечати.МенеджерПечати = "Обработка.МТД_ПечатьНаОбработку";
    КомандаПечати.Идентификатор = "МТД_Макет";
    КомандаПечати.Представление = НСтр("ru = 'Новая печать (МХ-18)'");
    КомандаПечати.Обработчик = "УправлениеПечатьюБПКлиент.ВыполнитьКомандуПечати";
    КомандаПечати.Порядок = 210;

    ПродолжитьВызов(КомандыПечати);
    КонецПроцедуры

    &Вместо("Печать") //Процедура печати
    Процедура МТД_Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "МТД_Макет") Тогда
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "МТД_Макет", "МТД макет",
    ПечатьМХ(МассивОбъектов, ОбъектыПечати, ПараметрыПечати), , "ОбщийМакет.ПФ_MXL_МХ18");
    Иначе
    ПродолжитьВызов(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
    КонецЕсли;
    КонецПроцедуры

    Функция ПечатьМХ(МассивОбъектов, ОбъектыПечати, ПараметрыПечати)

    МТД_ОбщийМодуль1.ОткрытьФорму(); //Вот тут вызываю форму (перед обработкой всей печати. Пишет, что МТД_ОбщийМодуль1 не обнаружен
```
---
В принципе подход не верный.
Сначала, по нажатию на кнопку печати на форме - показать эту доп. форму, а не в процедуре печати.
---
Сначала, по нажатию на кнопку печати на форме

Спасибо, совет помог, но возникло 2 вопроса:

1. Открываю форму, но код не останавливается, а дальше идет все на печать. Нужно чтобы форма открылась, я задал параметры и они дальше полетели в печатную форму
2. Как передать параметры с открытой формы дальше на печать?
---
При открытии формы передавать параметр ОписаниеОповещения.
В нем указывается процедура, которая будет вызвана после закрытия формы.
---
Это код с формы списка документа (решил тут сделать открытие формы, правильно ли решил?)

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

    ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список);
    КонецПроцедуры
```
---
Не совсем. Примерно так.

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

    КонецЕсли;

    ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список);
    КонецПроцедуры

    &НаКлиенте
    Процедура ПослеЗакрытияФормыОбработки(Результат, ДополнитльныеПараметры) Экспорт
    ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, ДополнитльныеПараметры, Элементы.Список);
    КонецПроцедуры
```
---
Почему-то форма открывается одновременно происходит печать, а после закрытия формы еще раз происходит печать)
---
Добавил сюда возврат, и перестал дальше код выполняться

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

    ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список);
    КонецПроцедуры
```
---
Добавил сюда возврат, и перестал дальше код выполняться
В (15) он там и так есть.
---
А как данные теперь которые я на форме выбрал перенести на печать, как я понимаю их в доп параметры надо засунуть?

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

И на форме нужно эти доп параметры заполнить?
---
Нет.
Как написал в 20, проще всего при закрытии формы обработки сохранять параметры в хранилище общих настроек, а в процедуре печати получать из хранилища общих настроек.
---
Мне же теперь нужно как то получить мои параметры в процедуре печати, там где подставляются все параметры в макет, верно?
---
Да. Если форму с доп параметрами закрывать так:
Закрыть(<ПараметрыИзОбработки>)

То параметры будут доступны в процедуре ПослеЗакрытияФормыОбработки в переменной Результат.

А как их передать в печать, это конечно другой вопрос.
Например, при закрытии обработки можно сохранять параметры в хранилище общих настроек, а в процедуре печати получать из хранилища общих настроек.
---
Закрыть()
Это как я понимаю, нужно прописать ПриЗакрытии?
---
Нет.
Если вам нужно вернуть какие то данные из открытой формы в форму, из которой вызывается, то в открытой форме делается кнопка, например "Применить" в которой в процедуре команды написано

```1c
    Закрыть(<данные которые нужно вернуть>);
```
---
записать данные в структуру и структуру возвращать?
---
Если вам надо эти данные возвращать, то как вариант, да.
---
Через хранилище не получается сделать, ругается
---
Вы же про хранилищеобщихнастроек говорили?
---
Да.
---
```1c
    &НаКлиенте
    Процедура ПослеЗакрытияФормыОбработки(Результат, ДополнительныеПараметры) Экспорт

    ХранилищеОбщихНастроек.Сохранить("МТД_НастройкиПечати",,Результат); //Переменная не определена ХранилищеОбщихНастроек

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

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

    СохранитьНастройкиДляПечати(Результат);

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

    &НаСервереБезКонтекста
    Процедура СохранитьНастройкиДляПечати(Результат)
    ХранилищеОбщихНастроек.Сохранить("МТД_НастройкиПечати",,Результат);
    КонецПроцедуры
```
---
Спасибо большое, помогло!
---
Может есть какая-нибудь альтернатива данному способу?
---
Конечно есть.
Не использовать типовую процедуру "ПодключаемыеКомандыКлиент.ВыполнитьКоманду", а сделать свою, в которой вызывать формирование печатной формы с переданными параметрами, а потом вывести ее пользователю.
---
Наверное ты пытаешься открыть форму будуче на сервере, тебе необходимо перед началом печати ещё на клиенте открыть форму с настройками, а уже после продолжить печать.
---
Но я обращаюсь с менеджера документа к общему модулю, да, он клиентский
---
Ты в расширении в модуле менеджера такую конструкцию перенёс ?
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

 //код

#КонецЕсли
---
И скорее всего модуль который не обнаружен клиентский.
---
Да, он клиентский, на клиенте же открыть пытаюсь
---
Такую задачу решать лучше через Дополнительные отчеты и обработки, если конфигурация на основе БСП.
---
не нужно, для вызова промежуточной формы при формировании Печатной формы, для задания дополнительных параметров при печати.