При разработке внешних обработок в системе 1С:Предприятие 8.3 часто возникает задача не просто вывести одну печатную форму, а предоставить пользователю выбор из нескольких вариантов (например, «Счет», «Договор» или «Акт»). В отличие от стандартных печатных форм, внешняя обработка требует ручной настройки интерфейса для создания кнопок с выпадающими списками. В этой статье мы подробно разберем, как создать удобное меню печати, правильно организовать серверный код и интегрировать обработку с современными подсистемами.
Рассмотрим наиболее простой и эффективный способ создания кнопки с выпадающим списком непосредственно в редакторе управляемой формы. Этот метод не требует написания сложного кода для управления визуальными элементами и позволяет быстро сгруппировать команды печати.
Для реализации этого метода выполним следующие шаги:
ПечатьСчета и ПечатьДоговора).Проанализируем результат: на форме появится одна кнопка с заголовком группы. При клике на нее пользователь увидит список всех команд, которые мы поместили внутрь. Каждая команда будет вызывать свой обработчик на клиенте, который затем обратится к серверу для формирования макета.
Иногда количество макетов может меняться динамически, или мы хотим реализовать выбор через поле ввода. Разберем, как реализовать выбор варианта печати через реквизит формы с типом СписокВыбора.
Посмотрим на пример реализации:
ВыбранныйМакет с типом Строка.ПриСозданииНаСервере заполним список доступных вариантов:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Элементы.ВыбранныйМакет.СписокВыбора.Добавить("Счет", "Печатная форма счета");
Элементы.ВыбранныйМакет.СписокВыбора.Добавить("Акт", "Печатная форма акта");
КонецПроцедуры
Затем создадим одну общую кнопку «Печать», которая будет считывать значение из реквизита ВыбранныйМакет и передавать его в серверную функцию формирования документа.
Если вы разрабатываете обработку для типовых конфигураций (УТ 11, ERP, БП 3.0), правильнее всего использовать механизм Подменю «Печать». Это позволит вашей внешней обработке выглядеть как часть стандартного функционала системы.
Выясним, как это работает. В модуле объекта внешней обработки должна быть экспортная функция СведенияОВнешнейОбработке. Чтобы добавить несколько вариантов печати, нужно описать их в таблице команд.
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
// Добавляем первую команду
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Печать счета (внешняя)";
НоваяКоманда.Идентификатор = "Счет";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипВызоваВызовСерверногоМетода();
// Добавляем вторую команду
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Печать акта (внешняя)";
НоваяКоманда.Идентификатор = "Акт";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипВызоваВызовСерверногоМетода();
Возврат ПараметрыРегистрации;
КонецФункции
При такой реализации система сама сформирует выпадающее меню печати, если вы зарегистрируете эту обработку в справочнике «Дополнительные отчеты и обработки».
Разберем подробнее, как происходит само формирование печатной формы на сервере. Независимо от того, какой способ создания кнопок вы выбрали, логика работы с макетом остается схожей. Нам необходимо вызвать функцию ПолучитьМакет из объекта обработки.
Посмотрим на пример кода серверной функции:
&НаСервере
Функция СформироватьТабличныйДокумент(НазваниеМакета)
// Получаем объект обработки для доступа к макетам
ОбъектОбработки = РеквизитФормыВЗначение("Объект");
Макет = ОбъектОбработки.ПолучитьМакет(НазваниеМакета);
ТабДок = Новый ТабличныйДокумент;
// Получаем области макета
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
// Заполняем параметры области
ОбластьШапка.Параметры.Дата = ТекущаяДата();
// Выводим область в документ
ТабДок.Вывести(ОбластьШапка);
// Настройки печати
ТабДок.АвтоМасштаб = Истина;
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_" + НазваниеМакета;
Возврат ТабДок;
КонецФункции
После того как табличный документ сформирован на сервере, его нужно показать пользователю. Существует два основных подхода:
ТабДок с сервера и вызываем ТабДок.Показать("Заголовок окна"). Это откроет стандартное модальное или блокирующее окно просмотра 1С.ТабличныйДокумент и перетащить его в элементы. После формирования на сервере мы просто присваиваем результат этому реквизиту.Проанализируем ситуацию с передачей данных: поскольку ТабличныйДокумент является типом, который можно передавать между сервером и клиентом (в управляемых формах), нам не обязательно использовать временное хранилище, если документ не слишком велик. Однако для очень объемных отчетов рекомендуется помещать результат во временное хранилище на сервере и возвращать только адрес (URL), который затем будет прочитан на клиенте.
Чтобы печатная форма выглядела профессионально, обратите внимание на следующие свойства объекта ТабличныйДокумент, которые стоит устанавливать программно:
Истина, чтобы программа автоматически подгоняла ширину макета под лист бумаги.Истина, чтобы пользователь случайно не изменил текст сформированного документа перед печатью.Таким образом, мы рассмотрели полный цикл создания системы печати во внешней обработке: от проектирования выпадающего меню на форме до технических деталей формирования и вывода ТабличногоДокумента.