Pull to refresh

Стандарты использования сообщений пользователю в 1С

Reading time7 min
Views4.1K

Введение

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

Данную статью вы можете использовать как шпаргалку на будущее.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 1: ↑1 and ↓0+1
Comments0

Articles