Как разработать и отладить внешнюю печатную форму в 1С:Предприятие 8.2?

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

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

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

Основные различия и подводные камни при переносе печатных форм

Проанализируем ситуацию, когда необходимо взять за основу готовую печатную форму из одной конфигурации (например, ЗУП) и адаптировать её под другую (например, БУХ). На этом этапе часто возникают следующие сложности:

  1. Различия в общих модулях: В разных типовых решениях используются специализированные общие модули. Модули для работы с кадровыми данными или физическими лицами из ЗУП могут отсутствовать в Бухгалтерии или иметь иную сигнатуру вызова процедур.
  2. Типизация реквизита ссылки: Чтобы внешняя печатная форма корректно подключалась в механизме дополнительных печатных форм, в ней должен быть объявлен реквизит СсылкаНаОбъект. Если ему задан строго один тип документа (например, ДокументСсылка.РеализацияТоваровУслуг), назначить эту форму для документа другого типа не удастся без изменения типа реквизита на составной или универсальный.
  3. Ограничения безопасного режима: При запускe внешней печатной формы из базы платформой по умолчанию применяется безопасный режим, в котором ограничены вызовы внешних компонент, работы с файловой системой и COM-объектами.

Пошаговый алгоритм создания внешней печатной формы

Рассмотрим стандартную последовательность действий при разработке новой ВПФ на платформе 1С:Предприятие 8.2:

  1. Откроем 1С:Предприятие в режиме Конфигуратор.
  2. Создадим новую внешнюю обработку через меню Файл — Новый — Внешняя обработка.
  3. В дереве реквизитов созданной обработки добавим реквизит с точным именем СсылкаНаОбъект. В качестве типа значения укажем ссылку на тот документ или справочник, для которого разрабатывается форма (например, ДокументСсылка.АктОбОказанииПроизводственныхУслуг или составной тип).
  4. Добавим в обработку макет печатной формы (типа Табличный документ) или скопируем существующий макет из конфигурации.
  5. Создадим основную форму обработки и разместим на ней элемент управления Поле ввода, связав его с реквизитом СсылкаНаОбъект. Это необходимо для удобной отладки.

Структура модуля объекта и экспортная функция Печать

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

Рекомендуется разделять получение данных и построение печатной формы на отдельные логические функции, как это реализовано в типовых конфигурациях 1С:


Функция Печать() Экспорт

    ПараметрыПечати = ПолучитьПараметрыПечати();
    ТабДокумент = СформироватьТабличныйДокумент(ПараметрыПечати);
    
    Возврат ТабДокумент;

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

Разберем подробнее структуру функций получения данных и заполнения макета:


Функция ПолучитьПараметрыПечати()

    Параметры = Новый Структура;
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	Док.Ссылка КАК Ссылка,
        |	Док.Номер КАК Номер,
        |	Док.Дата КАК Дата,
        |	Док.Организация КАК Организация,
        |	Док.Контрагент КАК Контрагент
        |ИЗ
        |	Документ.РеализацияТоваровУслуг КАК Док
        |ГДЕ
        |	Док.Ссылка = &СсылкаНаОбъект";
        
    Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект);
    Выборка = Запрос.Выполнить().Выбрать();
    
    Если Выборка.Следующий() Тогда
        Параметры.Вставить("Номер", Выборка.Номер);
        Параметры.Вставить("Дата", Выборка.Дата);
        Параметры.Вставить("Организация", Выборка.Организация);
        Параметры.Вставить("Контрагент", Выборка.Контрагент);
    КонецЕсли;

    Возврат Параметры;

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

Функция СформироватьТабличныйДокумент(ПараметрыПечати)

    ТабДокумент = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("Макет");
    
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьШапка.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьШапка);
    
    Возврат ТабДокумент;

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

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

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

Чтобы эффективно отладить код, используем созданную форму обработки:

  1. Откроем обработку через меню Файл — Открыть прямо в режиме 1С:Предприятие.
  2. В поле ввода СсылкаНаОбъект выберем реальный документ из информационной базы.
  3. Нажмем кнопку на форме, вызывающую процедуру печати. В модуле формы при этом прописывается прямой вызов функции модуля объекта:

&НаКлиенте
Процедура НажатиеКнопкиПечать(Команда)
    
    // Получаем объект обработки и вызываем экспортную функцию
    ОбъектОбработки = РеквизитФормыВЗначение("Объект");
    ТабДок = ОбъектОбработки.Печать();
    ТабДок.Показать();
    
КонецПроцедуры

При таком подходе точка останова, поставленная в модуле объекта обработки, успешно сработает в Конфигураторе, и мы сможем проанализировать значения промежуточных переменных, структур и результатов выполнения запросов.

← На главную