Как добавить кнопку сохранения в PDF и другие интерактивные элементы в макет печатной формы

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

При разработке печатных форм в системе 1С:Предприятие 8 часто возникает задача упростить жизнь пользователю, добавив возможность мгновенного сохранения документа в формате PDF или выполнения иных действий прямо из окна просмотра. Рассмотрим подробно, почему технически нельзя просто «нарисовать» кнопку в макете и какими профессиональными способами можно реализовать этот функционал.

Различие между макетом и формой: теоретический минимум

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

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

Метод 1. Использование механизмов БСП (Рекомендуемый способ)

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

Разберем по шагам добавление команды, которая откроет стандартное окно печати с уже готовыми кнопками сохранения:

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

В этом случае в верхней части окна автоматически появятся кнопки «Сохранить» (с выбором PDF) и «Отправить по почте». Это самый «чистый» способ, так как он не требует изменения типовых форм и корректно работает при обновлениях.

Метод 2. Создание «псевдокнопки» в макете через расшифровку

Если стоит задача разместить кнопку именно внутри документа (например, внизу счета, рядом с подписью), мы можем имитировать поведение кнопки, используя механизм расшифровки ячеек. Выясним, как это реализовать.

Рассмотрим алгоритм настройки ячейки-кнопки:

  1. В макете выберем ячейку и оформим ее: зададим рамки, заливку цветом и текст (например, «Сохранить в PDF»).
  2. В свойствах ячейки в поле ПараметрРасшифровки впишем уникальное имя, например, "КнопкаСохранитьPDF".
  3. В свойствах этой же ячейки установим флаг Гиперссылка — это позволит курсору менять вид при наведении, создавая эффект кнопки.

Теперь нам необходимо обработать нажатие. В коде формы, где выводится этот макет, нужно создать обработчик события ОбработкаРасшифровки для поля табличного документа. Проанализируем пример кода:


&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    
    Если Расшифровка = "КнопкаСохранитьPDF" Тогда
        // Отменяем стандартное действие 1С (открытие значения)
        СтандартнаяОбработка = Ложь;
        
        // Вызываем процедуру сохранения
        СохранитьДокументВPDF();
    КонецЕсли;
    
КонецПроцедуры

Этот метод хорош тем, что «кнопка» печатается вместе с документом (если это необходимо) и визуально находится внутри контента.

Метод 3. Добавление кнопок в командную панель формы

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


&НаСервере
Процедура ДобавитьКнопкуНаФорму()
    
    // Создаем команду формы
    НоваяКоманда = ЭтаФорма.Команды.Добавить("КомандаСохранитьВPDF");
    НоваяКоманда.Действие = "Подключаемый_ВыполнитьСохранение";
    НоваяКоманда.Заголовок = "Сохранить в PDF (быстро)";
    
    // Добавляем кнопку на панель
    НовыйЭлемент = ЭтаФорма.Элементы.Добавить("КнопкаСохранитьPDF", Тип("КнопкаФормы"), ЭтаФорма.Элементы.КоманднаяПанель);
    НовыйЭлемент.ИмяКоманды = "КомандаСохранитьВPDF";
    
КонецПроцедуры

Этот способ предпочтителен для реализации сложной логики, не связанной напрямую с содержимым конкретных ячеек.

Программная реализация сохранения в PDF

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

Ниже представлен пример процедуры, которая выполняет экспорт:


&НаКлиенте
Процедура СохранитьДокументВPDF()
    
    // Получаем табличный документ из реквизита формы
    ТабДок = ЭтаФорма.Объект.ТабличныйДокумент;
    
    // Настраиваем диалог сохранения
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
    Диалог.Фильтр = "Документ Adobe PDF (*.pdf)|*.pdf";
    Диалог.ПолноеИмяФайла = "Счет_на_оплату";
    
    Если Диалог.Выбрать() Тогда
        Попытка
            // Метод Записать выполняет конвертацию и сохранение
            ТабДок.Записать(Диалог.ПолноеИмяФайла, ТипФайлаТабличногоДокумента.PDF);
            ПоказатьОповещениеПользователя("Успех", , "Файл успешно сохранен!");
        Исключение
            Сообщить("Ошибка при сохранении: " + ОписаниеОшибки());
        КонецПопытки;
    КонецЕсли;
    
КонецПроцедуры

Интерактивные рисунки как альтернатива

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

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

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

← На главную