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