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