При формировании внешней печатной формы (ВПФ) из меню документа пользователи нередко сталкиваются с аварийным завершением процесса и сообщением вида: «Не удалось сформировать внешнюю печатную форму! Метод объекта не обнаружен (ИмяМетода)». Ситуация часто осложняется тем, что при возникновении ошибки система не предлагает сразу перейти в конфигуратор, а сама печатная форма хранится внутри информационной базы. Разберем по шагам, почему возникает эта ошибка, как настроить отладку и устранить причину сбоя.
Сообщение Метод объекта не обнаружен указывает на то, что платформа попыталась вызвать процедуру или функцию у конкретного объекта (общего модуля, модуля менеджера, модуля объекта или внешней обработки), но не смогла ее найти. Выделим основные технические причины такого поведения:
Экспорт, и она становится недоступной для вызова из внешних объектов. Также при обновлении подсистем разработчики типовых решений могут переносить методы в закрытые служебные модули или менять состав параметров.Клиент (обычное приложение), платформа сгенерирует исключение о необнаруженном методе, даже если физически процедура присутствует в коде.Вызов сервера, иначе платформа не предоставит к нему доступ.Многие разработчики обращают внимание на то, что при возникновении сбоя в режиме 1С:Предприятие не появляется стандартное диалоговое окно с кнопкой «Конфигуратор». Проанализируем, почему это происходит:
Попытка ... Исключение. Ошибка перехватывается программно, после чего пользователю выводится информационное сообщение, а стандартное окно аварийного завершения блокируется.ДополнительныеОтчетыИОбработки или ВнешниеОбработки) в виде двоичных данных. В момент печати платформа извлекает файл во временный каталог на диске и динамически подключает его. Конфигуратор не связывает точки останова в исходном файле внешней обработки с экземпляром, запущенным из временной папки.Рассмотрим несколько проверенных подходов к отладке внешней печатной формы, когда ошибка перехватывается механизмом печати.
Это самый быстрый способ поймать проблемное место без изменения программного кода подсистем печати. Выполним следующие действия:
Попытка ... Исключение.1С:Предприятие и повторим вызов печатной формы. Отладчик мгновенно прервет выполнение программы именно на той строке, где вызывается неопределенный метод.Если требуется детально изучить алгоритм формирования печатного документа, разберем порядок действий по выгрузке обработки:
Дополнительные отчеты и обработки (или Внешние обработки)..epf).Печать или СформироватьПечатнуюФорму).Ctrl + Shift + F) найдем в тексте обработки вызов функции, указанной в сообщении об ошибке (например, ПолучитьКонтактнуюИнформациюНечеткогоВида).Если требуется пройти по шагам весь процесс запуска внешней формы из типового механизма:
F9) на строке непосредственного обращения к объекту внешней обработки, например:
ТабДокумент = ВнешняяОбработкаОбъект.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
F11 (Шагнуть в). Платформа автоматически откроет модуль объекта подключенной внешней обработки, где можно продолжить пошаговую трассировку.Для регулярного тестирования сложных печатных форм удобно добавить форму отладки прямо в файл .epf:
ДокументСсылка) и кнопку Выполнить печать.
&НаКлиенте
Процедура ВыполнитьПечать(Команда)
ПечатьНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПечатьНаСервере()
ОбъектОбработки = РеквизитВЗначение("Объект");
МассивСсылок = Новый Массив;
МассивСсылок.Добавить(ДокументСсылка);
// Вызов основной экспортной процедуры печати
ТабличныйДокумент = ОбъектОбработки.СформироватьПечатнуюФорму(МассивСсылок);
ТабличныйДокумент.Показать();
КонецПроцедуры
Выяснив, на каком вызове происходит сбой, применим соответствующее исправление:
Экспорт, если оно было удалено при обновлении:
// Было (недоступно из внешних обработок):
Функция ПолучитьКонтактнуюИнформациюНечеткогоВида(Ссылка, ВидКонтактнойИнформации)
// Стало:
Функция ПолучитьКонтактнуюИнформациюНечеткогоВида(Ссылка, ВидКонтактнойИнформации) Экспорт
&НаСервере или находиться в серверном общем модуле. Если общего модуля касается вызов с клиента — в свойствах модуля должны стоять соответствующие флаги (например, Клиент (управляемое приложение) и Сервер).