При подключении внешних печатных форм (ВПФ) к документам в 1С разработчики часто сталкиваются с ошибкой: «Не удалось сформировать внешнюю печатную форму! Метод объекта не обнаружен (Печать)». Проанализируем причину возникновения этой проблемы и разберем по шагам, как правильно оформить модуль внешней обработки для успешного вызова печати.
При вызове внешней печатной формы платформа 1С или встроенная подсистема печати загружает внешнюю обработку в память и обращается к её модулю объекта, пытаясь вызвать экспортируемый метод алгоритма печати. Ошибка происходит в следующих случаях:
ОсновныеДействияФормыПечатьДокумента), а не в модуле объекта.ПечатьWord или СформироватьПечатнуюФорму) вместо стандартного имени Печать.Экспорт. Метод объявлен в модуле объекта, но является приватным (локальным) для модуля, из-за чего внешние механизмы 1С не могут его вызвать.СсылкаНаОбъект в модуле объекта.Разберем главное правило разработки внешних печатных форм: вся основная логика точки входа должна находиться в Модуле объекта обработки, а не в модуле формы. Откроем внешнюю обработку в конфигураторе, перейдем на вкладку «Модуль объекта» и проанализируем структуру кода.
Для традиционных конфигураций (на базе обычных форм и механизмов УниверсальныеМеханизмы) в самом начале модуля объекта обязательно объявим переменную для принятия ссылки на документ:
Перем СсылкаНаОбъект Экспорт;
Выясним, как правильно оформить заголовок метода. Платформа 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();
КонецПопытки;
Возврат Неопределено;
КонецФункции
Все дополнительные процедуры и функции, к которым обращается алгоритм печати (например, получение контактной информации или банковских счетов), также должны располагаться в модуле объекта внешней обработки:
Функция ПолучитьРеквизиты(Плательщик)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КонтактнаяИнформация.Объект,
| КонтактнаяИнформация.Тип КАК Тип,
| КонтактнаяИнформация.Вид,
| КонтактнаяИнформация.Представление
|ИЗ
| РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
|ГДЕ
| КонтактнаяИнформация.Объект = &Организация
|УПОРЯДОЧИТЬ ПО
| Тип";
Запрос.УстановитьПараметр("Организация", Плательщик);
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
Печать.Экспорт в объявлении метода (Функция Печать() Экспорт или Процедура Печать() Экспорт).Перем СсылкаНаОбъект Экспорт; в начале модуля..epf обязательно повторно перезагрузим обработку в справочнике «Внешние обработки» информационной базы.