Получение ссылки из форматированной строки

05.06.20

Разработка - Универсальные функции

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

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

Есть в интернете куча примеров, как ее создавать.

Но я не нашел ни одной функции и ни одного примера как достать ссылку из уже имеющейся форматированной строки.

Зачем все это надо?

Мне надо в обычной форме (не управляемой) вывести гиперссылку и при нажатии на нее выполнить действие.

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

Если отображать эту форматированную строку в управляемой форме, то нет никаких проблем:

  1. добавляешь реквизит с типом ФорматированнаяСтрока
  2. на форму выводишь его в поле надписи
  3. вешаешься на событие ОбработкаНавигационнойСсылки
  4. в процедуру обработки события нужная ссылка передается в параметр НавигационнаяСсылкаФорматированнойСтроки

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

Ниже пример создания форматированной строки со ссылкой внутри и получение этой ссылки.

фСтр = Новый ФорматированнаяСтрока("Пример строки со ссылкой",,,,"www.infostart.ru");
сСсылка = "";
// преобразуем форматированную строку в обычную
вСтр = ЗначениеВСтрокуВнутр(фСтр);
// получаем: {"#",140b5ff4-37b1-4df5-b5ec-a0bfd2b94f8f,1,"<link www.infostart.ru>Пример строки со ссылкой</>"}
// вырезаем ссылку
поз = Найти(вСтр, "<link");
Если поз > 0 Тогда
    вСтр = Сред(вСтр, поз + 5);
    поз = Найти(вСтр, ">");
    Если поз > 0 Тогда
        сСсылка = СокрЛП(Лев(вСтр, поз - 1));
    КонецЕсли;
КонецЕсли;
Сообщить(сСсылка);

 

Вступайте в нашу телеграмм-группу Инфостарт

Ссылка ФорматированнаяСтрока

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    4825    Abysswalker    11    

47

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    9027    DeerCven    15    

63

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    57915    dimanich70    85    

175

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    8138    7    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    72664    atdonya    31    

73

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    10112    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. soft_wind 05.06.20 16:35 Сейчас в теме
попробуйте такой код, гораздо короче

фСтр = Новый ФорматированнаяСтрока("Пример строки со ссылкой",,,,"www.infostart.ru");
сСсылка = "";
// преобразуем форматированную строку в обычную
вСтр = ЗначениеВСтрокуВнутр(фСтр);
ЧастиСтр = СтрРазделить(вСтр,"<>");
сСсылка = Сред(ЧастиСтр[1], 6);
Сообщить(сСсылка);
inf012; tvssm; VZhulanov; +3 Ответить
2. GrandGCH 15.02.24 13:53 Сейчас в теме
Тоже возникла необходимость в таком, но способ от "soft_wind" выдал что-то вообще не похожее на правду, но у меня значение было не типа "www.*.*" (с ним тоже прокатит).
Т.к. с 8.3.23-й платформой ввели regex, то почему бы и нет

Движок сайта съедает некоторые символы, вместо "pink", пишите "link"

Функция ВернутьНавигационнуюСсылкуИзФорматированнойСтроки(ФорматированнаяСтрока) Экспорт
	
	СтрокаРезультат = "";
	//Ищем "<pink ", "любое количество символов", только одно вхождение "</>"
	ТегСсылки = СтрНайтиПоРегулярномуВыражению(ЗначениеВСтрокуВнутр(ФорматированнаяСтрока), "<pink\s.*?<\/>").Значение;
	Если СтрДлина(ТегСсылки) > 0 Тогда
		//Отрезаем "<pink", "пробел", ">", ищем любые "буквенные/числовые" символы несколько раз.
		//Вообще - там 2 совпадения, но 1С возвращает только первое, нас оно устраивает
		СтрокаРезультат = СтрНайтиПоРегулярномуВыражению(ТегСсылки, "[^<pink\s>][А-Яа-яA-Za-z0-9\s\.]+").Значение;
	КонецЕсли;
	
	Возврат СтрокаРезультат;
КонецФункции
Показать


P.s. Не знаток регулярок, но может можно оптимальнее
green_forest; +1 Ответить
Для отправки сообщения требуется регистрация/авторизация