Отдельные шаблоны писем и чеков в Рознице 2.3

С удивлением обнаружил, что шаблон чеков, рассылаемых по смс и e-mail в 1С одинаковый и не настраивается пользователем.

Хотя для экономии средств смс должно быть сделано покороче, а в e-mail можно вставить различную сопутствующую информацию, например, рекламу.

Ранее я сделал шаблон чека минимальным по длине для СМС-уведомлений. Но все же для e-mail лучше делать свой собственный формат.

1С рассылает по e-mail, если указана почта, а если не указана, только тогда по sms. По двум каналам сразу не отправляет, e-mail в приоритете.

Текст сообщения по чеку задается в функции Модуль.РассылкаЭлектронныхЧеков.ШаблонАтрибутовЧекаДляОтсылки.

Затем в процедуре Модуль.РассылкаЭлектронныхЧековВызовСервера.НачатьОтправкуЭлектронногоЧека происходит e-mail или sms рассылка:

Вмешиваться будем в процедуру формирования текста чека в модуле РассылкаЭлектронныхЧеков :

&Вместо("ШаблонАтрибутовЧекаДляОтсылки")
Функция дор_ШаблонАтрибутовЧекаДляОтсылки(ПараметрыФискализации)
	
	ТекстСообщения = Новый Массив();
	
	//Формат сумм
	Если Цел(ПараметрыФискализации.СуммаЧека) = ПараметрыФискализации.СуммаЧека Тогда
		Формат = "ЧДЦ=0; ЧГ=";
	Иначе
		Формат = "ЧДЦ=2; ЧГ=";
	КонецЕсли;
	
	//Определяем, это e-mail или СМС рассылка, e-mail приоритетнее в 1С
	Если ЗначениеЗаполнено(ПараметрыФискализации.ПокупательEmail) Тогда 
		
		Макет = ПолучитьОбщийМакет("дор_МакетПисьмаПоЧеку");
		ТекстHTML = Макет.ПолучитьТекст();
		
		ТекстHTML = СтрЗаменить(ТекстHTML, "$НомерЧека", ПараметрыФискализации.НомерЧекаККТ);
		ТекстHTML = СтрЗаменить(ТекстHTML, "$Время", ПараметрыФискализации.ДатаВремяЧека);
		//... Тут другие необходимые рассылки
		Результат = ТекстHTML;
		
	Иначе
		//Это смс рассылка
		//ТекстСообщения.Добавить(СтрШаблон(НСтр("ru = 'Чек на %1 руб.'"), Формат(ПараметрыФискализации.СуммаЧека, "ЧРД=.;ЧЦ=12;ЧДЦ=2;ЧН=0.00;ЧГ=0")));
		ТекстСообщения.Добавить(СтрШаблон(НСтр("ru = 'Чек на %1 руб.'"), Формат(ПараметрыФискализации.СуммаЧека, Формат)));
		ТекстСообщения.Добавить(СтрШаблон(НСтр("ru = 'от %1'"),    Формат(ПараметрыФискализации.ДатаВремяЧека, НСтр("ru = 'ДФ=''дд.ММ.гггг ЧЧ:мм'''"))));
		ТекстСообщения.Добавить(СтрШаблон(НСтр("ru = 'ККТ№ %1'"),  ПараметрыФискализации.РегистрационныйНомерККТ));
		ТекстСообщения.Добавить(СтрШаблон(НСтр("ru = 'lk.platformaofd.ru/web/noauth/cheque/search?fn=%1&fp=%2&i=%3'"),   
		ПараметрыФискализации.ЗаводскойНомерФН,
		ПараметрыФискализации.ФискальныйПризнак,
		ПараметрыФискализации.НомерЧекаККТ
		));
		
		//Разделяем неразрывными пробелами
		Результат = СтрСоединить(ТекстСообщения, Символы.НПП);
		
	КонецЕсли;
	
	
	Возврат Результат;
	
	//Старый код не вызываем
	//Результат = ПродолжитьВызов(ПараметрыФискализации);
	//Возврат Результат;
КонецФункции

Здесь текст формирования HTML не расписан, он будет подробно рассмотрен в отдельной статье.

Чтобы письмо отправлялось в HTML формате, а не в формате простого текста, тоже нужно будет сделать доработки в модуле РассылкаЭлектронныхЧековВызовСервера:

&Вместо("НачатьОтправкуЭлектронногоЧека")
Процедура дор_НачатьОтправкуЭлектронногоЧека(ПараметрыЧека, ТекстСообщения, ПокупательEmail, ПокупательНомер)
	//Копируем из базовой функции, заменяем на своё...
	Если ЗначениеЗаполнено(ПокупательEmail) Тогда
		
		ПараметрыПисьма = Новый Структура;
		
		КомуСтруктура = Новый Структура("Адрес, Представление");
		КомуСтруктура.Адрес = ПокупательEmail;
		
		Кому = Новый Массив;
		Кому.Добавить(КомуСтруктура);
		
		ПараметрыПисьма.Вставить("Кому", Кому);
		Тема  = НСтр("ru = 'Пробит чек №%1'");
		Тема = СтрЗаменить(Тема, "%1", ПараметрыЧека.НомерЧекаККТ);
		
		ПараметрыПисьма.Вставить("Тема", Тема);
		ПараметрыПисьма.Вставить("Тело", ТекстСообщения);
		ПараметрыПисьма.Вставить("ИдентификаторФискальнойЗаписи", ПараметрыЧека.ИдентификаторФискальнойЗаписи);
		
		//+++Здесь наши изменения НАЧАЛО
		
		ПараметрыПисьма.Вставить("ТипТекста", "HTML");
		
		//Тут же будем прикреплять картинку
		 
		//---Здесь наши изменения КОНЕЦ
		
		
		РассылкаЭлектронныхЧеков.НачатьОтправкуЭлектронногоЧека(ПокупательEmail,
													Перечисления.ТипыРассылкиЭлектронныхЧеков.ЭлектронноеПисьмо,
													ПараметрыПисьма);
													
	Иначе
		ПродолжитьВызов(ПараметрыЧека, ТекстСообщения, ПокупательEmail, ПокупательНомер);
	КонецЕсли;
КонецПроцедуры

Я не стал использовать изменения и контроль, т.к. большая часть кода процедуры изменена. Можно было бы и в другом месте вносить изменения, но это самое удобное — здесь есть и параметры письма и параметры чека.

Думаю, формирование текста HTML тоже можно перенести в это место, удобнее будет и картинку вставлять.

Все параметры электронного письма можно посмотреть в процедуре Модуль.РаботаСПочтовымиСообщениями.ПодготовитьПисьмо.

Таким образом мы можем для отправки письма использовать размеченный HTML-текст. Само заполнение HTML данными, прикрепление картинки — отдельная задача.

Пока что меня удовлетворило то, что письмо пришло в HTML-формате:

Среда: Розница 2.3.11.29 Объем: 3 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *