Как программно установить обработчик события для декорации формы в 1С

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

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

Постановка задачи и создание элемента

Представим ситуацию: нам необходимо вывести на форму список опросов или документов, количество которых заранее неизвестно. Мы хотим, чтобы каждое название было кликабельным. Для этого мы будем использовать Декорацию формы с видом Надпись.

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


// Пример создания декорации на сервере
НазваниеЭлемента = "Декорация_Опрос_123";
ГруппаРодитель = ЭтаФорма.Элементы.ГруппаСодержание;

// Добавляем элемент на форму
НоваяДекорация = ЭтаФорма.Элементы.Добавить(НазваниеЭлемента, Тип("ДекорацияФормы"), ГруппаРодитель);
НоваяДекорация.Вид = ВидДекорацииФормы.Надпись;
НоваяДекорация.Заголовок = "Пройти опрос №123";

На данном этапе элемент уже появится на форме, но он будет вести себя как обычный статический текст. Чтобы превратить его в интерактивный объект, необходимо настроить дополнительные свойства.

Активация интерактивности: свойство Гиперссылка

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

Выясним, как правильно настроить это свойство:

НоваяДекорация.Гиперссылка = Истина;

После установки этого свойства курсор мыши при наведении на текст будет принимать форму "руки", а сам текст (в зависимости от настроек оформления) может изменить цвет или стать подчеркнутым. Только теперь платформа будет готова "слушать" нажатия пользователя на этот элемент.

Программное назначение обработчика событий

Для связи события элемента с процедурой в модуле формы используется метод УстановитьДействие. Разберем его синтаксис: первым параметром передается имя события в виде строки, вторым — имя процедуры-обработчика, также в виде строки.

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


// Устанавливаем обработчик события "Нажатие"
НоваяДекорация.УстановитьДействие("Нажатие", "ОбработчикНажатияНаДекорацию");

Важный нюанс: часто разработчики допускают ошибку, пытаясь передать объект типа Действие, как это делается в старых версиях платформы или в других объектах. В управляемых формах для элементов формы метод УстановитьДействие принимает именно строку с именем процедуры. Попытка вызвать Новый Действие("ИмяПроцедуры") приведет к ошибке "Тип не определен (Действие)" при проверке на сервере.

Требования к процедуре-обработчику

Процедура, имя которой мы указали в методе УстановитьДействие, должна соответствовать строгим правилам, иначе при нажатии на элемент пользователь получит сообщение об ошибке.

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

Для события Нажатие декорации формы процедура должна принимать один параметр — Элемент. Посмотрим на пример реализации:


&НаКлиенте
Процедура ОбработчикНажатияНаДекорацию(Элемент)
    // Элемент - это объект декорации, на которую нажали
    ИмяЭлемента = Элемент.Имя;
    ТекстЗаголовка = Элемент.Заголовок;
    
    Сообщить("Вы нажали на декорацию: " + ТекстЗаголовка);
    // Здесь можно реализовать логику открытия формы или документа
КонецПроцедуры

Различие между событиями Нажатие и ОбработкаНавигационнойСсылки

Иногда декорации используются для работы с навигационными ссылками 1С. В этом случае может потребоваться обработчик ОбработкаНавигационнойСсылки. Важно понимать, что у этого события другой состав параметров.

Проанализируем сигнатуру для этого случая:


&НаКлиенте
Процедура ОбработчикНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
    // Логика обработки ссылки
КонецПроцедуры

Если вы назначите одну и ту же процедуру с одним параметром на оба этих события, программа аварийно завершится при попытке обработки навигационной ссылки из-за несовпадения количества параметров. Будьте внимательны и разделяйте логику или создавайте универсальные процедуры с учетом контекста.

Типичные ошибки при программной установке обработчиков

Разберем основные причины, по которым код может не работать, как это случилось в обсуждении на форуме:

Продвинутый уровень: Использование ФорматированнойСтроки

Если вам нужно, чтобы кликабельным было не все поле декорации, а только отдельное слово в тексте, рассмотрим использование Форматированной строки. В этом случае мы не используем событие Нажатие самой декорации, а внедряем гиперссылку прямо в текст.

Пример реализации такой задачи:


&НаСервере
Процедура ДобавитьСложныйТекст()
    // Создаем части строки
    Часть1 = "Нажмите ";
    
    // Создаем кликабельную часть через навигационную ссылку
    ТекстСсылки = "здесь";
    Ссылка = "e1cib/app/Справочник.Опросы"; // Пример внутренней ссылки
    Часть2 = Новый ФорматированнаяСтрока(ТекстСсылки, , , , Ссылка);
    
    Часть3 = " чтобы увидеть список.";
    
    // Собираем общую строку
    ИтоговаяСтрока = Новый ФорматированнаяСтрока(Часть1, Часть2, Часть3);
    
    // Находим декорацию и устанавливаем заголовок
    Декорация = ЭтаФорма.Элементы.ДекорацияТекст;
    Декорация.Заголовок = ИтоговаяСтрока;
КонецПроцедуры

В этом сценарии при клике по слову "здесь" сработает событие формы ОбработкаНавигационнойСсылки, если оно определено, либо платформа попытается перейти по ссылке стандартными средствами.

Заключение

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

← На главную