Все способы сделать активную ссылку в 1С:Предприятии

· 9 мин

Содержание

Создать гиперссылку в 1С можно четырьмя способами: декорация-надпись с установленным свойством «Гиперссылка», навигационная ссылка на объект через функцию ПолучитьНавигационнуюСсылку, кликабельный фрагмент в форматированной строке и тег <a href> в поле HTML-документа. Какой выбрать — зависит от того, куда должна вести ссылка: на внешний сайт, на объект базы или на другую форму.

Ниже — все четыре механизма с рабочим кодом, событиями, которые при этом срабатывают, и разбором, почему ссылка иногда не нажимается. Всё под платформу 8.3 с интерфейсом «Такси».

Чем отличаются типы ссылок и когда какой нужен

В 1С нет единого «вставить ссылку». Есть несколько объектов платформы, каждый решает свою задачу:

  • 🔗 Декорация-надпись на управляемой форме — самый частый случай. Текст выглядит как ссылка и при клике запускает ваш обработчик.
  • 🧭 Навигационная ссылка (e1cib/...) — внутренний адрес объекта информационной базы. По ней открывается карточка справочника, документ, список или команда.
  • 🎨 Форматированная строка — когда в одном тексте нужно несколько кликабельных фрагментов с разным оформлением.
  • 🌐 Поле HTML-документа — если контент приходит как готовый HTML с тегами <a href>.

Отдельно стоит расшифровка в табличном документе — её используют в печатных формах и отчётах, чтобы по двойному клику открыть исходный объект.

Для перехода на внешний сайт достаточно декорации с обычным http/https-адресом. Для перехода на объект базы нужна именно навигационная ссылка, а не путь к объекту.

Ссылка-надпись на управляемой форме

Это рабочая лошадка. Открываете форму в конфигураторе, добавляете декорацию вида «Надпись» и включаете у неё свойство Гиперссылка. Текст сразу становится подчёркнутым и кликабельным.

Порядок действий:

  1. На форме в дереве элементов правой кнопкой → «Добавить» → Декорация-Надпись.
  2. В палитре свойств задайте Заголовок (видимый текст) и поставьте галочку Гиперссылка.
  3. В разделе «События» у свойства Нажатие нажмите лупу — платформа создаст обработчик в модуле формы.

В обработчике пишете, что делать по клику. Для внешнего адреса — ПерейтиПоНавигационнойСсылке:

&НаКлиенте
Процедура ОткрытьСайтНажатие(Элемент)
    ПерейтиПоНавигационнойСсылке("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://. Это отсекает случайный мусор и не даёт подставить в переход что-то кроме веб-адреса.

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

Три причины, по которым ссылка «не хочет» работать, встречаются чаще всего:

Диагностика: выберите симптом

Ещё один частый промах — метод для серверного контекста. ПерейтиПоНавигационнойСсылке вызывается только на клиенте. Если обработчик помечен &НаСервере, код не скомпилируется.

И проверяйте тип ссылки. Для внешнего сайта нужен полный адрес с https://. Для объекта базы — строка e1cib. Если подставить одно вместо другого, переход либо уйдёт в браузер с мусорным адресом, либо не найдёт объект.

Частые вопросы

Можно ли сделать ссылку прямо в реквизите справочника, без формы?
Сам реквизит хранит только значение. Кликабельной ссылкой его делает элемент формы: поле с ссылочным типом открывает объект автоматически, а строку-адрес выводят через декорацию с включённым свойством «Гиперссылка».
Как открыть объект базы по ссылке из внешнего письма?
Вставьте в письмо навигационную ссылку, полученную через ПолучитьНавигационнуюСсылку. У получателя 1С должна быть открыта та же база — тогда клик откроет нужный объект. Для доступа с другого компьютера используйте опубликованную веб-версию.
Чем «Нажатие» отличается от «ОбработкаНавигационнойСсылки»?
Нажатие срабатывает на клик по всей надписи-гиперссылке. ОбработкаНавигационнойСсылки срабатывает на клик по конкретному кликабельному фрагменту форматированной строки и передаёт в обработчик значение этого фрагмента.
Почему ссылка работает в тонком клиенте, но не в веб-клиенте?
Чаще всего мешают настройки безопасности браузера или профиль безопасности базы, ограничивающий внешние адреса. Проверьте, разрешён ли переход на внешние ресурсы в том окружении, где работают пользователи.
Как сделать кликабельным только одно слово в длинном тексте?
Через форматированную строку: обычный текст и кликабельный фрагмент собираются в один ФорматированнаяСтрока, у фрагмента задаётся значение-ссылка пятым параметром конструктора.