Как подключить внешнюю печатную форму к документу Счет-фактура полученный в 1С:ERP

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

При разработке и внедрении внешних печатных форм (ВПФ) в современных конфигурациях на базе 1С:ERP, УТ 11 или КА 2 программисты часто сталкиваются с ситуацией, когда стандартный механизм Библиотеки стандартных подсистем (БСП) отказывается регистрировать обработку для конкретного документа. В этой статье мы подробно разберем, почему возникает ошибка «Метод объекта не обнаружен (ДобавитьКомандыПечати)» и как правильно интегрировать свою печатную форму в интерфейс документа, даже если разработчики типового решения этого не предусмотрели.

Анализируем причину возникновения ошибки

Рассмотрим ситуацию: вы создали внешнюю обработку, подготовили макет и написали функцию СведенияОВнешнейОбработке. Однако при попытке добавить её в справочник «Дополнительные отчеты и обработки» система выдает критическую ошибку. Проанализируем стек вызова. Проблема кроется в общем модуле УправлениеПечатью. Система пытается обратиться к менеджеру документа, чтобы получить список доступных команд печати, используя метод ДобавитьКомандыПечати.

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

Шаг 1. Создание расширения для модуля менеджера

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

Выполним следующие действия:

  1. Добавим документ СчетФактураПолученный в наше расширение.
  2. Перейдем в модуль менеджера документа в расширении.
  3. Объявим экспортную процедуру ДобавитьКомандыПечати.

Посмотрим на пример кода, который необходимо добавить в модуль менеджера расширения:


// Заполняет список команд печати.
//
// Параметры:
//   КомандыПечати - ТаблицаЗначений - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
    // Здесь мы оставляем тело процедуры пустым, 
    // чтобы БСП просто «увидела» наличие метода при регистрации.
КонецПроцедуры

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

Шаг 2. Подготовка внешней обработки

Теперь проанализируем структуру самой внешней печатной формы. Чтобы она корректно работала, в модуле объекта обработки должны быть реализованы две обязательные функции (вы можете использовать шаблоны типовых форм для быстрой разработки). Рассмотрим их подробнее.

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

Разберем пример реализации модуля объекта ВПФ:


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.3.1.73");
    
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
    ПараметрыРегистрации.Назначение.Добавить("Документ.СчетФактураПолученный");
    ПараметрыРегистрации.Наименование = "Внешняя печатная форма счета-фактуры";
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    ПараметрыРегистрации.Версия = "1.0";
    
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "Печать счета-фактуры (внешняя)";
    НоваяКоманда.Идентификатор = "ПечатьСчетФактураВнешняя";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    НоваяКоманда.ПоказыватьОповещение = Истина;
    НоваяКоманда.Модификатор = "ПечатьMXL";
    
    Возврат ПараметрыРегистрации;
КонецФункции

Процедура Печать(МассивОбъектовНазначения, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    // Реализация вывода макета
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПечатьСчетФактураВнешняя", "Внешняя печатная форма", СформироватьПечатнуюФорму(МассивОбъектовНазначения[0]));
КонецПроцедуры

Шаг 3. Управление размещением кнопки на форме документа

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

Подсистема печати БСП ищет на форме документа группу с именем ПодменюПечать или ГруппаКомандыПечати. Если такой группы нет, или если в форме документа не прописана инициализация команд печати, кнопка будет размещена по умолчанию. Чтобы кнопка «встала» в нужное место, нам снова потребуется расширение, но теперь уже для формы документа.

Рассмотрим, что нужно добавить в модуль формы документа через расширение (метод ПриСозданииНаСервере), что часто используется, когда нужно добавить подпись и печать в формах УПД и Счет-фактура:

  1. Добавьте вызов инициализации команд печати.
  2. Убедитесь, что в расширении формы присутствует стандартная группа для команд печати.

Пример кода для модуля формы:


&После("ПриСозданииНаСервере")
Процедура ПФ_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Подключаем стандартные команды печати (включая внешние)
    УправлениеПечатьюПереопределяемый.ПриСозданииНаСервере(ЭтаФорма);
КонецПроцедуры

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

Подведение итогов

Мы успешно решили задачу подключения ВПФ к «неподготовленному» документу. Основные выводы нашего разбора:

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

← На главную