Как реализовать открытие документов по гиперссылке из текстового поля в 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Способ 1: Использование Поля HTML-документа

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

Для начала проанализируем, как формируется сама ссылка. В платформе 1С используется специальный протокол e1cib для внутренних навигационных ссылок. Чтобы получить такую ссылку, мы используем функцию ПолучитьНавигационнуюСсылку(). Проанализируем пример кода для генерации HTML-строки со ссылкой:


// Пример формирования HTML-тега для ссылки на документ
Адрес = ПолучитьНавигационнуюСсылку(СсылкаНаОбъект);
СтрНадпись   = "Открыть документ " + СсылкаНаОбъект.Номер;
СтрТегHTML   = "a";
СтрАтрибутHTML = " href=""" + Адрес + """";

// Формируем результирующую строку через шаблон
СтрТекст = СтрШаблон("<%1%2>%3</%1>",
           СтрТегHTML,
           СтрАтрибутHTML,
           СтрНадпись);

// Полученный СтрТекст можно вставить в переменную, связанную с Полем HTML-документа

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


Процедура ПриНажатииТекстHTML(Элемент, ДанныеСобытия, СтандартнаяОбработка)
    Перем НавСсылка;
    
    // Отменяем стандартное поведение браузера
    СтандартнаяОбработка = Ложь;
    
    // Проверяем наличие структуры события
    Если ТипЗнч(ДанныеСобытия) <> Тип("ФиксированнаяСтруктура") Тогда
        Возврат;
    КонецЕсли;
    
    // Пытаемся получить адрес из атрибута href
    ДанныеСобытия.Свойство("href", НавСсылка);
    
    // Если в структуре нет, ищем в объекте события DOM
    Если Не ЗначениеЗаполнено(НавСсылка) Тогда
        Попытка
            НавСсылка = ДанныеСобытия.Event.srcElement.href;
        Исключение
            Возврат;
        КонецПопытки;
    КонецЕсли;
    
    // Проверяем, является ли ссылка внутренней навигационной ссылкой 1С
    ПозицияНачала = Найти(НавСсылка, "e1cib/");
    Если ПозицияНачала > 0 Тогда
        НавСсылка = Сред(НавСсылка, ПозицияНачала);
        // Выполняем переход
        ПерейтиПоНавигационнойСсылке(НавСсылка);
    КонецЕсли;
КонецПроцедуры

Способ 2: Объект ФорматированнаяСтрока

Если нам не нужны сложные визуальные эффекты HTML, а достаточно просто вывести текст со ссылками в управляемой форме, наиболее правильным и современным решением будет использование объекта ФорматированнаяСтрока. Этот объект позволяет объединять текст, картинки и ссылки в единую структуру, которую платформа отрисовывает нативно.

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


// Создаем массив для элементов форматированной строки
МассивЧастей = Новый Массив;
МассивЧастей.Добавить("Внимание! Посмотрите следующие документы: ");

// Добавляем ссылку на первый документ
Ссылка1 = ПолучитьНавигационнуюСсылку(ДокументСсылка1);
МассивЧастей.Добавить(Новый ФорматированнаяСтрока("Счет №1", , , , Ссылка1));

МассивЧастей.Добавить(" и ");

// Добавляем ссылку на второй документ
Ссылка2 = ПолучитьНавигационнуюСсылку(ДокументСсылка2);
МассивЧастей.Добавить(Новый ФорматированнаяСтрока("Приходная накладная №2", , , , Ссылка2));

// Итоговый объект
ОбъектФорматированнаяСтрока = Новый ФорматированнаяСтрока(МассивЧастей);

// Присваиваем реквизиту формы, который связан с декорацией типа "Надпись"
// Или выводим в поле, поддерживающее форматированные строки

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

Способ 3: Использование типа ФорматированныйДокумент

В некоторых случаях пользователю нужно не только видеть ссылки, но и иметь возможность редактировать текст, сохраняя при этом гиперссылки. Для этого идеально подходит реквизит с типом ФорматированныйДокумент. Разберем особенности работы с ним:

  1. На форме размещается поле, связанное с реквизитом типа ФорматированныйДокумент.
  2. Программно мы можем управлять содержимым через методы УстановитьHTML() или работая с элементами документа.
  3. Этот тип данных поддерживает полноценное форматирование: жирный шрифт, курсив, списки и, конечно, гиперссылки.

Проанализируем ситуацию: если нам нужно автоматически найти в тексте номера документов и превратить их в ссылки. Мы можем считать текст из ФорматированныйДокумент, обработать его и загрузить обратно уже с тегами <a>. Это позволяет реализовать функционал "умного" текстового редактора внутри системы. Для организации удобной визуальной правки такого текста подойдёт редактор форматированного текста WYSIWYG для управляемых форм.

Способ 4: Поле табличного документа

Хотя автор темы изначально искал текстовое решение, стоит рассмотреть вариант с табличным документом (ТабличныйДокумент), если ссылок очень много или они должны быть структурированы в виде таблицы. Посмотрим на этот подход под другим углом:

В ячейку табличного документа можно записать текст и установить свойство Гиперссылка в значение Истина. Также в свойство ТекстГиперссылки или в расшифровку ячейки можно поместить ссылку на документ. Плюс этого метода в том, что визуально табличный документ можно настроить так, что он будет неотличим от обычного списка ссылок на белом фоне, но при этом он обладает мощными инструментами форматирования ячеек.

Сравнение методов и рекомендации

Выясним, какой метод лучше выбрать в зависимости от ваших задач:

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

← На главную