1с письмо в html формате
В статье на примере будут описаны все этапы создания поля html документа. В 1с html поле позволяет представить данные, которые не требуется редактировать, в более эстетичном виде. Разработчик может применить возможности html для создания и настройки формы справочника или бизнес-процесса (как делается в конфигурации Документооборот).
Рассмотрим пример. Разработаем обработку, которая будет представлять элемент справочника Пользователи в виде поля html документа. Для разработки примера я использовал демо БСП 3.1 (управляемое приложение).
Выведем в документ следующие поля справочника:
- Наименование и Комментарий в виде текста;
- ФизическоеЛицо и Подразделение в виде ссылок;
- Фотографию пользователя;
- Контактную информацию в виде таблицы.
Размещение реквизитов на форме
Для начала создадим внешнюю обработку и добавим форму. На форме создадим два реквизита Пользователь (тип СправочникСсылка.Пользователи) и ПредставлениеHTML (тип Строка неограниченной длины). Перетащим реквизиты в дерево элементов. Для элемента ПредставлениеHTML выберем вид Поле HTML документа и отключим отображение заголовка. Должно получится так:
Теперь поработаем над программной частью формы:
- Заполнять html поле данными будем при изменении пользователя. Поэтому создадим для него обработчик события ПриИзменении;
- Работа же с самим полем потребует перехода на сервер, так как нам необходимо выполнять запрос и получать данные из хранилища значений. Поэтому для заполнения данных html создадим функцию ЗаполнитьHTMLПредставление с директивой НаСервереБезКонтекста. В качестве параметра передадим в нее ссылку на пользователя;
В итоге должно получиться следующее:
Получение данных
Во входные параметры функции ЗаполнитьHTMLПредставление мы передаем только ссылку на пользователя, поэтому для начала надо собрать все данные, необходимые для вывода в html документ. Для этого воспользуемся запросом, который вынесем в отдельную процедуру. Приводить текст процедуры здесь я не буду, чтобы не занимать много места. Ознакомиться с ним можно во внешней обработке, ссылка на которую находится внизу статьи.
Заполнение стилей 1с html поля
Теперь в функции ЗаполнитьHTMLПредставление будем описывать html документ. Начнем с обязательных тегов <html> и <head>. После чего перейдем к заполнению стилей (тег <style>), которые будут применяться во всем документе, а также в отдельных его блоках.
Рассмотрим заполнение стилей более подробно:
Создание тела html документа в 1с 8
После описания стилей займемся формированием тела документа. Для этого используем тег <body>.
Вывод изображения в html
Начнем с вывода фотографии пользователя. В элементе справочника она хранится в реквизите Фотография, в виде хранилища значения. Его мы получили вместе с остальными данными пользователя, при помощи запроса.
Разберем представленный код:
- Хранилище содержит двоичные данные изображения, их необходимо получить. Используем для этого метод Получить(), который распаковывает данные хранилища;
- В html мы можем вывести изображение либо указав ссылку на него, либо использовав его двоичные данные, в кодировке base64. Для этого используем метод Base64Строка;
- После подготовки данных, можно выводить их в документ.
- Используем тег <img>, применяемый для вывода изображений;
- Атрибут src указывает адрес выводимого изображения или его данные. У нас это двоичные данные, поэтому в дополнение к ним необходимо использовать префикс data:image/ и указание типа данных base64.
Для того чтобы отделить изображение от следующей информации, используем тег <p>. Он означает начало нового абзаца. При описании стилей мы указали, что перед началом нового абзаца устанавливается отступ в 10 пикселей.
Вывод текстового реквизита в html
После фотографии выведем основные данные пользователя в следующем формате:
Начнем с имени пользователя:
Разберем представленный код:
- Для того, чтобы имя реквизита не сливалось с его содержанием, выделим его другим цветом. Для этого используем свойство <font>, позволяющее изменять характеристики текста. В нашем случае это цвет color.
- После вывода данных используем тег <br>. Он предназначен для перехода на следующую строку.
Вывод ссылки в html
Теперь выведем в документ физлицо пользователя. Так как оно представлено ссылочным типом, оформим его в виде ссылки.
Разберем представленный код:
- Для создания ссылок используется тег <a>. Его атрибут href задает адрес ссылки. Для удобства работы создадим шаблон для вывода навигационной ссылки на физлицо. В параметр %1 будем выводить ссылку, а в параметр %2 текст ссылки;
- Для получения навигационной ссылки используем метод ПолучитьНавигационнуюСсылку(<Ссылка>);
- Заполним параметры шаблона, используя строковую функцию СтрШаблон;
Далее нам необходимо будет вывести еще один текстовый реквизит и еще один ссылочный. Для того чтобы не дублировать код вынесем добавление реквизита в html в отдельную, универсальную процедуру.
Вывод всех реквизитов будет выглядеть следующим образом:
Вывод таблицы в html 1с
Осталось вывести таблицу контактной информации пользователя. Это делается довольно просто.
- Для вывода таблицы используется тег <table>;
- Для вывода строки таблицы тег <tr>;
- Тег <td> отвечает за вывод ячейки;
- Для вывода ячейки заголовка используется тег <th>.
На этом формирование поля html документа в 1с завершено. Осталось только закрыть теги и вернуть сформированный текст.
В итоге у нас получается html поле, заполненное следующим образом:
Обработка нажатия на ссылку
В обработчике мы анализируем текст ссылки, на которую произошло нажатие. Если это навигационная ссылка, обрабатываем ее по отдельному алгоритму. Получаем текст и осуществляем переход. Таким образом при нажатии на ссылку, у нас произойдет переход на форму элемента справочника.
1С Предприятие на данный момент умеет взаимодействовать с разными программными продуктами и в силу этих обстоятельств программисту 1С приходится разбираться в различных языках. Сейчас любой уважающий себя программист должен уметь сформировать и прочитать файл Excel или Word из 1С, должен уметь работать с файлами Open Office, что куда интереснее. Но этими навыками уже никого не удивишь. А как насчет взаимодействия с html? Конечно нечасто программисту 1С приходится писать сайты, но задачи, связанные с html, попадаются и много времени уходит на то, чтобы разобраться. Данная статья поможет вам сэкономить это время.
Наверняка многим доводилось писать простые сайты, вставлять туда картинки и все это делать с помощью html-редактора. В 90-х можно было рисовать дурацкие сайты и считаться крутым дизайнером-программистом, и еще умудряться продавать эти сайты неискушенным бизнесменам. На данный момент все сильно изменилось и требования к страницам стали куда серьезнее, поэтому знаний html на вышеописанном уровне недостаточно. Тем более, что сейчас все уважающие себя компании используют правильно оформленные рассылки с красивым и удобным дизайном, и будет просто стыдно выделиться на этом фоне в негативном свете. В этой статье мы расскажем, как сделать e-mail рассылку средствами 1С так, чтобы минимум времени потратить на поиски информации и получить хороший результат.
Все начинается с поиска макета для рассылки. Раз рассылкой занимается программист 1С, это значит, заказчик экономит. Соответственно макет должен быть бесплатным. Макет должен быть правильно написан. В связи с большим разнообразием почтовых клиентов, браузеров и устройств важно, чтобы везде макет отображался одинаково и без искажений. Вот несколько надежных правил для поиска, следуя которым вы не прогадаете:
- Нужно искать макеты, в которых структура страницы формируется таблицами, причем без использования блоков DIV, так как поддержка блочных элементов реализована далеко не во всех почтовых клиентах.
- Структура письма должна быть построена на таблице с шириной 100% и выравниванием по центру, внутри которой будет находиться основное содержание письма. Также необходимо избегать большой вложенности таблиц.
- Макет не должен быть сложным. Не следует пичкать макет большим количеством таблиц и изображений. Лучше увидеть на экране простой макет, который отображается правильно, чем груду картинок и таблиц, наезжающих и перекрывающих друг друга.
- В дополнение к предыдущему пункту: часто почтовые клиенты по умолчанию загружают страницу без картинок, поэтому макет должен быть читаемым в любых условиях, а если письмо состоит из одних картинок, то мы можем получить рамки от этих картинок.
- Также, в силу развития мобильных технологий, желательно, чтобы он умел адаптироваться под разные размеры экранов. В поиске следует искать «Адаптивные макетыhtmlдляe-mailпочты»
- Стиль css не должен быть отдельным файлом, так как почтовые клиенты просто игнорируют ссылки на стили в коде html. Большинство макетов используют внешние стили, но, к счастью, стиль css несложно указать в теле письма. Это делается заменой строки
<link rel="stylesheet" type="text/css" href="stylesheets/email.css" >
…текст файла css…
- Для тегов также не нужно использовать внешние стили, необходимо указывать стили в строке
Стили не должны быть сокращенными. Неправильно: «border: solid 1px grey;». Правильно: «border-style:solid; border-width:1px; border-color:grey;».
- Необходимо использовать наиболее распространенные стили из перечисленных ниже:
Если у вас нет строгих требований, то вы можете сэкономить время на поисках и использовать его. Также при выборе макета помните, что макет редактируется. Можно изменить цвета, изображения, пропорции таблиц на свой вкус.
Дизайном должен заниматься дизайнер. Это непреложное правило и не дай Бог его нарушить. Человек с более-менее посредственным чувством визуального вкуса получит негативное первое впечатление о вашей рассылке. А в силу глубокой неосознанности происходящего в своем сознании и нежелания признавать себя хоть в чем-то неправым (это и есть эффект первого впечатления, который работает во всех сферах), человек, не успев понять, о чем письмо, будет бессознательно считать его неинтересным, а если он не испытывает особой нужды в предлагаемом продукте или услуге, то письмо, ничтоже сумняшеся, будет закрыто.
Но еще большим злом будет использование скаченных из интернета шаблонов в их общеизвестном виде. Тут из двух зол нужно выбрать меньшее: дизайн. И в этом могут помочь некоторые полезные инструменты.
Также можно воспользоваться приемом любого дизайнера: поискать вдохновение оформления на просторах интернета. Никто же не запретит вам слизать удачные примеры. Но это тема бесконечная и тут можно заморачиваться долго, главное — не переборщить. И уж точно тут лучше оставить черный текст на белом фоне с одной картинкой, чем невпопад напичкать макет переизбытком всего, чего можно.
Информацию можно добавлять нехитрыми %ПеременнымиВПроцентах%, подставлять в переменную можно необязательно текст и цифры, это также может быть html-код. Например, в html-макете может храниться вот такой код:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
%ПеременнаяВПроцентах%
А вместо %ПеременнаяВПроцентах% мы можем подставлять необходимое количество раз:
<table align="center" cellpadding="0" cellspacing="0" border="0">
<div style="height:15px"> </div><!-- Это разделитель между блоками -->
Также мы можем использовать вместо простого текста картинку:
<img src="https://erpdev.ru/blog/zametki_o_razrabotke_rassylki_pisem_v_1s/%25%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B0%D0%9D%D0%B0%D0%98%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5%25" alt="" border="0" style="display: block; border-radius: 0px;" />
Рекомендуем смело экспериментировать с параметрами в style="…". Например, параметром border-radius можно «скруглить» углы изображения.
К примеру, для того, чтобы разместить изображение и текст горизонтально, необходимо использовать таблицы:
<table align="center" cellpadding="0" cellspacing="0" border="0">
<table align="center" width cellpadding="0" cellspacing="0" border="0">
<table align="center" width cellpadding="0" cellspacing="0" border="0">
<div style="height:15px"> </div><!-- Это разделитель между блоками -->
Ну и последнее, что можно сказать по поводу оформления макета — это использование тегов для выделения текста:
Макет можно хранить как на диске, так и в конфигурации. Если макет будет лежать на диске, то необходимо проследить, чтобы путь к макету был доступен с сервера, и чтобы пользователи не могли случайно его удалить, переместить, изменить и т.п. Если вы не доверяете подобным решениям и ваша рассылка не будет изменяться, то макет вполне можно хранит в конфигурации, например, в общих макетах. Для этого необходимо при создании макета выбрать тип «HTML документ», и скопировать туда код страницы во вкладку «Текст».
Первый, самый простой, – отправлять письмо на ящик почты, с которого производится отправка, а на самом ящике настроить правило обработки почты таким образом, чтобы если адрес «от кого» совпадает с адресом этой почты, то помечать письмо прочитанным и перемещать в папку «Отправленные».
Второй способ — программный. Тут нужно использовать протокол IMAP, который позволяет работать с папками на почте. Для этого необходимо подключаться к почте по этому протоколу:
Ну и на всякий случай упомянем, что если вы хотите отправлять отдельное письмо каждому вашему клиенту (например, для того, чтобы указать в этом письме индивидуальный подарочный код, принадлежащий конкретному человеку), то адрес письма необходимо указать не в слепых копиях, а в получателях, и циклом перебирать список получателей и на каждого отправлять отдельное письмо.
А если вы хотите отправлять одно письмо на всех, то в «получателе» необходимо указать адрес вашей компании. Его будут видеть все, кто получит рассылку. А адреса клиентов необходимо указывать в слепых копиях для того, чтобы получатели не могли видеть адреса друг друга. Так как список адресов в слепых копиях вы не сможете увидеть, то его лучше записать в журнал регистрации или в отдельный регистр сведений.
(код найден на просторах интернета)
Если ЦиклПоСтроке(EMailСтрока,ПравильныеСимволы,0) Тогда // определяем тип адреса
КорректныйEmail = ЦиклПоСтроке(EMailСтрока,ПравильныеСимволы,1); // проверка латиница
КорректныйEmail = ЦиклПоСтроке(EMailСтрока,ПравильныеСимволыКирилица+ЦифрыСимволы+ОбъязательныеСимволы,0); // проверка кирилица
Если КорректныйEmail Тогда
КорректныйEmail = ЦиклПоСтроке(ОбъязательныеСимволы,EMailСтрока,2); // проверка на объязательные спецсимволы
Если КорректныйEmail Тогда // проверка на объязательные спецсимволы, количество "@" не должно быть больше 1-й
Если СтрЧислоВхождений(EMailСтрока,"@") > 1 Тогда
Ом.СообщитьПользователю("Электронный почтовый адрес не может содержать "+СтрЧислоВхождений(EMailСтрока,"@")+" символа ""@"".");
Если КорректныйEmail Тогда
Если НайтиСобаку > 0 Тогда
КорректныйEmail = ЦиклПоСтроке(ЗапрещенныеСимволы,Сред(EMailСтрока, НайтиСобаку-1,1),5); // проверка корректных символов до @
Если КорректныйEmail Тогда
КорректныйEmail = ЦиклПоСтроке(ЗапрещенныеСимволы,Сред(EMailСтрока, НайтиСобаку+1,1),4); // проверка корректных символов после @
Если КорректныйEmail Тогда
КорректныйEmail = ЦиклПоСтроке(ЗапрещенныеСимволы,Лев(EMailСтрока,1),6); // проверка первого символова
Если КорректныйEmail Тогда
Для Сч = 1 по СтрДлина(ЗапрещенныеСимволы) Цикл // проверка на задвоение
ТекСимв = Сред(ЗапрещенныеСимволы, Сч, 1);
Если Найти(EMailСтрока,ДваСимвола) Тогда
Ом.СообщитьПользователю("Электронный почтовый адрес не может содержать """+ДваСимвола+""" символ(а).");
Если КорректныйEmail Тогда
Если Найти(EMailСтрока,"._") Тогда
Если Найти(EMailСтрока,".-") Тогда
Если Найти(EMailСтрока,"-.") Тогда
Если Найти(EMailСтрока,"-.") Тогда
Если НЕ ПустаяСтрока(СимволОшибки) Тогда
Ом.СообщитьПользователю("Электронный почтовый адрес не может содержать """+СимволОшибки+""" символ.");
Если КорректныйEmail Тогда
Для Сч = 1 по СтрДлина(EMailСтрока) Цикл // получаем доменное имя
ТекСимв = Сред(EMailСтрока, Сч, 1);
Если ТекСимв = "." Тогда
Если НайтиТочку = ЧислоВхождений Тогда
Если ПустаяСтрока(ДоменноеИмя) Тогда
Ом.СообщитьПользователю("Не удалось получить доменное имя электронного адреса.");
КорректныйEmail = ЦиклПоСтроке(ДоменноеИмя,?(АдресКирилица,"рф",ПравильныеСимволыЛатиница),3); // проверка доменного имени
Если КорректныйEmail И АдресКирилица Тогда
Если Найти(ДоменноеИмя,"рф") > 0 Тогда
КорректныйEmail = СтрДлина(ДоменноеИмя) = 2;
Для Сч = 1 по СтрДлина(СтрокаЦикла) Цикл
ТекСимв = Сред(СтрокаЦикла, Сч, 1);
Если ТипПроверки <= 3 Тогда
Если Найти(СимволыПроверки, ТекСимв) = 0 Тогда
Если ТипПроверки > 0 Тогда
Если Найти(СимволыПроверки, ТекСимв) <> 0 Тогда
Если ТипПроверки > 0 Тогда
Если Тип = 1 Тогда
ТекстОшбки = "Не корректный символ";
ИначеЕсли Тип = 2 Тогда
ТекстОшбки = "Не обнаружен объязательный символ";
ИначеЕсли Тип = 3 Тогда
ТекстОшбки = "Не корректно указано доменное имя, не корректный символ";
ИначеЕсли Тип = 4 Тогда
ТекстОшбки = "Электронный почтовый адрес не может содержать """+ОшибочныйСимвол+""" после символа ""@""";
ИначеЕсли Тип = 5 Тогда
ТекстОшбки = "Электронный почтовый адрес не может содержать """+ОшибочныйСимвол+""" до символа ""@""";
ИначеЕсли Тип = 6 Тогда
ТекстОшбки = "Электронный почтовый адрес не может начинатся с символа """+ОшибочныйСимвол+"""";
Сообщить(""+ТекстОшбки+" "+?(Тип < 4,""""+ОшибочныйСимвол+""".","."));
Другой момент ― это частота рассылки. Можно решить, что чем чаще рассылка, тем больше продажи и тем лучше, но здесь все не так просто, равно как и со слишком редкой рассылкой. Слава Богу, в интернете достаточно информации об исследованиях на эту тему, которая позволит найти золотую середину.
В целом, удобно было бы сделать рассылку отдельным документом, который в движениях может сохранять адреса отправки, тему рассылки и т.п. А текст рассылки сделать в табличной части ― таким образом мы сможем контролировать число блоков в письме и их содержание (текст, изображение или текст с изображением). Также в документе можно сделать вкладку с полем html-документа для просмотра рассылки.
Добрый вечер! Встала задача получить письмо. Письмо я получил а вот текст письма выдает в HTML формате, может есть другой способ получить текст письма не в формате HTML, подскажите кто сталкивался с этим.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесьПодскажите пожалуйста как заменить текст или где почитать?
Подскажите пожалуйста как заменить текст или где почитать? .Не обновляется текст письма
Здравствуйте, Проблема такова: 1. Макросом формируется письмо. Sub Письмо() Dim OutlookApp.Не правильно отображается текст письма
Всем привет. Из 1С отправляю письмо штатным документом "Электронное письмо". Формат текста письма.Получить текст из HTML письма
Ermak27, зачем тебе письмо без форматирования? Выводи его в поле, которое поддерживает HTML формат. надеюсь все события и персонажи выдуманные, а любое совпадение чистая случайность)
Делаю бота, который будет по крону скачивать и обрабатывать почту. Он коннектится по IMAP.Ermak27, ты из Петрозаводска что ли?
Добавлено через 1 минуту
Я даже боюсь писать про объекты ЧтениеHTML и ПостроительDOMDethmontt, да
Добавлено через 22 секунды
SHIFT_969, можете на примере показатьДобавлено через 28 секунд
Phil, конечно!Ermak27, добавляешь реквизит с типом ФорматированныйДокумент. Туда делаешь ФорматированныйДокумент.ПолучитьHTML(ТекстПисьма)
ФорматированныйДокумент (FormattedDocument)
ПолучитьHTML (GetHTML)
Синтаксис:ПолучитьHTML(<ТекстHTML>, <Вложения>)
Параметры:Тип: Строка.
В параметр метод помещает строку, содержащую текст HTML.
<Вложения> (обязательный)Тип: Структура.
В параметр метод помещает структуру вложенных в форматированный документ рисунков.
Ключ элемента структуры - название или имя файла рисунка, значение - Картинка.
Если рисунок задан через URL, то он не добавляется в структуру.
Описание:Настройка учетной записи для отправки почты
Для создания и настройки «учетки» зайдем в раздел «Администрирование-Органайзер».
В открывшемся окне переходим по гиперссылке «Настройка системной. ».
Вводим адрес своей электронной почты и указываем имя отправителя, от лица которого будут отправляться письма. Здесь может быть как название организации, так и данные конкретного сотрудника. Активируем «Для отправки писем» (при необходимости можно поставить галку и «Для получения писем»), оставляем переключатель в положении «Определить параметры подключения автоматически» и жмем «Создать».
Рис.3 Определить параметры подключения автоматическиПосле некоторого ожидания, проверив настройки созданной записи, программа сообщит об успешной настройке. Нажав кнопку «Перейти», можно открыть и посмотреть созданную учетную запись в программе.
Все настройки «учетки» программа установит автоматом.
Жмем «Записать и закрыть». Наша цель достигнута.
Настройка подписи в письме
Перейдем в раздел меню «Главное-Персональные настройки».
Перейдя по гиперссылке «Настройки», выбираем учетную запись, и в поле «Подпись» вставляем или пишем текст, который будет добавляться в конце письма. Здесь же мы можем установить галочку «Отправлять копии исходящих писем по адресу». В этом случае на электронную почту будут приходить копии отправленной корреспонденции из программы 1С.
Рис.8 Галочка «Отправлять копии исходящих писем по адресу»Настройка электронной почты контрагента
В справочнике «Контрагенты» при заполнении данных в разделе «Адрес и телефон», есть поле «Email». Туда мы должны заносить адреса почтовых ящиков всех наших контрагентов. Если у организации несколько адресов, мы можем добавить дополнительные поля, с помощью «Добавить-Email».
Отправка электронной почты контрагенту
На примере – отправка отчета ОСВ по счету.
Читайте также: