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