1С:Предприятие 8.3 (8.3.15.1778)
Business automation software for accounting, edition 2.1 (2.1.21.3)
Добрый день
Имеется обработка, которая выполняет рассылку писем клиентам.
Обработка запускается под обычным клиентом.
В отправляемом письме текст сообщения оформлен как ТипТекстаПочтовогоСообщения.ПростойТекст.
Сейчас возникла необходимость добавить в текст html-ссылку.
В принципе можно и в простой текст добавить гиперссылку, у меня это получилось.
Но сталкнулся с тем, что формируемая для конкретного клиента гиперссылка не всегда получается корректной.
К тому же хотелось бы, чтобы клиент в тексте письма видел "скрытую" ссылку, а не кучу символов абракадабры
Понимаю, что в этом случае надо оформить текст сообщения как ТипТекстаПочтовогоСообщения.HTML
и тогда используя нужные тэги вставить эту гиперссылку в текст.
У меня есть непонимание, каким образом необходимо оформить сам текст(какие html-тэги необходимы),
чтобы текст письма и ссылка корректно отображались в браузере.
Подскажите пожалуйста как это сделать или где посмотреть примеры.
Спасибо
kserg2012 @ Сегодня, 11:58
,
Вот здесь можно прочитать:
https://pro1c.org.ua/redirect.php?https://1cguide.ru/programmirovanie-1s/1s-html.html
1С 8.x : Формирование HTML-документа, содержащего ссылки на объекты базы данных
В данной статье рассматривается способ программного формирования HTML документа, содержащего ссылки на объекты базы данных 1С, такие как справочники, документы и т.д. Показан пример построения обработчика события OnClick ПоляHTMLДокумента, для обработки клика на html-ссылке.
Предисловие
Однажды, дописывая обработку, создающую и модифицирующую, не суть важно какие документы, я подумал, что неплохо было бы вывести для пользователя некое резюме:
“Создан документ такой-то”
“Изменен документ такой-то” и т.д.
От обычного, в таких случаях, вывода информации в окно сообщений я сразу отказался, так как не удобно это, сначала читать в окне сообщений “Создан документ … ” а потом запоминать его номер, открывать соответствующий журнал (или форму списка) и искать там этот документ. А если документов много и пользователь хочет посмотреть все документы?(или выборочно) Насколько это неудобно я убедился при отладке обработки …
То, что в форме есть элемент управления именуемый ПолеHTMLДокумента я конечно знал, но вот представилась возможность познакомиться с ним поближе. Было решено реестр обработанных документов выводить в виде html документа содержащего ссылки на эти самые документы, а по клику на ссылке открывать форму соответствующего документа. Здесь мне многие могут возразить: “А почему бы для этих целей не использовать обычный макет, выводимый в табличный документ, а для открытия документов использовать расшифровку? И чем Ваш способ лучше?” Отвечаю: Конечно можно использовать, и мой способ ничем не лучше. Он просто другой. Ведь у хорошего программиста для решения одной задачи должно быть в арсенале несколько инструментов.
Итак, перейдем от слов к делу, в рамках данной статьи рассмотрим следующую задачу: Сформировать html-документ, содержащий ссылки на элементы справочника номенклатура, по клику требуется открывать форму соответствующего элемента. Создаем новый отчет, его форму, на форме размещаем элемент управления ПолеHTMLДокумента.
Текст модуля формы:
Код 1C v 8.х
Процедура ДобавитьТекстHTML(ТекстHTML, Элемент);
// Ссылку будем формировать хитро:
// Предполагаем что символ "-" не входит в имена объектов метаданных,
// учавствующих в формировании html
// Тогда ссылка будет иметь следующий вид:
// Номенклатура-d341d377-b3b1-11dc-a100-0011d85708ff
// Передавать нашу ссылку будем через атрибут id
СсылкаНаЭлемент = Элемент.Метаданные().Имя+"-"
+Элемент.Ссылка.УникальныйИдентификатор();
ТекстHTML.ДобавитьСтроку("<A id=""" + СсылкаНаЭлемент + """ href= """
+ Элемент + """ >"+Элемент+"</A><BR>");
КонецПроцедуры
Процедура ДействияФормыСформировать(Кнопка)
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура");
ТекстHTML = Новый ТекстовыйДокумент;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДобавитьТекстHTML(ТекстHTML, Выборка.Ссылка);
КонецЦикла;
ЭлементыФормы.ПолеHTMLДокумента.УстановитьТекст(ТекстHTML.ПолучитьТекст());
КонецПроцедуры
// Функция получает элемент - <A> по данному элементу
// Производит поиск элемента <A> среди родительских элементов данного
//
// Параметры:
// Элемент - COMОбъект, элемент HTML документа,
// по которому нужно найти ссылку
//
// Возвращаемое значение:
// COMОбъект - если ссылка обнаружена, иначе - Неопределено
Функция НайтиСсылку(Элемент)
Врем = Элемент;
Пока Врем <> Неопределено Цикл
Если НРег(Врем.tagName) = "a" Тогда
Возврат Врем;
КонецЕсли;
Врем = Врем.parentElement;
КонецЦикла;
Возврат Неопределено;
КонецФункции // НайтиСсылку(Элемент)
Процедура ПолеHTMLДокументаonclick(Элемент, pEvtObj)
htmlElement = НайтиСсылку(pEvtObj.srcElement);
// Анализируем если произошло нажание не ссылку
Если htmlElement <> Неопределено Тогда
// Если у ссылки есть идентификатор
Если СокрЛП(htmlElement.id) <> "" Тогда
// Получаем адрес ссылки из атрибута id
СсылкаНаЭлемент = htmlElement.id;
Разделитель = Найти(СсылкаНаЭлемент,"-");
Если Разделитель > 0 Тогда
// Получаем тип элемента
ТипЭлемента = Лев(СсылкаНаЭлемент,Разделитель-1);
// Получаем УникальныйИдентификатор
ГУИД = Сред(СсылкаНаЭлемент,Разделитель+1);
Справочники[ТипЭлемента].ПолучитьСсылку(
Новый УникальныйИдентификатор(ГУИД)).ПолучитьФорму().Открыть();
КонецЕсли;
// Не отработали нажатие
pEvtObj.returnValue = Ложь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua