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

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

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

Почему возникает ошибка «Метод объекта не обнаружен (Печать)»?

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

  1. Метод расположен не в том модуле. Процедура обработки вызова размещена в модуле формы (например, под именем ОсновныеДействияФормыПечатьДокумента), а не в модуле объекта.
  2. Неверное имя процедуры или функции. Метод назван произвольно (например, ПечатьWord или СформироватьПечатнуюФорму) вместо стандартного имени Печать.
  3. Отсутствует ключевое слово Экспорт. Метод объявлен в модуле объекта, но является приватным (локальным) для модуля, из-за чего внешние механизмы 1С не могут его вызвать.
  4. Не объявлена реквизитная переменная. В обычных конфигурациях для передачи ссылки на печатаемый документ требуется экспортная переменная СсылкаНаОбъект в модуле объекта.

Шаг 1. Перенос кода в модуль объекта

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

Для традиционных конфигураций (на базе обычных форм и механизмов УниверсальныеМеханизмы) в самом начале модуля объекта обязательно объявим переменную для принятия ссылки на документ:

Перем СсылкаНаОбъект Экспорт;

Шаг 2. Объявление экспортной функции или процедуры «Печать»

Выясним, как правильно оформить заголовок метода. Платформа 1С ищет конкретное имя точки входа — Печать. Метод обязательно должен содержать ключевое слово Экспорт.

Рассмотрим пример правильного оформления функции печати, формирующей документ Microsoft Word:


Функция Печать() Экспорт

    Если Не ЗначениеЗаполнено(СсылкаНаОбъект) Тогда
        Возврат Неопределено;
    КонецЕсли;

    Макет = ЭтотОбъект.ПолучитьМакет("Форма");
    MSWord = Макет.Получить();

    Попытка
        Документ = MSWord.Application.Documents(1);
        Документ.Activate();

        // Заполнение параметров в документе Word
        Замена = Документ.Content.Find;
        Замена.Execute("[НомерДоговора]", Ложь, Истина, Ложь, , , Истина, , Истина, СокрЛП(СсылкаНаОбъект.НомерДоговора));

        Замена = Документ.Content.Find;
        Замена.Execute("[ДатаДоговора]", Ложь, Истина, Ложь, , , Истина, , Ложь, Формат(СсылкаНаОбъект.ДатаДоговора, "ДФ=dd.MM.yyyy"));

        // Работа с закладками и таблицами
        Если MSWord.Bookmarks.Exists("Таблица3") Тогда
            MSWord.Bookmarks("Таблица3").Select();
            Документ.Paragraphs.Add();
            Rng = MSWord.Application.Selection.Range;
            
            КонтактнаяИнформация = ПолучитьРеквизиты(СсылкаНаОбъект.Контрагент);
            
            мСтрокаМФакт = "";
            мСтрокаМЮр = "";
            мСтрокаМТел = "";
            
            Для Каждого Строка Из КонтактнаяИнформация Цикл
                Если Строка.Вид = Справочники.ВидыКонтактнойИнформации.ФактАдресКонтрагента Тогда
                    мСтрокаМФакт = СокрЛП(Строка.Представление);
                ИначеЕсли Строка.Вид = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента Тогда
                    мСтрокаМЮр = СокрЛП(Строка.Представление);
                ИначеЕсли Строка.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента Тогда
                    мСтрокаМТел = СокрЛП(Строка.Представление);
                КонецЕсли;
            КонецЦикла;

            Rng.InsertAfter("Фактический адрес: " + мСтрокаМФакт + ", Юридический адрес: " + мСтрокаМЮр + ", тел.: " + мСтрокаМТел);
            Rng.InsertParagraphAfter();
        КонецЕсли;

        MSWord.Application.Visible = Истина;
        MSWord.Activate();

    Исключение
        Сообщить(ОписаниеОшибки());
        MSWord.Application.Quit();
    КонецПопытки;

    Возврат Неопределено;

КонецФункции

Шаг 3. Вспомогательные функции в модуле объекта

Все дополнительные процедуры и функции, к которым обращается алгоритм печати (например, получение контактной информации или банковских счетов), также должны располагаться в модуле объекта внешней обработки:


Функция ПолучитьРеквизиты(Плательщик)

    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   КонтактнаяИнформация.Объект,
        |   КонтактнаяИнформация.Тип КАК Тип,
        |   КонтактнаяИнформация.Вид,
        |   КонтактнаяИнформация.Представление
        |ИЗ
        |   РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
        |ГДЕ
        |   КонтактнаяИнформация.Объект = &Организация
        |УПОРЯДОЧИТЬ ПО
        |   Тип";

    Запрос.УстановитьПараметр("Организация", Плательщик);
    Возврат Запрос.Выполнить().Выгрузить();

КонецФункции

Подведем итоги чек-листа самопроверки

  1. Проверим, что код находится в Модуле объекта внешней обработки (не в Модуле формы).
  2. Убедимся, что имя основной функции/процедуры — ровно Печать.
  3. Проверим наличие ключевого слова Экспорт в объявлении метода (Функция Печать() Экспорт или Процедура Печать() Экспорт).
  4. Если используется старый механизм регистраций ВПФ, проверим наличие строки Перем СсылкаНаОбъект Экспорт; в начале модуля.
  5. После внесения изменений в файл .epf обязательно повторно перезагрузим обработку в справочнике «Внешние обработки» информационной базы.
← На главную