Как на основе встроенной обработки создать внешнюю печатную форму в 1С:ERP 2

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

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

Разберем основные отличия встроенной обработки от внешней

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

Если мы просто сохраним встроенную обработку как файл и попытаемся загрузить её в программу, мы получим ошибку: «Невозможно подключить дополнительную обработку из файла». Это происходит потому, что системе «непонятно», к какому документу относится эта форма, как её вызывать и какие права ей нужны.

Шаг 1. Создание функции регистрации СведенияОВнешнейОбработке

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

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


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

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

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

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

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

В этом коде мы четко определяем поле Назначение. Именно здесь указывается список документов, в меню печати которых появится наша новая кнопка. Если вы хотите использовать обработку для другого документа, просто измените строку Документ.ИмяВашегоДокумента.

Шаг 2. Исправление сигнатуры процедуры Печать

Рассмотрим следующую распространенную проблему. После добавления функции регистрации часто возникает ошибка: «Недостаточно фактических параметров. ВнешняяОбработкаОбъект.Печать()». Это происходит из-за того, что стандарт БСП требует строго определенного количества и состава аргументов для основной процедуры печати.

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


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

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

Шаг 3. Перенос макетов и работа с контекстом

Посмотрим на особенности работы с макетами. Во встроенной обработке получение макета может выполняться через методы менеджера или напрямую. Во внешней обработке крайне важно убедиться, что вы обращаетесь к макету, который лежит внутри файла .epf. Используйте конструкцию ЭтотОбъект.ПолучитьМакет("ИмяМакета").

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

Альтернативный вариант: Использование расширений

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

  1. Простота обновления: Вам не нужно следить за актуальностью файла на диске или в справочнике, всё хранится в базе.
  2. Доступ к контексту: В расширении проще дотянуться до методов модулей менеджера документов, используя аннотации &Вместо или &После.
  3. Макеты: Вы можете добавить свой макет прямо в расширение к существующему документу.

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

Методика отладки внешней печатной формы

Отлаживать ВПФ напрямую довольно неудобно, так как при каждом изменении кода файл нужно перезагружать в справочник. Проанализируем способ ускорения разработки:

  1. Создайте в вашей обработке основную форму.
  2. Добавьте на форму реквизит СсылкаНаОбъект (тип — документ, который вы печатаете) и кнопку «Тест».
  3. В обработчике кнопки напишите код, который формирует массив из одной этой ссылки и вызывает экспортную процедуру Печать с заглушками для остальных параметров.

Теперь вы сможете открывать обработку через Файл -> Открыть, выбирать документ и нажимать кнопку «Тест». Все точки останова в конфигураторе будут работать в обычном режиме, что позволит быстро выловить ошибки в логике формирования печатного листа.

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

← На главную