Как создать внешнюю печатную форму с предварительными настройками и исправить ошибку «Метод объекта не обнаружен (Печать)»?

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

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

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

Разберем причину ошибки «Метод объекта не обнаружен»

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

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

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


&НаКлиенте
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначения) Экспорт
    // Здесь располагается логика обработки команды:
    // Например, сохранение переданных Объектов назначения в реквизит формы
    // и оставление формы открытой для ввода настроек пользователем.
КонецПроцедуры

Разделение логики: Модуль формы против Модуля объекта

Рассмотрим подробнее архитектуру ВПФ с дополнительными настройками. Логика обязательно должна разделяться на две взаимосвязанные части. Нельзя написать весь код только в одном месте, так как клиентская часть отвечает за интерфейс, а серверная — за тяжелую генерацию макета.

1. Модуль формы (Клиентская часть)

В модуле основной формы мы размещаем клиентскую процедуру Печать, которую мы описали выше. В нее параметром ОбъектыНазначения приходит массив ссылок на документы или элементы справочника, которые пользователь выделил для печати.

Задача этой процедуры — не формировать табличный документ! Ее задача — принять массив ссылок, сохранить его (например, в скрытый реквизит формы или в клиентскую переменную), чтобы форма осталась открытой на экране. Пользователь спокойно выбирает нужные настройки (ставит галочки, заполняет поля). Затем он нажимает на форме кнопку, например, «Сформировать печать».

Обработчик этой кнопки должен собрать все выбранные настройки, взять сохраненный массив ОбъектыНазначения и передать их в серверный метод.

2. Модуль объекта (Серверная часть)

По стандартам БСП, именно в модуле объекта внешней обработки должна находиться серверная экспортная процедура (которая обычно также называется Печать). Эта процедура отвечает за формирование самого табличного документа.

Пример структуры в модуле объекта:


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода, ДополнительныеПараметры = Неопределено) Экспорт
    
    // ДополнительныеПараметры — это структура, которую мы передали с формы настроек
    // Здесь мы формируем Табличный документ с учетом настроек
    
КонецПроцедуры

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

Жизненный цикл ВПФ с формой настроек

Проанализируем полный жизненный цикл такой обработки, чтобы в голове сложилась четкая картинка того, как взаимодействуют объекты:

  1. Пользователь открывает форму списка документов (или карточку элемента справочника), выделяет нужные строки и нажимает кнопку печати.
  2. БСП, считывая параметры регистрации внешней обработки, видит команду ВызовКлиентскогоМетода.
  3. Система открывает форму внешней обработки и автоматически ищет в ней клиентский экспортный метод Печать(ИдентификаторКоманды, ОбъектыНазначения).
  4. Метод отрабатывает. Форма не закрывается, она остается на экране и ожидает действий пользователя.
  5. Пользователь отмечает нужные настройки в интерфейсе (например, выбирает формат вывода или включает отображение печатей и подписей) и нажимает кнопку "Продолжить печать" (или аналогичную).
  6. Срабатывает клиентский обработчик кнопки, который вызывает серверный код. Серверный код использует переданные ОбъектыНазначения и настройки для генерации Табличного документа.
  7. Сформированный табличный документ возвращается на клиент и выводится на экран с помощью стандартного метода БСП, например: УправлениеПечатьюКлиент.ПоказатьПечатныеФормы(...).

Как формируется массив объектов при печати из карточки или списка?

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

Давайте проясним этот момент: разработчику ВПФ вообще не нужно вручную создавать массив и добавлять туда ссылку. Подсистема БСП формирует этот массив автоматически на этапе инициализации печати.

Посмотрим на это в действии:

Вам достаточно просто принять входящий параметр ОбъектыНазначения в клиентской процедуре формы и передать его далее на сервер без каких-либо изменений. Система уже позаботилась о типизации и наполнении этой коллекции.

Резюме и рекомендации

Если вы столкнулись с проблемой при создании ВПФ с диалоговым окном настроек, проверьте следующие моменты по списку:

  1. Убедитесь, что в Сведениях о внешней обработке (функция СведенияОВнешнейОбработке()) установлен параметр Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода;.
  2. Проверьте Модуль формы: там должна быть объявлена процедура Печать с директивой &НаКлиенте, словом Экспорт и строго двумя параметрами.
  3. Проверьте Модуль объекта: там должна быть объявлена процедура формирования табличного документа (также экспортная), которая будет вызываться после того, как пользователь нажмет кнопку на форме.
  4. Не пытайтесь искусственно извлекать ссылки на документы — доверяйте параметру ОбъектыНазначения, который заботливо предоставляет вам Библиотека стандартных подсистем.

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

← На главную