Как реализовать интерактивную расшифровку во внешней печатной форме БСП?

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

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

Почему не удается перехватить стандартную расшифровку?

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

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

Решение: Инкапсуляция логики в собственную форму

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

Вместо того чтобы полагаться на механизм ПечатьДокументов, мы реализуем следующую стратегию:

  1. Создаем внешнюю обработку с основной формой.
  2. Размещаем на этой форме элемент управления ТабличноеПоле (или ПолеТабличногоДокумента).
  3. Программируем обработчик ОбработкаРасшифровки непосредственно в модуле нашей формы.

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


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

Преимущества подхода с собственной формой

Используя собственную форму внутри внешней обработки, вы получаете полный контроль над взаимодействием с пользователем:

Технические нюансы работы с расшифровкой

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


Область = Макет.ПолучитьОбласть("Строка");
ПараметрыРасшифровки = Новый Структура;
ПараметрыРасшифровки.Вставить("ДокументСсылка", СсылкаНаОбъект);
ПараметрыРасшифровки.Вставить("ТипДействия", "ОткрытьСписок");

Область.Параметры.Сумма = ИтоговаяСумма;
Область.Параметры.Сумма.Расшифровка = ПараметрыРасшифровки;

Таким образом, мы формируем ячейку как интерактивный элемент. Когда пользователь нажмет на неё, в наш обработчик ОбработкаРасшифровки попадет именно та структура, которую мы подготовили заранее. Это позволяет передать любой необходимый контекст для выполнения сложной бизнес-логики.

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

← На главную