Все способы сделать активную ссылку в 1С:Предприятии
Содержание
Создать гиперссылку в 1С можно четырьмя способами: декорация-надпись с установленным свойством «Гиперссылка», навигационная ссылка на объект через функцию ПолучитьНавигационнуюСсылку, кликабельный фрагмент в форматированной строке и тег <a href> в поле HTML-документа. Какой выбрать — зависит от того, куда должна вести ссылка: на внешний сайт, на объект базы или на другую форму.
Ниже — все четыре механизма с рабочим кодом, событиями, которые при этом срабатывают, и разбором, почему ссылка иногда не нажимается. Всё под платформу 8.3 с интерфейсом «Такси».
Чем отличаются типы ссылок и когда какой нужен
В 1С нет единого «вставить ссылку». Есть несколько объектов платформы, каждый решает свою задачу:
- 🔗 Декорация-надпись на управляемой форме — самый частый случай. Текст выглядит как ссылка и при клике запускает ваш обработчик.
- 🧭 Навигационная ссылка (
e1cib/...) — внутренний адрес объекта информационной базы. По ней открывается карточка справочника, документ, список или команда. - 🎨 Форматированная строка — когда в одном тексте нужно несколько кликабельных фрагментов с разным оформлением.
- 🌐 Поле HTML-документа — если контент приходит как готовый HTML с тегами
<a href>.
Отдельно стоит расшифровка в табличном документе — её используют в печатных формах и отчётах, чтобы по двойному клику открыть исходный объект.
Для перехода на внешний сайт достаточно декорации с обычным http/https-адресом. Для перехода на объект базы нужна именно навигационная ссылка, а не путь к объекту.
Ссылка-надпись на управляемой форме
Это рабочая лошадка. Открываете форму в конфигураторе, добавляете декорацию вида «Надпись» и включаете у неё свойство Гиперссылка. Текст сразу становится подчёркнутым и кликабельным.
Порядок действий:
- На форме в дереве элементов правой кнопкой → «Добавить» → Декорация-Надпись.
- В палитре свойств задайте
Заголовок(видимый текст) и поставьте галочкуГиперссылка. - В разделе «События» у свойства
Нажатиенажмите лупу — платформа создаст обработчик в модуле формы.
В обработчике пишете, что делать по клику. Для внешнего адреса — ПерейтиПоНавигационнойСсылке:
&НаКлиенте
Процедура ОткрытьСайтНажатие(Элемент)
ПерейтиПоНавигационнойСсылке("https://example.com");
КонецПроцедуры
Функция ПерейтиПоНавигационнойСсылке (клиентская) умеет и внешние адреса, и внутренние e1cib. Внешний откроется в браузере, внутренний — внутри 1С.
Свойство Нажатие и обработчик вызываются ТОЛЬКО когда Гиперссылка = Истина. Если галочку забыли, надпись останется обычным статичным текстом и клик ничего не сделает.
Поле ввода, связанное с реквизитом, тоже умеет работать как ссылка, если у него тип значения — ссылочный (например, СправочникСсылка). Тогда в режиме «только просмотр» значение показывается подчёркнутым и по клику открывает карточку объекта автоматически, без вашего кода.
Навигационная ссылка на объект информационной базы
Чтобы открыть конкретный элемент справочника или документ, нужен его внутренний адрес. Его возвращает глобальная функция ПолучитьНавигационнуюСсылку:
Адрес = ПолучитьНавигационнуюСсылку(Объект.Контрагент);
// Адрес вида: e1cib/data/Справочник.Контрагенты?ref=...
Полученную строку можно:
- передать в
ПерейтиПоНавигационнойСсылке(Адрес)— объект откроется в текущем сеансе; - вставить в письмо или в поле — пользователь кликнет и попадёт прямо в карточку;
- сохранить в реквизит типа «Строка», чтобы потом открывать по ней объект.
Схема адреса e1cib отражает тип сущности:
| Префикс | Что открывает |
|---|---|
e1cib/data/... | карточку конкретного объекта (по ref) |
e1cib/list/... | список справочника или документов |
e1cib/command/... | команду (отчёт, обработку, общую команду) |
e1cib/app/... | саму информационную базу (стартовую страницу) |
Базовый адрес самой базы берётся функцией ПолучитьНавигационнуюСсылкуИнформационнойБазы() — пригодится, когда ссылку вставляют в текст письма и она должна работать с чужого компьютера.
Навигационную ссылку не нужно собирать руками из строк. Передайте в ПолучитьНавигационнуюСсылку саму ссылку на объект — платформа соберёт корректный ref сама. Склеенный вручную адрес почти всегда ведёт в пустоту.
Если открыть объект нужно из кода напрямую, навигационная ссылка даже не обязательна — есть две клиентские процедуры:
// Открыть карточку объекта, как по гиперссылке
ПоказатьЗначение(, Объект.Контрагент);
// Открыть произвольную форму с параметрами
ПараметрыФормы = Новый Структура("Ключ", Объект.Контрагент);
ОткрытьФорму("Справочник.Контрагенты.ФормаОбъекта", ПараметрыФормы);
ПоказатьЗначение короче и подходит, когда достаточно открыть объект «как есть». ОткрытьФорму нужна, если вы хотите передать параметры, открыть список с отбором или конкретную форму выбора. А навигационная ссылка — это способ сохранить переход в виде текста: в письме, в HTML-поле, в реквизите.
Ссылка ведёт не только на карточку объекта. Через e1cib/command открывается команда — отчёт, обработка, общая команда:
Адрес = "e1cib/command/Отчет.ОстаткиТоваров.ФормаОбъекта.Форма";
ПерейтиПоНавигационнойСсылке(Адрес);
Точный синтаксис команды проще не собирать на глаз, а подсмотреть: откройте нужный отчёт или список руками, затем в главном меню выберите пункт получения ссылки на текущую форму и скопируйте готовый адрес. Платформа покажет ровно ту строку e1cib, которую потом можно вставлять в код или в письмо.
Для списка с заранее заданным отбором проще не конструировать адрес вручную, а открыть форму списка через ОткрытьФорму, передав в параметрах отбор. Так меньше шансов ошибиться в синтаксисе ссылки, а поведение будет тем же — пользователь увидит отфильтрованный список.
Форматированная строка: несколько ссылок в одном тексте
Когда в одной надписи нужно сделать кликабельными только отдельные слова, помогает ФорматированнаяСтрока. У неё в конструкторе есть параметр-гиперссылка:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Элементы.Декорация.Заголовок = Новый ФорматированнаяСтрока(
"Открыть ",
Новый ФорматированнаяСтрока("договор", , Новый Цвет(0, 0, 200), , "ОткрытьДоговор"));
КонецПроцедуры
Пятый параметр конструктора — значение ссылки. Это может быть произвольная строка-признак или готовый e1cib-адрес. Слово «договор» станет синим и кликабельным, остальной текст — обычным.
Клик по такому фрагменту вызывает у декорации событие ОбработкаНавигационнойСсылки, а не Нажатие. В обработчике вы разбираете, по какому именно фрагменту кликнули:
&НаКлиенте
Процедура ДекорацияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если НавигационнаяСсылкаФорматированнойСтроки = "ОткрытьДоговор" Тогда
ПоказатьЗначение(, Объект.Договор);
КонецЕсли;
КонецПроцедуры
Строку СтандартнаяОбработка = Ложь ставьте, только если сами открываете объект. Если оставить Истина, платформа попробует отработать ссылку своими силами и для произвольного признака вроде "ОткрытьДоговор" просто ничего не сделает.
Фрагментов в одной строке может быть сколько угодно — конструктор ФорматированнаяСтрока принимает их по порядку, и каждый кликабельный кусок несёт своё значение-признак:
Строка = Новый ФорматированнаяСтрока(
"Проверьте ",
Новый ФорматированнаяСтрока("контрагента", , , , "Контрагент"),
" и ",
Новый ФорматированнаяСтрока("договор", , , , "Договор"),
" по сделке.");
В обработчике ОбработкаНавигационнойСсылки вы по значению "Контрагент" или "Договор" понимаете, какой именно фрагмент нажали, и открываете нужный объект. Такой приём удобен в информационных панелях, подсказках и строках состояния, где из одного предложения ведут сразу два-три перехода.
Цвет и шрифт фрагмента задаются вторым-четвёртым параметрами конструктора. По умолчанию кликабельный текст и так выделяется — специально красить его в синий не обязательно, достаточно оставить параметры цвета пустыми.
Ссылки в поле HTML-документа
Если контент формируется как HTML (например, текст приходит из внешней системы или вы собираете его сами), выводите его в элемент «Поле HTML-документа». Внутри работают обычные теги:
<a href="https://example.com">Перейти на сайт</a>
<a href="e1cib/data/Документ.СчетНаОплату?ref=...">Открыть счёт</a>
Внешние http/https-ссылки платформа открывает в браузере по умолчанию. Ссылки e1cib открывают объект внутри 1С. Текст HTML кладётся в реквизит формы типа «Строка» и привязывается к полю.
Для печатных форм и отчётов механизм другой — там ссылок как таковых нет, но есть расшифровка. В макете или в коде назначаете ячейке объект:
Область = ТабДокумент.Область("R2C1");
Область.Расшифровка = Объект.Ссылка;
По двойному клику на такой ячейке платформа откроет исходный документ. Если нужно своё поведение — обрабатывайте событие ОбработкаРасшифровки у поля табличного документа: туда приходит значение расшифровки, и вы сами решаете, что открыть или рассчитать.
Расшифровкой может быть не только ссылка на объект, но и структура с данными — тогда по клику можно, например, развернуть детализацию отчёта или подставить значение в отбор. Это тот же принцип гиперссылки, только внутри печатного документа.
Поле HTML-документа удобно и для сбора тела письма: вы формируете HTML с ссылками и картинками, показываете пользователю для проверки, а затем отправляете тот же текст через механизм электронной почты. Главное — следить за кодировкой текста, иначе кириллица в письме превратится в «кракозябры».
Безопасность и поведение внешних ссылок
Переходы в 1С устроены так, что произвольный код по ссылке не выполнится: e1cib открывает только объекты и команды базы, а http/https отдаётся системному браузеру. Но пара мест требует внимания.
- 🛡️ HTML из ненадёжного источника. Если вы подставляете в поле HTML текст, пришедший от пользователя или из внешнего обмена, его нужно экранировать. Чужой HTML может содержать разметку, ломающую вёрстку формы.
- 🔐 Внешние адреса в защищённом режиме. В веб-клиенте и при включённом профиле безопасности переход на внешний сайт может быть ограничен настройками. Проверяйте на том окружении, где работают пользователи, а не только в конфигураторе.
- 🧷 Не храните в ссылках чувствительные данные. Навигационная ссылка на объект — это по сути его идентификатор; она откроется у любого, у кого есть права на этот объект. Прав на объект она не выдаёт, но и не скрывает, что объект существует.
Отдельно про клиент-серверный режим: ПерейтиПоНавигационнойСсылке и работа со ссылками-надписями выполняются на клиенте. Поэтому и обработчики помечаются &НаКлиенте — в серверном контексте этих методов нет.
Ещё один момент касается прав. По навигационной ссылке объект откроется только у того пользователя, у которого есть право на чтение этого объекта. Если прав нет, 1С покажет сообщение о нарушении прав доступа — сама ссылка их не повышает. Поэтому рассылать навигационные ссылки по базе безопасно: доступ по-прежнему решает система ролей, а не то, кому вы отправили адрес.
Для внешних адресов, которые пользователь может ввести сам (например, в поле «сайт контрагента»), стоит проверять, что строка действительно начинается с http:// или https://. Это отсекает случайный мусор и не даёт подставить в переход что-то кроме веб-адреса.
Типичные ошибки при создании ссылок
Три причины, по которым ссылка «не хочет» работать, встречаются чаще всего:
ref устарел. Получайте адрес через ПолучитьНавигационнуюСсылку, передавая саму ссылку на объект, а не её строковое представление.Ещё один частый промах — метод для серверного контекста. ПерейтиПоНавигационнойСсылке вызывается только на клиенте. Если обработчик помечен &НаСервере, код не скомпилируется.
И проверяйте тип ссылки. Для внешнего сайта нужен полный адрес с https://. Для объекта базы — строка e1cib. Если подставить одно вместо другого, переход либо уйдёт в браузер с мусорным адресом, либо не найдёт объект.
Частые вопросы
Можно ли сделать ссылку прямо в реквизите справочника, без формы?
Как открыть объект базы по ссылке из внешнего письма?
ПолучитьНавигационнуюСсылку. У получателя 1С должна быть открыта та же база — тогда клик откроет нужный объект. Для доступа с другого компьютера используйте опубликованную веб-версию.Чем «Нажатие» отличается от «ОбработкаНавигационнойСсылки»?
Нажатие срабатывает на клик по всей надписи-гиперссылке. ОбработкаНавигационнойСсылки срабатывает на клик по конкретному кликабельному фрагменту форматированной строки и передаёт в обработчик значение этого фрагмента.Почему ссылка работает в тонком клиенте, но не в веб-клиенте?
Как сделать кликабельным только одно слово в длинном тексте?
ФорматированнаяСтрока, у фрагмента задаётся значение-ссылка пятым параметром конструктора.