Как реализовать печать табличного документа с выбором макета во внешней обработке

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

При разработке внешних обработок в системе 1С:Предприятие 8.3 часто возникает задача не просто вывести одну печатную форму, а предоставить пользователю выбор из нескольких вариантов (например, «Счет», «Договор» или «Акт»). В отличие от стандартных печатных форм, внешняя обработка требует ручной настройки интерфейса для создания кнопок с выпадающими списками. В этой статье мы подробно разберем, как создать удобное меню печати, правильно организовать серверный код и интегрировать обработку с современными подсистемами.

Способ 1. Использование Группы команд для создания выпадающего меню

Рассмотрим наиболее простой и эффективный способ создания кнопки с выпадающим списком непосредственно в редакторе управляемой формы. Этот метод не требует написания сложного кода для управления визуальными элементами и позволяет быстро сгруппировать команды печати.

Для реализации этого метода выполним следующие шаги:

  1. Откроем форму нашей внешней обработки в конфигураторе.
  2. В дереве элементов формы (левая верхняя панель) выберем уровень, где должна располагаться кнопка (например, «Командная панель»).
  3. Нажмем правую кнопку мыши и выберем Добавить -> Группа.
  4. В свойствах новой группы установим вид — Группа команд.
  5. Критически важный момент: в свойстве «Отображение» выберем значение Меню. Это превратит группу в кнопку со стрелочкой, при нажатии на которую будет выпадать список.
  6. Теперь создадим несколько команд на вкладке «Команды» (например, ПечатьСчета и ПечатьДоговора).
  7. Перетащим эти команды внутрь созданной группы в дереве элементов формы.

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

Способ 2. Программное формирование списка выбора

Иногда количество макетов может меняться динамически, или мы хотим реализовать выбор через поле ввода. Разберем, как реализовать выбор варианта печати через реквизит формы с типом СписокВыбора.

Посмотрим на пример реализации:

  1. Создадим реквизит формы ВыбранныйМакет с типом Строка.
  2. Разместим его на форме и в свойствах элемента установим РежимВыбораИзСписка = Истина.
  3. В обработчике события ПриСозданииНаСервере заполним список доступных вариантов:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Элементы.ВыбранныйМакет.СписокВыбора.Добавить("Счет", "Печатная форма счета");
    Элементы.ВыбранныйМакет.СписокВыбора.Добавить("Акт", "Печатная форма акта");
КонецПроцедуры

Затем создадим одну общую кнопку «Печать», которая будет считывать значение из реквизита ВыбранныйМакет и передавать его в серверную функцию формирования документа.

Способ 3. Интеграция с Библиотекой стандартных подсистем (БСП)

Если вы разрабатываете обработку для типовых конфигураций (УТ 11, ERP, БП 3.0), правильнее всего использовать механизм Подменю «Печать». Это позволит вашей внешней обработке выглядеть как часть стандартного функционала системы.

Выясним, как это работает. В модуле объекта внешней обработки должна быть экспортная функция СведенияОВнешнейОбработке. Чтобы добавить несколько вариантов печати, нужно описать их в таблице команд.


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

При такой реализации система сама сформирует выпадающее меню печати, если вы зарегистрируете эту обработку в справочнике «Дополнительные отчеты и обработки».

Техническая реализация формирования табличного документа

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

Посмотрим на пример кода серверной функции:


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

Вывод документа пользователю

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

  1. Метод Показать(): Самый быстрый способ. В клиентском обработчике команды мы получаем ТабДок с сервера и вызываем ТабДок.Показать("Заголовок окна"). Это откроет стандартное модальное или блокирующее окно просмотра 1С.
  2. Элемент формы «Поле табличного документа»: Если мы хотим, чтобы результат печати отображался внутри формы нашей обработки, нужно добавить на форму реквизит с типом ТабличныйДокумент и перетащить его в элементы. После формирования на сервере мы просто присваиваем результат этому реквизиту.

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

Важные нюансы управления параметрами печати

Чтобы печатная форма выглядела профессионально, обратите внимание на следующие свойства объекта ТабличныйДокумент, которые стоит устанавливать программно:

Таким образом, мы рассмотрели полный цикл создания системы печати во внешней обработке: от проектирования выпадающего меню на форме до технических деталей формирования и вывода ТабличногоДокумента.

← На главную