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