Как открыть диалоговое окно во внешней печатной форме в управляемом приложении?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке внешних печатных форм (ВПФ) для управляемого приложения часто возникает задача: перед тем как сформировать макет, необходимо получить от пользователя дополнительные данные — например, текстовый комментарий или числовой коэффициент. Стандартный механизм печати в 1С подразумевает вызов серверной процедуры Печать, где пользовательский интерфейс недоступен. Давайте разберем, как грамотно обойти это ограничение, не изменяя конфигурацию.

Решение 1: Использование типа команды «Открытие формы»

Это наиболее профессиональный и архитектурно верный способ решения задачи. Вместо того чтобы пытаться прервать процесс печати, мы меняем логику запуска команды.

  1. Настройка регистрации: В функции СведенияОВнешнейОбработке вашей ВПФ измените тип команды. Вместо стандартного вызова серверного метода, укажите тип ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы.
  2. Создание формы: Создайте в обработке форму с нужными вам полями (реквизитами).
  3. Передача данных: При нажатии кнопки «Печать» в вашей форме, выполните сохранение данных в ХранилищеЗначений или реквизит обработки, а затем инициируйте печать через вызов методов БСП.

Рассмотрим пример реализации метода записи данных на сервере:


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

После вызова этой процедуры необходимо использовать метод ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьОткрытиеПечатнойФормы, чтобы система подхватила сформированные данные и завершила процесс печати.

Решение 2: Использование дополнительных реквизитов (без диалоговых окон)

Если задача позволяет, стоит рассмотреть концепцию дополнительных реквизитов. Этот способ предпочтителен для типовых конфигураций, так как он не требует разработки интерфейсов и «разрывов» в процессе печати.

Суть подхода заключается в следующем:

  1. Вы добавляете дополнительный реквизит (свойство) к объекту через режим «Администрирование».
  2. Пользователь заполняет этот реквизит непосредственно в форме документа.
  3. В модуле ВПФ при печати вы считываете значение этого свойства с помощью функции УправлениеСвойствами.ПолучитьСвойства.

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

Почему нельзя просто вызвать функцию ВвестиЧисло в модуле объекта?

Разберем причину ограничений: процедуры в модуле объекта внешней обработки при печати выполняются на сервере. В клиент-серверной архитектуре 1С:Предприятие сервер не имеет прямого доступа к интерфейсу пользователя. Вызовы методов, работающих с экраном, таких как ВвестиЧисло, Вопрос или ОткрытьФорму, запрещены в серверном контексте. Поэтому любые попытки «перехватить» управление в процедуре Печать приведут к ошибке.

Итоговые рекомендации

Анализируя задачу, мы приходим к следующему выводу: если взаимодействие с пользователем критически важно в момент печати, используйте тип команды «Открытие формы». Если же данные должны быть привязаны к самому объекту (документу) на длительное время, лучше воспользоваться механизмом дополнительных реквизитов.

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

← На главную