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