Как реализовать открытие ссылок на объекты в табличном документе 1С?

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

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

Понятие расшифровки в табличном документе

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

Способ 1. Использование прямой ссылки

Это самый простой и надежный метод. Если в параметр расшифровки передать непосредственно ссылку на объект (справочник, документ), платформа автоматически поймет, что при двойном клике нужно открыть форму этого объекта. Рассмотрим пошагово, как это реализовать:

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

Проанализируем пример кода:


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

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

Способ 2. Использование структур для сложных данных

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


КлючСтруктуры = "Контрагент, НомерДокумента, Ссылка";
СтруктураП = Новый Структура(КлючСтруктуры, Выборка.Контрагент, Выборка.Номер, Выборка.Ссылка);

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

Для обработки такой структуры нам потребуется написать обработчик события ОбработкаРасшифровки у элемента формы ПолеТабличногоДокумента. Рассмотрим пример реализации этого обработчика:


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

Способ 3. Визуальная настройка «Гиперссылка»

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

Выясним, как включить этот режим программно. Для области ячеек достаточно установить свойство Гиперссылка в значение Истина:


Область = ТабДок.Область(5, 2, 5, 2); // Пример для конкретной ячейки
Область.Гиперссылка = Истина;

Использование свойства «СодержитЗначение»

Разберем еще один тонкий момент. В свойствах ячейки макета есть флаг СодержитЗначение. Если его установить и указать ТипЗначения (например, СправочникСсылка.Номенклатура), платформа будет хранить данные в ячейке в типизированном виде. Это позволяет пользователю использовать стандартные возможности 1С, такие как вызов контекстного меню «Открыть» или нажатие клавиши F4 для перехода к объекту, даже если вы не писали программный код для расшифровки.

Типичные ошибки при реализации

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

  1. Режим редактирования: Если у табличного документа ТолькоПросмотр = Ложь, клик по ячейке просто активирует поле ввода текста. Всегда проверяйте это свойство перед выводом отчета пользователю.
  2. Тип данных: Если в расшифровку передается строка (например, строковое представление UUID), а не сама ссылка, стандартное открытие не сработает. Платформа ожидает объект типа СправочникСсылка, ДокументСсылка и т.д.
  3. Отсутствие обработчика на форме: Если вы используете сложную структуру в расшифровке на управляемых формах, обязательно убедитесь, что событие ОбработкаРасшифровки назначено в свойствах элемента формы ПолеТабличногоДокумента.

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

← На главную