Шаблоны сообщений пользователю - подсистема БСП

15.05.22

Разработка - БСП (Библиотека стандартных подсистем)

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

 

Введение

Всем доброго времени! В данном небольшом мануале рассмотрим базовый функционал Библиотеки стандартных подсистем (БСП) модулей "Шаблоны сообщений", которые используются в типовых конфигурациях. Функционал будет полезен пользователям для общего понимания встроенных возможностей программ, а так же программистам для быстрого и правильного внедрения и реализации своих разработок (подсистем) в типовые конфигурации

Данную статью вы можете использовать как шпаргалку на будущее (поскольку, всех знаний в голове не уместить). Разработку примеров буду вести на типовой конфигурации Библиотека стандартных подсистем версии 3.1.7.34 , используя 1С:Предприятие 8.3.19.1264.

Статью разобьем на две части - в первой из них программно создадим и настроем типовой шаблон сообщений, использую элемент справочника конфигурации "Шаблоны сообщений".

Во второй части статьи мы попробуем отправить сообщение по электронной почте, создав документ "Электронное сообщение исходящее" по шаблону из первой части.

 

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

В данном разделе, как указано выше, попробуем написать код, который создаст типовой шаблон сообщения в справочнике "Шаблоны сообщений", конфигурации на БСП.

Я буду разрабатывать пример для нетипового документа в системе стандартных подсистем - это документ "Списание товаров". Для этого я первым этапом должен внести изменения в конфигурацию (или расширение) небольшие правки для этого документа:

В модуль менеджера документа "Списание товара" вносим пустые процедуры взаимодействия с подсистемой сообщений пользователю:

 
 Типовой код взаимодействия объекта с системой сообщений

 

// СтандартныеПодсистемы.ШаблоныСообщений

// Вызывается при подготовке шаблонов сообщений и позволяет переопределить список реквизитов и вложений.
//
Процедура ПриПодготовкеШаблонаСообщения(Реквизиты, Вложения, ДополнительныеПараметры) Экспорт
	
КонецПроцедуры

// Вызывается в момент создания сообщений по шаблону для заполнения значений реквизитов и вложений.
//

Процедура ПриФормированииСообщения(Сообщение, ПредметСообщения, ДополнительныеПараметры) Экспорт
	
КонецПроцедуры

// Заполняет список получателей SMS при отправке сообщения сформированного по шаблону.
//

Процедура ПриЗаполненииТелефоновПолучателейВСообщении(ПолучателиSMS, ПредметСообщения) Экспорт

КонецПроцедуры

// Заполняет список получателей почты при отправке сообщения сформированного по шаблону.
//

Процедура ПриЗаполненииПочтыПолучателейВСообщении(ПолучателиПисьма, ПредметСообщения) Экспорт
	
КонецПроцедуры

// Конец СтандартныеПодсистемы.ШаблоныСообщений

 

 

Далее, для документа "Списание товаров" я создаю СКД макет "ДанныеШаблонаСообщений", где самым простым запросом выбираю поля, которые мне нужны. В общем виде, выглядит это вот так:

Рис.1. Описание СКД шаблона документа "Списание товаров".

 

Запрос простой, но его нужно сделать именно так:

 
 Код запроса

 

ВЫБРАТЬ
	_ДемоСписаниеТоваров.Ссылка КАК Ссылка,
	_ДемоСписаниеТоваров.ВерсияДанных КАК ВерсияДанных,
	_ДемоСписаниеТоваров.ПометкаУдаления КАК ПометкаУдаления,
	_ДемоСписаниеТоваров.Номер КАК Номер,
	_ДемоСписаниеТоваров.Дата КАК Дата,
	_ДемоСписаниеТоваров.Комментарий КАК Комментарий,
	_ДемоСписаниеТоваров.МестоХранения КАК МестоХранения,
	_ДемоСписаниеТоваров.Организация КАК Организация,
	_ДемоСписаниеТоваров.Ответственный КАК Ответственный
ИЗ
	Документ._ДемоСписаниеТоваров КАК _ДемоСписаниеТоваров
ГДЕ
	_ДемоСписаниеТоваров.Ссылка = &_ДемоСписаниеТоваров

 

 

 

Следующим этапом, я должен добавить ссылку документа "Списание товаров" в определяемый тип "Предмет шаблона сообщений". Вот так:

 

Рис.2. Определение типа "Списание товаров"

 

Все, теперь я создаю элемент справочника "Шаблон сообщений" и вижу, что тип документа "Списание товаров" доступен:

 

Рис.3. Доступность документа "Списание товаров" в назначениях шаблонов сообщений.

 

Далее, я напишу обработку, которая автоматически создаст мне шаблон по типу документа "Списание товаров". Код обработки вот такой:

 
 Код обработки создания шаблона электронного сообщения пользователю

 

&НаКлиенте
Процедура СоздатьШаблон(Команда)

	СоздатьШаблонНаСервере();
	
КонецПроцедуры   

&НаСервере
Процедура СоздатьШаблонНаСервере()
	
	ПараметрыШаблона 	= ШаблоныСообщений.ОписаниеПараметровШаблона();
		
	//  Структура:
	//   Наименование - Строка - наименование шаблона.
	//   Текст        - Строка - текст шаблона.
	//   Тема         - Строка - текст темы электронного письма.
	//   ТипШаблона   - Строка - тип "Письмо" или "SMS".
	//   Назначение   - Строка - Например, Заказ поставщику.
	//   ПолноеИмяТипаНазначения - Строка - Документ.ЗаказПокупателя параметры доступны все его реквизиты.
	//   ФорматПисьма    - ПеречислениеСсылка.СпособыРедактированияЭлектронныхПисем HTML или ОбычныйТекст.
	//   УпаковатьВАрхив - Булево - если Истина, Только для шаблонов электронной почты.
	//   ТранслитерироватьИменаФайлов - Булево - "Schet na oplaty.pdf".
	//   ФорматыВложений - СписокЗначений - список форматов вложений. Только для шаблонов электронной почты.
	//   ВладелецШаблона - ОпределяемыйТип.ВладелецШаблонаСообщения - владелец контекстного шаблона.
	//   ШаблонПоВнешнейОбработке - Булево - если Истина, то шаблон формируется внешней обработкой.
	//   ВнешняяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки - внешняя обработка, в которой содержится шаблон.
	//   ПодписьИПечать   - Булево - добавляет факсимильную подпись и печать в печатную форму. Только для шаблонов
	
	Наименование 		= "Шаблон - списание товаров";

	ПараметрыШаблона.Назначение 				= "Оповещение - процедура ""Списание товара""";  
	ПараметрыШаблона.ТипШаблона					= "Письмо";
	ПараметрыШаблона.ПолноеИмяТипаНазначения	= "Документ._ДемоСписаниеТоваров";
    ПараметрыШаблона.ФорматПисьма 				= Перечисления.СпособыРедактированияЭлектронныхПисем.HTML;
	ПараметрыШаблона.Тема                       = "Создано списание [_ДемоСписаниеТоваров.Номер] от [_ДемоСписаниеТоваров.Дата]";
	
	ТестШаблонаСообщения = "Списание [_ДемоСписаниеТоваров.Номер] создано"+Символы.ПС
							+"Ответственный [_ДемоСписаниеТоваров.Ответственный]"+Символы.ПС
							+"МестоХранения [_ДемоСписаниеТоваров.МестоХранения]"+Символы.ПС
							+"Основная организация [_ДемоСписаниеТоваров.Организация]";	
	
	ПараметрыШаблона.Текст  = ТестШаблонаСообщения;
	
	ПолученныйШаблон 	= ШаблоныСообщений.СоздатьШаблон(Наименование,ПараметрыШаблона);
	
КонецПроцедуры	

 

 

Проверяя корректность, нажав соответствующую кнопку "Проверить шаблон" - вижу сообщение "Шаблон заполнен корректно". Все, могу его использовать.

Рис.4. Проверка корректности шаблона сообщений пользователю, созданного автоматически.

 

Теперь, во второй части статьи, попробуем отправить этот шаблон как электронное письмо.

 

 

Пример отправки сообщения по созданному шаблону

После того, как мы создали кастомный шаблон сообщения по реквизитам документам, попробуем его отправить документом "Электронное письмо исходящее".

Для этого дополним наш код такими процедурами (с привязкой к кнопке):

 
 Добавление кода для возможности отправки электронным письмом

 

&НаКлиенте
Процедура ОтправитьСообщение(Команда)
	
	ПодготовитьПисьмоПоШаблону();

КонецПроцедуры

&НаСервере
Процедура ПодготовитьПисьмоПоШаблону()

	УИД = Новый УникальныйИдентификатор();
	
	Шаблон = ЭтаФорма.ВыбШаблон;
	Предмет = ЭтаФорма.ВыбДок;
	
	// вернет просто структуру
	//СтруктураДляОтправки = ШаблоныСообщений.СформироватьСообщение(Шаблон, Предмет, УИД, );
	
	
	// отправит письмо и вернет структуру
	СтруктураДляОтправки = ШаблоныСообщений.СформироватьСообщениеИОтправить(Шаблон, Предмет, УИД, );
	
	
	Сообщить("");
	
КонецПроцедуры

 

 

Где, Шаблон - это наш созданный шаблон, а Предмет - это ссылка на документ "Списание со склада". Результат выполнения кода - созданное электронное письмо исходящее вот такого вида:

Рис.5. Результат отправки - письмо заполнено по нашему шаблону.

 

В комментарии письма написано, что оно создано по шаблону:

Рис.6. В комментарии написано по какому шаблону создано.

 

Общий код всей обработки вот такой:

 
 Код всей обработки

 

Пожалуй, на этом закончим второй раздел и перейдем к заключению и выводам:

 

 

Заключение и выводы

Как я и написал во введении, цель данной статьи - это небольшая шпаргалка по созданию собственный шаблонов сообщений, привязка их к любым документам (справочникам) конфигурации и отправка получателям (через электронное письмо исходящее) в рамках типовых методов библиотеки стандартных подсистем. 

В статье рассмотрены основы функционала, который можно применять в современных типовых конфигурациях. Я думаю, что данный материал будет полезен всем желающим - всем, кто хочет разобраться в этих модулях - подсистеме "Шаблоны сообщений". Развитие практики этого функционала оставляю на ваше усмотрение.

Небольшие практические примеры по моим статьям вы всегда можете скачать на моем гит-хабе https://github.com/quazareline

В целях поддержки развития материалов по практическому применения библиотеки стандартных подсистем, вы можете подписаться на данный профиль этого ресурса Инфостарт, а так же другие мои профессиональные профили и каналы.

Обратите внимание на другие мои "чисто-практические статьи" по современному функционалу библиотеки стандартных подсистем, написанных мной ранее. Статьи будут так же полезны вам на практике.

 

Материалы применения типового функционала Библиотеки стандартных подсистем

 

Генерация штрихкодов с помощью БСП для программистов

Базовые приемы работы с кластером 1С при помощи БСП

Модули общего назначения - готовые полезные функции и процедуры конфигураций на БСП

Многопоточный режим выполнения процедуры с помощью методов БСП - примеры разработки

Печать макета MS Word в любом документе с помощью БСП

 

У кого есть вопросы, предложения и дополнения или благодарности - пишите в личку - отвечу всем.

шаблоны сообщений БСП пользователи электронное сообщение исходящее

См. также

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

В статье описан алгоритм для включения документа или справочника в систему БСП. Будет полезно программистам 1С, начинающим работать с БСП.

24.10.2024    1092    PROSTO-1C    0    

12

БСП (Библиотека стандартных подсистем) Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

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

08.10.2024    978    PROSTO-1C    4    

10

БСП (Библиотека стандартных подсистем) Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

04.10.2024    1830    MadRave    11    

24

БСП (Библиотека стандартных подсистем) Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример отслеживания прогресса фонового выполнения дополнительной обработки с использованием программного интерфейса длительных операций БСП.

10.09.2024    1821    MadRave    1    

17

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

А что, если долгожданная реализация Паузы в 1С смутно напоминает старую, проверенную? А?!

06.09.2024    1254    n_mezentsev    10    

8

БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Добавим дополнительные свойства в новый документ средствами БСП

02.09.2024    4105    John_d    10    

52

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

Всё больше организаций выбирает для серверов под 1С операционные системы Linux. Одним из отличий систем Windows и Linux является отсутствие COM объектов, которые зачастую использовались для формирования печатных форм офисных документов (Word). Конечно, можно выполнять печать и на клиенте, но есть риск импортозамещения. В работе у меня случались проблемы с зависанием процесса Word, поэтому я не люблю его использовать.

29.07.2024    5354    PROSTO-1C    12    

52
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. frkbvfnjh 805 16.05.22 13:24 Сейчас в теме
Как интересно, мне как раз нужно разработать свой вид уведомлений. Теперь буду знать куда вопросы писать :)
2. vld1973 90 18.05.22 10:16 Сейчас в теме
Интересное решение. Спасибо.
3. CHELLL 53 29.11.22 14:01 Сейчас в теме
Супер статья, н у меня не отправляется((( Получатель пустой. Пытался его через ДопПараметры передать но не вышло. Как Вас получатель заполняется?
4. CHELLL 53 29.11.22 16:57 Сейчас в теме
6. AnPetr 27.03.23 09:22 Сейчас в теме
8. tugushev98 22.08.23 12:59 Сейчас в теме
(6) Параметры.Получатель = "aaa@mail.ru"
5. zakirus 07.03.23 08:06 Сейчас в теме
Набор данных в СКД необходимо назвать "Данные", без этого валится в ошибку.
7. 7OH 70 02.08.23 15:33 Сейчас в теме
А кто подскажет - как в стандартный механизм подключить вывод табличной части ?
Чтобы пользователь как и тут мог выбирать реквизиты
10. dreamwaver_dz 127 24.11.23 22:06 Сейчас в теме
(7)
Так баловаться с шаблоном не получится, но есть вариант добавлять реквизит.

// Вызывается при подготовке шаблонов сообщений и позволяет переопределить список реквизитов и вложений.
//
Процедура ПриПодготовкеШаблонаСообщения(Реквизиты, Вложения, ДополнительныеПараметры) Экспорт
	НовыйРеквизит = Реквизиты.Добавить(); 
	НовыйРеквизит.Тип = Новый ОписаниеТипов("Строка");
	НовыйРеквизит.Имя = Реквизиты.Родитель.Имя+".ТаблицаПредметов";
	НовыйРеквизит.Представление = НСтр("ru = 'Таблица предметов (HTML)';en = 'Items table (HTML)'");	
КонецПроцедуры


Потом, при создании, этому реквизиту присваивать любое значение, в том числе и таблицу (условно HTML)

// Вызывается в момент создания сообщений по шаблону для заполнения значений реквизитов и вложений.
//

Процедура ПриФормированииСообщения(Сообщение, ПредметСообщения, ДополнительныеПараметры) Экспорт
	ПредметыHTML = "
		|<table border=""1"" cellpadding=3px style=""border-collapse: collapse;"">
		|<colgroup>
		|	<col span=""5"">
		|	<col span=""1"" style=""background-color: #D6EEEE"">
		|</colgroup>
		|<tbody>";

	//Здесь добавляем заголовок и строчки таблицы...

	ПредметыHTML = ПредметыHTML + "
		|</tbody>                 
		|</table>";
		
		Сообщение.ЗначенияРеквизитов.Вставить("ТаблицаПредметов", ПредметыHTML);
КонецПроцедуры
Показать
9. dreamwaver_dz 127 24.11.23 22:03 Сейчас в теме
А вот с отправкой HTML ещё придется разбираться.
Дело в том, что перед отправкой, БСП весь подготовленный текст (HTML) присваивает в реквизит типа "ФорматированныйДокумент".
Этот реквизит не поддерживает HTML в полном объёме и лишнее, в том числе таблицы HTML, превращается в слитный текст.
Поэтому процесс подготовки финального текста нужно внимательно проследить и в нужных моментах подкорректировать.
11. p1xel 25.07.24 19:51 Сейчас в теме
Набор данных в СКД должен называться "Данные", а на вкладке "настройки" необходимо добавить детальные записи - иначе шаблоны сообщений с выбранным назначением не взлетят в случае ручного создания шаблона, отказавшись заполняться в процедуре ЗаполнитьРеквизитыПоСКД общего модуля ШаблоныСообщенийСлужебный.
Оставьте свое сообщение