Как исправить ошибки при создании внешней печатной формы в 1С:Управление торговлей?

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

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

Ошибка 1. «Невозможно подключить дополнительную обработку из файла. Метод объекта не обнаружен (СведенияОВнешнейОбработке)»

Выясним причину этой ошибки. При добавлении обработки в справочник ДополнительныеОтчетыИОбработки подсистема 1С пытается вызвать экспортную функцию СведенияОВнешнейОбработке(). Если функция размещена в модуле формы или объявлена без ключевого слова Экспорт, платформа 1С не сможет её найти.

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

Пример корректного модуля объекта для регистрации внешней печатной формы:


Функция СведенияОВнешнейОбработке() Экспорт

    ОбъектыНазначенияФормы = Новый Массив;
    ОбъектыНазначенияФормы.Добавить("Документ.РеализацияТоваровУслуг");

    ПараметрыРегистрации = Новый Структура;
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
    ПараметрыРегистрации.Вставить("Назначение", ОбъектыНазначенияФормы);
    ПараметрыРегистрации.Вставить("Наименование", "ТОРГ - 12 (альтернативная)");
    ПараметрыРегистрации.Вставить("Информация", "Внешняя печатная форма документа реализации");
    ПараметрыРегистрации.Вставить("Версия", "1.0.0");

    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд, 
        "ТОРГ - 12 (альтернативная)", 
        "ТОРГ_12_альтернативная", 
        "ВызовСерверногоМетода", 
        Истина, 
        "ПечатьMXL");

    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

    Возврат ПараметрыРегистрации;

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

Функция ПолучитьТаблицуКоманд()
    Команды = Новый ТаблицаЗначений;
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
    Возврат Команды;
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление;
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры

Ошибка 2. Ошибка при вызове метода контекста (ПолучитьМакет): Недопустимое значение параметра

Проанализируем ситуацию, когда при формировании печати возникает ошибка вызова ПолучитьМакет. Частая ошибка новичков — попытка запросить макет из метаданных основного документа конфигурации:


// Неправильно: попытка запросить макет из конфигурации
МакетОбработки = Документы.РеализацияТоваровУслуг.ПолучитьМакет("МакетМой");

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

Решение: используйте вызов метода ПолучитьМакет() без обращения к объекту Документы.


// Правильно: получение макета самого объекта внешней обработки
МакетОбработки = ПолучитьМакет("МакетМой");

Рекомендуется также называть макеты макетных форм по стандартам разработки БСП, например: ПФ_MXL_ТОРГ12_Альтернативная.

Важные требования БСП к экспортной процедуре печати

Рассмотрим дополнительные требования стандартов разработки БСП, которые обеспечат стабильную работу печатной формы:

  1. Сигнатура метода печати: Метод формировании печати должен быть объявлен как Процедура Печать(...) Экспорт, а не как функция. Первым параметром БСП передает не одиночную ссылку, а массив ссылок МассивОбъектов для возможности групповой печати.
  2. Использование правильных реквизитов: В типовой конфигурации «Управление торговлей 11» у документа РеализацияТоваровУслуг нет реквизита Поставщик — организация продавца хранится в реквизите Организация.
  3. Передача табличного документа: Не создавайте заново КоллекцияПечатныхФорм = Новый ТаблицаЗначений внутри метода Печать, так как структура этой таблицы уже сформирована механизмом БСП. Пользуйтесь процедурой УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию.

Посмотрим на итоговый пример правильной реализации процедуры Печать в модуле объекта:


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

    ИмяМакета = "ПФ_MXL_ТОРГ12_Альтернативная";
    
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, ИмяМакета) Тогда
        
        ТабличныйДокумент = СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати);
        
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм, 
            ИмяМакета, 
            "ТОРГ-12 (альтернативная)", 
            ТабличныйДокумент
        );
        
    КонецЕсли;

КонецПроцедуры

Функция СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати)
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ТОРГ12";
    
    МакетОбработки = ПолучитьМакет("ПФ_MXL_ТОРГ12_Альтернативная");
    
    Для Каждого СсылкаНаОбъект Из МассивОбъектов Цикл
        
        // Фиксируем начало печати документа для разбиения по страницам
        НомерСтраницыНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
        
        ОбластьШапка = МакетОбработки.ПолучитьОбласть("Поставщик");
        ОбластьШапка.Параметры.ПредставлениеОрганизации = СсылкаНаОбъект.Организация;
        ТабличныйДокумент.Вывести(ОбластьШапка);
        
        ОбластьШапкаТЧ = МакетОбработки.ПолучитьОбласть("ШапкаТаблицы");
        ТабличныйДокумент.Вывести(ОбластьШапкаТЧ);
        
        ОбластьСтроки = МакетОбработки.ПолучитьОбласть("СтрокаТаблицы");
        Для Каждого ТекущаяСтрока Из СсылкаНаОбъект.Товары Цикл
            ЗаполнитьЗначенияСвойств(ОбластьСтроки.Параметры, ТекущаяСтрока);
            ТабличныйДокумент.Вывести(ОбластьСтроки);
        КонецЦикла;
        
        УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтраницыНачало, ОбъектыПечати, СсылкаНаОбъект);
        
    КонецЦикла;
    
    ТабличныйДокумент.АвтоМасштаб = Истина;
    Возврат ТабличныйДокумент;

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

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

← На главную