Как во внешней печатной форме БСП вывести окно с параметрами перед печатью

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

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

Выбор типа команды: ВызовСерверногоМетода vs ВызовКлиентскогоМетода

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

Чтобы вывести окно, нам необходимо перехватить управление на клиенте. Для этого существуют два основных пути:

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

Регистрация команды в СведенияОВнешнейОбработке

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

Пример кода для регистрации с использованием клиентского метода:


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

Реализация процедуры Печать в модуле формы

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

Разберем по шагам, что должно происходить в этой процедуре:


&НаКлиенте
Процедура Печать(ИдентификаторКоманды, ОбъектыПечати) Экспорт
    
    // Параметры для открытия формы настроек
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("ОбъектыПечати", ОбъектыПечати);
    ПараметрыФормы.Вставить("ИдентификаторКоманды", ИдентификаторКоманды);
    
    // Открываем форму параметров (например, форму с именем "ФормаНастроек")
    ОткрытьФорму("ВнешняяОбработка.ИмяВашейОбработки.Форма.ФормаНастроек", ПараметрыФормы, ЭтаФорма);
    
КонецПроцедуры

Здесь ОбъектыПечати — это массив ссылок на документы, которые пользователь выбрал в списке. Важно передать их в форму параметров, иначе вы не будете знать, для каких именно объектов нужно формировать печать.

Исправление ошибки Метод объекта не обнаружен (Печать)

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

Основные причины ошибки:

Передача параметров и возврат к печати

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

В форме параметров создадим процедуру завершения:


&НаКлиенте
Процедура КомандаОК(Команда)
    
    // Собираем настройки из реквизитов формы
    СтруктураНастроек = Новый Структура;
    СтруктураНастроек.Вставить("Подписант", Объект.Подписант);
    СтруктураНастроек.Вставить("ВыводитьЦену", Объект.ВыводитьЦену);
    
    // Теперь нам нужно вызвать формирование печати. 
    // Обычно это делается через вызов серверного метода модуля объекта.
    // Но лучше всего воспользоваться стандартным методом БСП для вывода результата:
    ВыполнитьПечатьНаСервере(СтруктураНастроек);
    
КонецПроцедуры

Для сохранения единообразия интерфейса рекомендуется в конечном итоге использовать метод УправлениеПечатьюКлиент.ПечатьДокументов. Это позволит вывести вашу форму в стандартный просмотрщик 1С с возможностью печати на принтер, сохранения в PDF и отправки по почте.

Хранение настроек пользователя

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

Резюме по шагам

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

Такой подход позволяет создавать профессиональные и удобные инструменты для пользователей, сохраняя при этом все преимущества стандартной библиотеки БСП.

← На главную