При разработке внешних печатных форм (ВПФ) для управляемого приложения часто возникает задача: перед тем как сформировать макет, необходимо получить от пользователя дополнительные данные — например, текстовый комментарий или числовой коэффициент. Стандартный механизм печати в 1С подразумевает вызов серверной процедуры Печать, где пользовательский интерфейс недоступен. Давайте разберем, как грамотно обойти это ограничение, не изменяя конфигурацию.
Это наиболее профессиональный и архитектурно верный способ решения задачи. Вместо того чтобы пытаться прервать процесс печати, мы меняем логику запуска команды.
СведенияОВнешнейОбработке вашей ВПФ измените тип команды. Вместо стандартного вызова серверного метода, укажите тип ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы.ХранилищеЗначений или реквизит обработки, а затем инициируйте печать через вызов методов БСП.Рассмотрим пример реализации метода записи данных на сервере:
&НаСервереБезКонтекста
Процедура ЗаписатьВыбранныеЗначенияНаСервере(ДополнительнаяОбработкаСсылка, ПользовательскиеЗначения)
ОбработкаОбъект = ДополнительнаяОбработкаСсылка.ПолучитьОбъект();
ОбработкаОбъект.ХранилищеНастроек = Новый ХранилищеЗначения(ПользовательскиеЗначения);
ОбработкаОбъект.Записать();
КонецПроцедуры
После вызова этой процедуры необходимо использовать метод ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьОткрытиеПечатнойФормы, чтобы система подхватила сформированные данные и завершила процесс печати.
Если задача позволяет, стоит рассмотреть концепцию дополнительных реквизитов. Этот способ предпочтителен для типовых конфигураций, так как он не требует разработки интерфейсов и «разрывов» в процессе печати.
Суть подхода заключается в следующем:
УправлениеСвойствами.ПолучитьСвойства.Преимущество этого метода в том, что пользователь работает с привычным интерфейсом документа, а программа получает все необходимые данные для формирования печатной формы без дополнительных кликов.
Разберем причину ограничений: процедуры в модуле объекта внешней обработки при печати выполняются на сервере. В клиент-серверной архитектуре 1С:Предприятие сервер не имеет прямого доступа к интерфейсу пользователя. Вызовы методов, работающих с экраном, таких как ВвестиЧисло, Вопрос или ОткрытьФорму, запрещены в серверном контексте. Поэтому любые попытки «перехватить» управление в процедуре Печать приведут к ошибке.
Анализируя задачу, мы приходим к следующему выводу: если взаимодействие с пользователем критически важно в момент печати, используйте тип команды «Открытие формы». Если же данные должны быть привязаны к самому объекту (документу) на длительное время, лучше воспользоваться механизмом дополнительных реквизитов.
Не забывайте, что при использовании версии БСП, регистрация команды должна строго соответствовать формату, ожидаемому системой. Если вы используете ОткрытиеФормы, убедитесь, что в параметрах формы передаются ДополнительнаяОбработкаСсылка, ИдентификаторКоманды и ОбъектыНазначения — это обеспечит корректную работу всей цепочки формирования документов.