При разработке и внедрении внешних печатных форм (ВПФ) в современных конфигурациях на базе 1С:ERP, УТ 11 или КА 2 программисты часто сталкиваются с ситуацией, когда стандартный механизм Библиотеки стандартных подсистем (БСП) отказывается регистрировать обработку для конкретного документа. В этой статье мы подробно разберем, почему возникает ошибка «Метод объекта не обнаружен (ДобавитьКомандыПечати)» и как правильно интегрировать свою печатную форму в интерфейс документа, даже если разработчики типового решения этого не предусмотрели.
Рассмотрим ситуацию: вы создали внешнюю обработку, подготовили макет и написали функцию СведенияОВнешнейОбработке. Однако при попытке добавить её в справочник «Дополнительные отчеты и обработки» система выдает критическую ошибку. Проанализируем стек вызова. Проблема кроется в общем модуле УправлениеПечатью. Система пытается обратиться к менеджеру документа, чтобы получить список доступных команд печати, используя метод ДобавитьКомандыПечати.
Выясним причину такого поведения. Документ СчетФактураПолученный в ERP часто считается техническим объектом, предназначенным для отражения НДС. Поскольку печатную форму счета-фактуры обычно предоставляет поставщик, разработчики 1С не включают этот документ в подсистему печати «из коробки». В результате в модуле менеджера этого документа отсутствует необходимая экспортная процедура, что и приводит к ошибке при попытке регистрации ВПФ.
Для решения проблемы нам не нужно снимать конфигурацию с поддержки. Мы воспользуемся механизмом расширений. Давайте создадим новое расширение или воспользуемся существующим, чтобы добавить недостающий функционал в документ СчетФактураПолученный.
Выполним следующие действия:
СчетФактураПолученный в наше расширение.ДобавитьКомандыПечати.Посмотрим на пример кода, который необходимо добавить в модуль менеджера расширения:
// Заполняет список команд печати.
//
// Параметры:
// КомандыПечати - ТаблицаЗначений - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
// Здесь мы оставляем тело процедуры пустым,
// чтобы БСП просто «увидела» наличие метода при регистрации.
КонецПроцедуры
Важный момент: процедура должна быть обязательно помечена ключевым словом Экспорт. После применения этого расширения ошибка при регистрации в справочнике «Дополнительные отчеты и обработки» исчезнет, так как формальный интерфейс БСП теперь соблюден.
Теперь проанализируем структуру самой внешней печатной формы. Чтобы она корректно работала, в модуле объекта обработки должны быть реализованы две обязательные функции (вы можете использовать шаблоны типовых форм для быстрой разработки). Рассмотрим их подробнее.
Во-первых, это функция СведенияОВнешнейОбработке, которая сообщает системе, к каким документам относится эта форма. Во-вторых, это процедура Печать, которая отвечает за формирование табличного документа.
Разберем пример реализации модуля объекта ВПФ:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.3.1.73");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
ПараметрыРегистрации.Назначение.Добавить("Документ.СчетФактураПолученный");
ПараметрыРегистрации.Наименование = "Внешняя печатная форма счета-фактуры";
ПараметрыРегистрации.БезопасныйРежим = Ложь;
ПараметрыРегистрации.Версия = "1.0";
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Печать счета-фактуры (внешняя)";
НоваяКоманда.Идентификатор = "ПечатьСчетФактураВнешняя";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.ПоказыватьОповещение = Истина;
НоваяКоманда.Модификатор = "ПечатьMXL";
Возврат ПараметрыРегистрации;
КонецФункции
Процедура Печать(МассивОбъектовНазначения, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
// Реализация вывода макета
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПечатьСчетФактураВнешняя", "Внешняя печатная форма", СформироватьПечатнуюФорму(МассивОбъектовНазначения[0]));
КонецПроцедуры
После успешной регистрации обработки вы можете столкнуться с тем, что кнопка печати появилась в произвольном месте (например, в командной панели или меню «Еще»), а не в стандартном подменю «Печать». Выясним, почему это происходит.
Подсистема печати БСП ищет на форме документа группу с именем ПодменюПечать или ГруппаКомандыПечати. Если такой группы нет, или если в форме документа не прописана инициализация команд печати, кнопка будет размещена по умолчанию. Чтобы кнопка «встала» в нужное место, нам снова потребуется расширение, но теперь уже для формы документа.
Рассмотрим, что нужно добавить в модуль формы документа через расширение (метод ПриСозданииНаСервере), что часто используется, когда нужно добавить подпись и печать в формах УПД и Счет-фактура:
Пример кода для модуля формы:
&После("ПриСозданииНаСервере")
Процедура ПФ_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Подключаем стандартные команды печати (включая внешние)
УправлениеПечатьюПереопределяемый.ПриСозданииНаСервере(ЭтаФорма);
КонецПроцедуры
Проанализируем результат: теперь при открытии формы документа БСП автоматически опросит менеджер документа (где мы уже создали пустую процедуру ДобавитьКомандыПечати) и справочник дополнительных обработок. Поскольку в расширении формы добавлен вызов ПриСозданииНаСервере, кнопка нашей внешней печатной формы появится в стандартном списке доступных печатных форм документа.
Мы успешно решили задачу подключения ВПФ к «неподготовленному» документу. Основные выводы нашего разбора:
ДобавитьКомандыПечати.-debug), чтобы проверить, проходит ли код через ваши новые процедуры в расширении.Следуя этим шагам, вы сможете подключать любые внешние печатные формы даже к самым специфическим объектам конфигурации ERP.