Ссылки в 1С: от кликабельной надписи на форме до перехода по URL из кода

· 9 мин

Содержание

Словом «ссылка» в 1С называют три разные вещи, и от того, какую вы имеете в виду, зависит способ. Кликабельная гиперссылка на форме — это декорация типа «Надпись» со свойством Гиперссылка и обработчиком события Нажатие. Переход по адресу из кода — метод ПерейтиПоНавигационнойСсылке(Адрес). Ссылка на объект самой базы — это внутренний тип данных (СправочникСсылка, ДокументСсылка), а не URL.

Чаще всего под «сделать ссылку в 1С» понимают первое: вывести на форму или в печатный документ текст, по которому можно кликнуть и перейти на сайт или открыть объект базы. Ниже — рабочие способы с примерами кода на встроенном языке платформы 8.3 (интерфейс «Такси»): гиперссылка на управляемой форме, навигационная ссылка на объект, ссылка в табличном документе, формирование URL с параметрами для внешнего сервиса и правила безопасности.

Какая ссылка вам нужна?

Три разных смысла слова «ссылка»

Прежде чем писать код, определитесь, что именно нужно. Иначе легко искать свойство гиперссылки там, где речь про ссылку-тип.

Что имеют в видуЧто это техническиЧем «делается»
Гиперссылка, URLАдрес внешнего ресурса (http, https, mailto)Свойство Гиперссылка элемента + переход по адресу
Навигационная ссылкаВнутренний адрес объекта или формы базы (e1cib/...)ПолучитьНавигационнуюСсылку, ПерейтиПоНавигационнойСсылке
Ссылка на объектТип данных: указатель на запись базыРеквизит Ссылка объекта, Объект.Ссылка

Третий случай — это не URL. СправочникСсылка.Номенклатура или ДокументСсылка.РеализацияТоваровУслуг — это значение, которое хранит, на какую запись базы указывает поле. Такую «ссылку» вы получаете в коде как Объект.Ссылка и используете в запросах и реквизитах. Сделать из неё кликабельный адрес помогает как раз навигационная ссылка — о ней ниже.

Кликабельная гиперссылка на управляемой форме

Самый частый запрос — вывести на форму текст-ссылку. Делается декорацией.

  1. В конфигураторе откройте форму, на закладке «Элементы» добавьте декорацию вида «Надпись».
  2. В её свойствах задайте Заголовок (видимый текст) и установите флаг Гиперссылка.
  3. Для события Нажатие создайте обработчик — платформа предложит процедуру &НаКлиенте.

В обработчике открываем нужный адрес:

&НаКлиенте
Процедура СсылкаНаСайтНажатие(Элемент)
    ПерейтиПоНавигационнойСсылке("https://example.ru/docs");
КонецПроцедуры

Метод ПерейтиПоНавигационнойСсылке — клиентский. Он сам понимает тип адреса: внешний URL откроет в браузере по умолчанию, внутренний e1cib — внутри 1С. Так же открываются адреса mailto: (новое письмо в почтовом клиенте) и tel: (набор номера) — для них отдельного кода не нужно, достаточно правильно собранной строки, например "mailto:" + АдресПочты.

Текст ссылки можно собрать динамически. Заголовок декорации меняют на клиенте или при открытии формы:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Элементы.СсылкаНаСайт.Заголовок = "Открыть договор " + Объект.Номер;
КонецПроцедуры

В динамических списках и таблицах поля-ссылки на объекты база делает кликабельными сама: двойной клик открывает карточку. Отдельную гиперссылку для этого добавлять не нужно.

Несколько ссылок в одном тексте

Когда ссылок несколько и они внутри абзаца, одна декорация-надпись не подойдёт. Здесь берут форматированную строку: в неё встраивают кликабельные фрагменты, а переход ловят в событии ОбработкаНавигационнойСсылки.

&НаКлиенте
Процедура ОписаниеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка);
КонецПроцедуры

Параметр НавигационнаяСсылка — это адрес того фрагмента, по которому кликнули. Так в одном поле уживаются ссылки на сайт, на объект базы и на почту: каждая ведёт в своё место, а обработчик один.

Навигационные ссылки на объекты базы (e1cib)

Чтобы ссылка открывала конкретный документ или элемент справочника, нужен её внутренний адрес. Его возвращает ПолучитьНавигационнуюСсылку:

АдресОбъекта = ПолучитьНавигационнуюСсылку(Объект.Ссылка);

Результат выглядит примерно так: e1cib/data/Документ.РеализацияТоваровУслуг?ref=8a1c.... Это и есть ссылка на запись базы. Её можно подставить в декорацию-гиперссылку, записать в примечание задачи или вставить в текст письма.

Начало адреса подсказывает, на что ведёт ссылка:

  • e1cib/data/... — на объект: документ, элемент справочника, запись регистра.
  • e1cib/command/... — на команду: открыть форму списка, отчёт, обработку.
  • e1cib/app/... — на раздел или начальную страницу приложения.

Руками эти адреса не собирают — их возвращает платформа. Но по первому сегменту удобно понять, что сохранилось в поле, если ссылка пришла из обмена или лога.

Ссылку на саму информационную базу (стартовую страницу) даёт отдельный метод без параметров:

АдресБазы = ПолучитьНавигационнуюСсылкуИнформационнойБазы();

Открыть объект по сохранённому адресу — тем же клиентским методом:

&НаКлиенте
Процедура ОткрытьДокументНажатие(Элемент)
    ПерейтиПоНавигационнойСсылке(АдресОбъекта);
КонецПроцедуры

Адрес e1cib работает только внутри клиента 1С или в опубликованной на веб-сервере базе. Если базу опубликовали через веб-сервер, внешняя ссылка собирается из адреса публикации и внутреннего адреса через символ #: https://host/base/#e1cib/data/.... Такую ссылку уже можно открыть в браузере — он запустит веб-клиент и покажет объект.

Ссылки и расшифровка в табличных документах

В отчётах и печатных формах за переходы отвечает механизм расшифровки. У области ячеек табличного документа есть свойство Расшифровка — в него кладут значение, по которому делают переход, и свойство Гиперссылка.

При формировании макета в коде это выглядит так:

Область = ТабДок.Область("СтрокаСсылки");
Область.Текст        = "Открыть заказ";
Область.Расшифровка  = Объект.Ссылка;
Область.Гиперссылка  = Истина;

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

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

Если в расшифровке лежит не строка-URL, а ссылка на объект, платформа по двойному клику откроет его карточку — стандартную обработку в этом случае отключать не нужно.

Гиперссылка в табличном документе живёт только на экране. При печати на бумагу она превращается в обычный текст — кликать будет не по чему. Для бумажных форм вместо ссылки печатают сам адрес или QR-код.

Ссылки с параметрами для обмена с внешним сервисом

Когда ссылка ведёт во внешний сервис (платёжный, картографический, API), к адресу добавляют параметры. Главная ошибка здесь — кириллица и пробелы в параметрах: без кодирования адрес «ломается». Кодируют каждое значение отдельно методом КодироватьСтроку:

Город = КодироватьСтроку("Нижний Новгород",
    СпособКодированияСтроки.URLВКодировкеURL);
Адрес = "https://example.ru/search?city=" + Город;

Дальше возможны два сценария. Если нужно просто открыть сервис в браузере — передайте готовый адрес в ПерейтиПоНавигационнойСсылке. Если нужно получить от сервиса данные без открытия окна — отправьте HTTP-запрос:

Защита   = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение("example.ru", , , , , , Защита);
Запрос   = Новый HTTPЗапрос("/api/v1/search?city=" + Город);
Ответ    = Соединение.Получить(Запрос);
ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();

Для адреса https://... соединению обязательно передаётся объект защищённого соединения — иначе будет ошибка. Код HTTP-ответа проверяйте по Ответ.КодСостояния: 200 — успех, 4xx/5xx — разбирайте причину.

Когда параметров несколько, кодируют каждое значение, а потом собирают строку запроса:

Параметры = "city=" + КодироватьСтроку(Город, СпособКодированияСтроки.URLВКодировкеURL)
    + "&date=" + Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd");
Запрос = Новый HTTPЗапрос("/api/v1/search?" + Параметры);

Если сервис принимает данные методом POST, тело запроса кладут в HTTPЗапрос и вызывают ОтправитьДляОбработки, а не Получить. Обратную операцию — разбор пришедшего адреса с кодированными символами — делает РаскодироватьСтроку с тем же способом URLВКодировкеURL.

Безопасность: не открывайте чужие ссылки вслепую

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

Минимум, что стоит проверять перед ПерейтиПоНавигационнойСсылке:

  • ✅ Схема адреса — разрешайте только http, https и при необходимости mailto. Отсекайте file, javascript и прочие.
  • ✅ Источник — ссылку из внешнего источника показывайте пользователю целиком, чтобы он видел, куда переходит, а не прятали за словом «тут».
  • ✅ Реакцию веб-клиента — в браузере переход по ссылке срабатывает в ответ на действие пользователя (клик). Открыть окно «само» из фонового кода браузер заблокирует.

Для перехода по внешним адресам из кода не отключайте предупреждения платформы «по умолчанию». Они защищают пользователя от перехода на сторонний ресурс без его ведома.

QR-коды и короткие ссылки

Печатать длинный URL на бумаге неудобно — вместо него ставят QR-код. В самой платформе отдельного объекта для генерации QR нет. Рабочих пути два:

  1. Штрихкодирование из БСП. В типовых конфигурациях на Библиотеке стандартных подсистем есть механизм печати штрихкодов, который умеет QR. Он использует внешнюю компоненту штрихкодирования — её устанавливают один раз. Готовую картинку вставляют в макет печатной формы как рисунок.
  2. Внешний сервис генерации. Отправьте HTTP-запрос в сервис, который возвращает картинку QR по переданному URL, и поместите полученное изображение в макет. Способ не требует компоненты, но нужен доступ в интернет с сервера.

Короткие ссылки делают так же — через HTTP к сервису-сокращателю: передаёте длинный адрес, получаете короткий и печатаете его. Внутри базы по-прежнему хранится полный адрес или навигационная ссылка e1cib.

Для бумажного документа у QR есть практическое преимущество перед короткой ссылкой: его не нужно набирать руками. Клиент наводит камеру телефона — и переходит на оплату, карту проезда или страницу заказа. Поэтому в счетах и накладных чаще печатают именно QR, а короткую ссылку оставляют для писем и мессенджеров, где её можно нажать.

Внешние сервисы QR и сокращения ссылок обрабатывают передаваемый адрес на своей стороне. Не передавайте в них ссылки с токенами доступа или персональными данными в параметрах.

Частые ошибки при работе со ссылками

Четыре ошибки, на которых чаще всего спотыкаются:

  • ПерейтиПоНавигационнойСсылке вызван на сервере. Метод клиентский. В серверной процедуре его нет — переход выполняют в процедуре с директивой &НаКлиенте.
  • Кириллица в параметрах без кодирования. Адрес с русским текстом или пробелами в параметрах сервис не разберёт. Каждое значение прогоняйте через КодироватьСтроку со способом URLВКодировкеURL.
  • Ссылку e1cib отправили по почте как есть. В обычном браузере или почтовом клиенте она не откроется. Для внешнего перехода нужна ссылка через публикацию базы (https://host/base/#e1cib/...).
  • Гиперссылку на форме сделали, а обработчик Нажатие не назначили. Флаг Гиперссылка только красит текст. Переход выполняет код в обработчике события — без него клик по надписи ничего не делает.

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

Чем навигационная ссылка отличается от обычной гиперссылки?
Гиперссылка — это внешний URL (http, https), он открывается в браузере. Навигационная ссылка (e1cib/...) ведёт на объект или форму внутри базы и открывается клиентом 1С. Оба адреса открывают одним методом — ПерейтиПоНавигационнойСсылке, он сам различает тип.
Откроется ли ссылка `e1cib`, если отправить её коллеге?
Только если у коллеги запущен тот же клиент 1С и подключена та же база, либо база опубликована на веб-сервере и вы дали полную ссылку вида https://host/base/#e1cib/.... «Голый» адрес e1cib/data/... вне 1С не работает.
Как сделать ссылку на конкретный документ, чтобы открыть его из письма?
Получите навигационную ссылку методом ПолучитьНавигационнуюСсылку(Документ.Ссылка), а для внешней отправки соберите полный адрес через публикацию базы. Вставьте его в текст письма — по клику откроется именно этот документ.
Почему переход по ссылке не срабатывает в веб-клиенте?
Браузер открывает новое окно только в ответ на действие пользователя. Если ПерейтиПоНавигационнойСсылке вызывается из фонового кода без клика, браузер блокирует окно как всплывающее. Привяжите переход к нажатию элемента.
Можно ли сделать в печатной форме ссылку, которая откроет сайт?
На экране — да, через свойство Гиперссылка области и обработку расшифровки. На бумаге ссылка не кликается: там печатают сам адрес текстом или QR-код со ссылкой.