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

Итак, описание регистрации сохраняется. Форму диалога также нужно будет рисовать. А вот процедуру печати необходимо перенести из модуля объекта обработки в модуль формы:

```1c
    &НаКлиенте
    Процедура КомандаПечати(Команда)

    ПользовательскиеЗначения = Новый Структура;
    ПользовательскиеЗначения.Вставить("ТекстСообщения", Объект.ТекстСообщения);

    МассивОбъектов = ОбъектыНазначения.ВыгрузитьЗначения();

    РезультатПечати = Печать(ИдентификаторКоманды, МассивОбъектов, ПользовательскиеЗначения);

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

    ЭтотОбъект.Закрыть();

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

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

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

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

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

    Возврат Результат;

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

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

    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.Область(1,1).Текст = "Это внешняя печтаная форма с диалогом.";
    ТабДокумент.Область(2,1).Текст = "Пользовательский текст: " + ПользовательскиеПараметры.ТекстСообщения;

    Возврат ТабДокумент;

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

Для этого в функции регистрации ВПФ добавляете команду печати с типом "Открытие формы":

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

Рисуете форму обработки с нужным интерфейсом. Режим открытия - блокировать окно владельца. Добавляете параметры формы: ДополнительнаяОбработкаСсылка типа ссылки на доп. обработки, ИдентификаторКоманды строкового типа и ОбъектыНазначения произвольного типа. Добавляете также реквизиты формы, соответствующие параметрам. При создании формы сохраняете параметры.

Добавляете на форму кнопку печати. В обработчике команды открываете печатную форму:

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

    ПользовательскиеЗначения = Новый Структура;
    ПользовательскиеЗначения.Вставить("ТекстСообщения", Объект.ТекстСообщения);

    ЗаписатьВыбранныеЗначенияНаСервере(ДополнительнаяОбработкаСсылка, ПользовательскиеЗначения);

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

    ЭтотОбъект.Закрыть();
```

Перед открытием печатной формы всякий раз записываете в обработку введенный пользователем текст. Для этого используете предназначенный для хранения настроек реквизит справочника доп. обработок "ХранилищеНастроек":

```1c
    &НаСервереБезКонтекста
    Процедура ЗаписатьВыбранныеЗначенияНаСервере(ДополнительнаяОбработкаСсылка, ПользовательскиеЗначения)

    // Возможно потребуется установка привилегированного режима

    ОбработкаОбъект = ДополнительнаяОбработкаСсылка.ПолучитьОбъект();
    ОбработкаОбъект.ХранилищеНастроек = Новый ХранилищеЗначения(ПользовательскиеЗначения);
    ОбработкаОбъект.Записать();

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

Попробую еще посмотреть варианты решения это задачи. Возможно удастся найти более элегантное решение.
---
dhurricane, очень интересное решение, спасибо, буду пробовать!
---
Полагаю, мне удалось найти подходящее решение.

Итак, описание регистрации сохраняется. Форму диалога также нужно будет рисовать. А вот процедуру печати необходимо перенести из модуля объекта обработки в модуль формы:

```1c
    &НаКлиенте
    Процедура КомандаПечати(Команда)

    ПользовательскиеЗначения = Новый Структура;
    ПользовательскиеЗначения.Вставить("ТекстСообщения", Объект.ТекстСообщения);

    МассивОбъектов = ОбъектыНазначения.ВыгрузитьЗначения();

    РезультатПечати = Печать(ИдентификаторКоманды, МассивОбъектов, ПользовательскиеЗначения);

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

    ЭтотОбъект.Закрыть();

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

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

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

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

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

    Возврат Результат;

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

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

    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.Область(1,1).Текст = "Это внешняя печтаная форма с диалогом.";
    ТабДокумент.Область(2,1).Текст = "Пользовательский текст: " + ПользовательскиеПараметры.ТекстСообщения;

    Возврат ТабДокумент;

    КонецФункции
```
---
dhurricane, все работает! Именно то, что надо! Спасибо Вам!!!
---
Спасибо большое. Очень помогло)))
---
Большое спасибо!
---
А если доп реквизит добавить? И при печати его отлавливать. В этом же нет ничего сложного
---
А каким образом отлавливать то?
---
в зависимости от того, какая у Вас конфигурация.

В новых ЗУПах и ERP доп реквизиты хранятся в табличной части у документа, справочника и т.д. И тогда можно делать запрос к нужной ТЧ, чтобы имя доп реквизита было равно нужному значению, которое можно глянуть в поле для разработчиков формы доп реквизита.

А если конфигурация старая, то у Вас, скорее всего, доп реквизиты хранятся в регистрах. Как там запрос делать, я точно не скажу. Но отловить это точно можно)
Можете поэкспериментировать - будет полезно))
---
Мы, наверное, о разных вещах говорим.
У меня есть внешняя обработка, подключенная в качестве печатной формы к документу.
После того, как пользователь из документа начинает печатать эту фору, вызывается процедура Печать(...) из модуля ВПФ, естественно на сервере.
Как вывести какое-либо диалоговое окно с пользователем? Функция ВвестиЧисло() и ей подобные в серверной процедуре недоступны, вызвать процедуру НаКлиенте тоже нельзя. Как быть?
---
Нет, просто я Вам предлагаю посмотреть на другую концепцию. Вы говорите, что Вам нужно заполнять это поле для того, чтобы оно влияло на Вашу печатную форму, верно? А если Вы к документу добавите дополнительный реквизит. Соответственно, это будет то поле, которое в Вашей логике должно влиять на формирование ВПФ. То есть не вызывать окно, а будет доп реквизит, где это значение вводится. Тогда при печати Вы просто смотрите этот реквизит и он у Вас влияет на Вашу ВПФ как Вам угодно. И заодно будет повод поразмыслить о модальности, от которой Вы отказываетесь, когда не вызываете функции вроде ВвестиЧисло().
---
Ну, если бы можно было менять конфигурацию - то какой вопрос то? ) Именно вся фишки в том, чтобы конфу не трогать, а перехватить на клиенте печать ВПФ.
---
Здравствуйте. Вы не знаете про механизм доп реквизитов в типовых конфигурациях? Не хотите почитать об этом механизме на своей конфе?)
---
А, теперь понял. Да, это, пожалуй, вариант. Спасибо!
---
начнем с того, что у Вас формы нет, где как Видно из Видного можно было бы разместить реквизиты ))
реквизиты пользователь будет вводить для печати после просмотра ВПФ?
после этого планируется этот же макет выводить?
---
Вас там совсем отморозило в Сибири?
Про форму писали вы или дядя из Барнаула?
Как это сделать?
это то не сложно, но дальше последует вопрос
А вот когда форма то будет создана и открыта "не сложно", то появится возможность реквизиты то и разместить и увидеть...
---
опять ты дальше носа не видишь ни фига))) на скрине у ТС видно, что формы не видно ))
угомонись уже )) или у тебя дефицит общения? )
---
А вот когда форма то будет создана и открыта
я про это собственно и написал в (10)
))) просто кто-то упорно хочет побазарить
---
Вот побазарить опять же хочется кому-то реально, не давая никакой полезной информации вообще , просто упоминая о возможных вопросах в будущем...
Автор просит помощи именно в создании и открытии формы , которая ПЕРЕД формированием печати будет получать данные и вставлять в запросы.
Это пояснинение специально для тех кто далеко от нас...
---
Да, именно, либо создать форму (но когда и как ее открыть), либо другой способ "перехватить" процедуры на сервере, чтобы использовать механизмы, доступные на Клиенте.
Менять конфу нельзя, вариант типа открывать обработку через файл-открыть, задавать там параметры и выбирать печатаемый док - сами понимаете неприемлемое решение...