Фоновая отправка уведомлений

13.01.24

Интеграция - Email рассылки

Часто нужно уведомлять пользователей о событиях, происходящих в системе, на их электронную почту. Например, сообщение о приходе денег от контрагента для его менеджера.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Отправка уведомлений:
.cfe 12,05Kb ver:от 15.03.2022 для 2.4, 2.5
18
18 Скачать (5 SM) Купить за 3 050 руб.

Фоновая отправка уведомлений

Часто нужно уведомлять пользователей о событиях происходящих в системе на их электронную почту.

 

Например, для того что пришло уведомление о приходе денег от клиента по заказу, теперь перетащить модуль документа в расширение и вставить следующий код:


&После("ОбработкаПроведения")
Процедура Расш1__ОбработкаПроведения(Отказ, РежимПроведения)

	Если Проведен = ложь тогда
		Возврат;
	Конецесли;
	
	ТЗ=Новый ТаблицаЗначений;
	ТЗ.Колонки.Добавить("ОснованиеПлатежа");
	ТЗ.Колонки.Добавить("Партнер");
	ТЗ.Колонки.Добавить("Сумма");
	Для каждого стр из РасшифровкаПлатежа цикл
		ЗаполнитьЗначенияСвойств(ТЗ.Добавить(),Стр);
	Конеццикла;
	
	ТЗ.Свернуть("ОснованиеПлатежа,Партнер","Сумма");
	
	Для каждого стр из ТЗ цикл
		
		Тема ="Приход: "+ стр.Сумма+" от "+Контрагент+?(ЗначениеЗаполнено(стр.ОснованиеПлатежа)," по "+стр.ОснованиеПлатежа,"");
		
		КлючУникальности="Приход "+Ссылка.УникальныйИдентификатор()+" от "+Контрагент; 
		
		ДатаЗадания=ТекущаяДата();
	    Тема="Ознакомьтесь с поступлением денежных средств  "+ Номер+ " от "+Формат(Дата,"ДФ=dd.MM.yy")+" от "+Контрагент;
		Тело= "По "+стр.ОснованиеПлатежа+" поступили д.с. в размере "+ Формат(стр.Сумма,"ЧДЦ=2")+"
		|
		| Гиперссылка на поступление денежных средств:   "+ПолучитьНавигационнуюСсылку(Ссылка)+"
		|
		|
		| Прим. Вы можете перейти в документ, скопировав гиперссылку в буфер обмена и нажав в  1С ""Shift+F11""" ; 
	  	мо_ОтправкаУведомлений_Сервер.ОтправитьУведомлениеПоEmailВФоновомРежиме(стр.Партнер.ОсновнойМенеджер,Тема,Тело,,КлючУникальности,Ссылка);		  
	Конеццикла;

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

На почту менеджеру придет уведомление:

Ознакомьтесь с поступлением денежных средств 0A00-001052 от 25.09.20 от ООО Uhff КФ Рус

 

1С:Предприятие

Сегодня, 13:05

Кому: вам

По Заказ клиента от "ООО Гром КФ Рус" А20-0000458 от 27.07.2020 18:29:16 поступили д.с. в размере 661 240,80

 Гиперссылка на поступление денежных средств: e1cib/data/Документ.ПоступлениеБезналичныхДенежныхСредств?ref=80e4ac1f6b91b3ef11eb014d446068dd


 Прим. Вы можете перейти в документ, скопиров гиперссылку в буфер обмена и нажав в 1С "Shift+F11"

 

 

     Преймущества по  сравнению с обычным кодом:

  1.  Уведомления не задублируются. Правильно подобрав ключ уникальности, Вы гарантируете единичную отправку сообщения.
  2.  Вам не нужно вспоминать детали работы с электронными письмами. Все что вам нужно,  это ссылка на пользователя (у него должен быть прописан e-mail в контактной информации, ссылка на  объект (можно даже еще не записанный)  и текст сообщения.
  3.   Экономия времени. Теперь, чтоб добавить уведомление о событие, Вам всего лишь надо скопировать небольшой фрагмент кода и подправить текст сообщения.
  4.  Экономия кода. Уведомлений о событиях много и основная работа с ними выделена в общий модуль.
  5. Все сообщения отправляются в фоновом режиме. Это значит, что сколько бы времени ни занял процесс отправки, это никак не повлияет на работу программы.

 

  1.      Пример отправки сообщения из еще не записанного справочника с отправкой гиперссылки на будущий элемент:

 

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
	ПередЗаписьюНаСервере();
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере()
	  КонтрольнаяСумма=Объект.ПредпечатнаяПодготовка;
	  Для Каждого СтрокаВарианта Из Объект.ВариантыРасчета цикл
		  КонтрольнаяСумма=КонтрольнаяСумма+ СтрокаВарианта.Цена;
	  КонецЦикла;
	  КонтрольнаяСумма2=Объект.Ссылка.ПредпечатнаяПодготовка;
	  Для Каждого СтрокаВарианта Из Объект.Ссылка.ВариантыРасчета цикл
		  КонтрольнаяСумма2=КонтрольнаяСумма+ СтрокаВарианта.Цена;
	  КонецЦикла;
	  Если  КонтрольнаяСумма2<> КонтрольнаяСумма Тогда
		  
		  Если Объект.Ссылка=Неопределено  Тогда
			  // Получаем возможно уже установленную ранее ссылку нового
			  СсылкаНаОбъект = Объект.ПолучитьСсылкуНового();
			  Если Не ЗначениеЗаполнено(СсылкаНаОбъект) Тогда
				  // Если ссылка нового пустая, то запрашиваем ее у менеджера и устанавливаем
				  СсылкаНаОбъект = Документы.мо_ЗаказНаРасчет.ПолучитьСсылку();
				  Объект.УстановитьСсылкуНового(СсылкаНаОбъект);
			  КонецЕсли;
		  Иначе
			  СсылкаНаОбъект = Объект.Ссылка;
		  КонецЕсли;		  
		ДатаЗадания=ТекущаяДата();
	    Тема="Ознакомьтесь с изменением цен по расчету  "+ Объект.Номер+ " от "+Формат(ДатаЗадания,"ДФ=dd.MM.yy");
		КлючУникальностиДокумента= "Изменение цен по расчету  "+ Объект.Номер+ " от "+Формат(ДатаЗадания,"ДФ=dd.MM.yy");
		
		//Задача.Предмет = Сделка;
		Тело= "По заданию на расчет по сделке"+Объект.Ссылка+" поменялись рассчитанные цены!
		|
		| Гиперссылка на заказ на расчет:   "+ПолучитьНавигационнуюСсылку(СсылкаНаОбъект)+"
		|
		|
		| Прим. Вы можете перейти в документ, скопировав гиперссылку в буфер обмена и нажав в  1С ""Shift+F11""" ; 
	  	мо_ОтправкаУведомлений_Сервер.ОтправитьУведомлениеПоEmailВФоновомРежиме(Объект.Менеджер,Тема,Тело,,КлючУникальностиДокумента,СсылкаНаОбъект);		  
	  КонецЕсли;
КонецПроцедуры

Если В    

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

     Если Вам это не доступно по каким то причинам, то код основных фрагментов расширения приведен ниже:


Процедура ОтправитьУведомлениеПоEmail(М_Пользователи,Тема,Тело,АдресОтвета="",КлючУникальности="",КлючеваяСсылка="") Экспорт
  	УстановитьПривилегированныйРежим(Истина);	
	ПараметрыПисьма = Новый Структура;

	
	Кому ="";
	Если ТипЗнч(М_Пользователи)=Тип("Массив") Тогда
		Для Каждого Пользователь из  М_Пользователи Цикл
			Адрес=УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(Пользователь,Справочники.ВидыКонтактнойИнформации.EmailПользователя);
			Если ЗначениеЗаполнено(Адрес) Тогда 
				Кому =Кому+?(Кому="","",";")+Адрес;
			КонецЕсли;
		КонецЦикла;
	Иначе
			Адрес=УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(М_Пользователи,Справочники.ВидыКонтактнойИнформации.EmailПользователя);
			Если ЗначениеЗаполнено(Адрес) Тогда 
				Кому =Кому+?(Кому="","",";")+Адрес;
			КонецЕсли;
	КонецЕсли;
	Если ЗначениеЗаполнено(Кому) Тогда
		ПараметрыПисьма.Вставить("Кому", Кому);
	Иначе
		возврат;
	КонецЕсли;
	
	УчетнаяЗаписьИзНастроек=Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты;
	ПараметрыПисьма.Вставить("АдресОтвета", АдресОтвета);

	ПараметрыПисьма.Вставить("Тема", Тема);
	
	//ФайлВФорматеHTML = ПолучитьИмяВременногоФайла();
	//ТабДок.Записать(ФайлВФорматеHTML, ТипФайлаТабличногоДокумента.HTML5);
	//ТекстПисьма = Новый ТекстовыйДокумент;
	//ТекстПисьма.Прочитать(ФайлВФорматеHTML);
	// ХТМЛПоле = ТекстПисьма.ПолучитьТекст();
	
	
	ПараметрыПисьма.Вставить("Тело", Тело);
	ПараметрыПисьма.Вставить("ТипТекста",  ПредопределенноеЗначение("Перечисление.ТипыТекстовЭлектронныхПисем.ПростойТекст"));
	Если КлючУникальности="" ИЛИ  РегистрыСведений.мо_СчетчикСобытий.ПолучитьСчетчик(КлючУникальности,КлючеваяСсылка)=0 Тогда
		Попытка
			РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗаписьИзНастроек, ПараметрыПисьма);
			Если КлючУникальности<>"" Тогда
				РегистрыСведений.мо_СчетчикСобытий.УвеличитьСчетчик(КлючУникальности,КлючеваяСсылка);
			КонецЕсли;
		Исключение
		КонецПопытки;
	КонецЕсли;
КонецПроцедуры

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

Процедура ФоноваяПроцедура(ТекстМодуля,ПараметрыВыполнения) Экспорт
    ПолныйТекстМодуля = "";
    Для Каждого ТекПараметр Из ПараметрыВыполнения Цикл
        ПолныйТекстМодуля = ПолныйТекстМодуля+ТекПараметр.Ключ+"=ПараметрыВыполнения."+ТекПараметр.Ключ+";"+Символы.ПС;
    КонецЦикла;
    ПолныйТекстМодуля = ПолныйТекстМодуля + ТекстМодуля;
    Выполнить(ПолныйТекстМодуля);
КонецПроцедуры

Процедура ОтправитьУведомлениеПоEmailВФоновомРежиме(М_Пользователи,Тема,Тело,АдресОтвета="",КлючУникальности="",КлючеваяСсылка="") Экспорт
	ТекстФоновойПроцедуры = "
	|мо_ОтправкаУведомлений_Сервер.ОтправитьУведомлениеПоEmail(М_Пользователи,Тема,Тело,АдресОтвета,КлючУникальности,КлючеваяСсылка);";
	СтруктураПараметров=Новый Структура;
	СтруктураПараметров.Вставить("М_Пользователи",М_Пользователи);
	СтруктураПараметров.Вставить("Тема",Тема);
	СтруктураПараметров.Вставить("Тело",Тело);
	СтруктураПараметров.Вставить("АдресОтвета",АдресОтвета);
	СтруктураПараметров.Вставить("КлючУникальности",КлючУникальности);
	СтруктураПараметров.Вставить("КлючеваяСсылка",КлючеваяСсылка);
	ЗапуститьФоновоеВыполнение(ТекстФоновойПроцедуры,СтруктураПараметров);
КонецПроцедуры


Рег

 

Регистр счетчик событий:

Модуль менеджера:

Процедура УвеличитьСчетчик(ИмяСобытия,КлючеваяСсылка)ЭКСПОРТ
	УстановитьПривилегированныйРежим(Истина);	
	НЗСчетчик= РегистрыСведений.мо_СчетчикСобытий.СоздатьНаборЗаписей();
	НЗСчетчик.Отбор.ИмяСобытия.Установить(ИмяСобытия);
	НЗСчетчик.Отбор.КлючеваяСсылка.Установить(КлючеваяСсылка);
	НЗСчетчик.Прочитать();
	Если НЗСчетчик.Количество() = 0 Тогда
		НовыйСчетчик = НЗСчетчик.Добавить();
		НовыйСчетчик.ИмяСобытия = ИмяСобытия;
		НовыйСчетчик.КлючеваяСсылка = КлючеваяСсылка;
		НовыйСчетчик.Счетчик = 1;
	ИначеЕсли НЗСчетчик.Количество() = 1 Тогда
		НовыйСчетчик = НЗСчетчик[0];
		НовыйСчетчик.Счетчик = НовыйСчетчик.Счетчик+1;
	КонецЕсли;
	НЗСчетчик.Записать();
КонецПроцедуры

Функция ПолучитьСчетчик(ИмяСобытия,КлючеваяСсылка)ЭКСПОРТ
	УстановитьПривилегированныйРежим(Истина);	
	НЗСчетчик= РегистрыСведений.мо_СчетчикСобытий.СоздатьНаборЗаписей();
	НЗСчетчик.Отбор.ИмяСобытия.Установить(ИмяСобытия);
	НЗСчетчик.Отбор.КлючеваяСсылка.Установить(КлючеваяСсылка);
	НЗСчетчик.Прочитать();
	Если НЗСчетчик.Количество() = 0 Тогда
		Возврат 0;	
	КонецЕсли;
	Возврат НЗСчетчик[0].Счетчик;	
КонецФункции	

 

 

 

       Подключение расширения:

          Подключение осуществляется обычным способом:

Расширением гарантированно работает на платформе 8.3 (тестировано на релизах 8.3.13.1644,8.3.18.1334) 1С:Комплексная автоматизация 2 (2.5.7.298) , 1С:ERP Управление предприятием 2 (2.4.7.107)  и Управление торговлей, редакция 11 (11.4.6.188) И Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.11.106)   Режим совместимости Версия 8.3.12 и выше. БСП >3.*

Другие разработки автора:

Подсистема штрихкодирования серий номенклатуры (УТ 11, КА, ERP)Подсистема штрихкодирования серий номенклатуры (УТ 11, КА, ERP)
Подсистема 'Входной контроль' для ERP ,КА , УТ 11
Подсистема 'Входной контроль' для ERP ,КА , УТ 11
Электронный обходной лист (расширение) для ERP, ЗУП, КА
Отправка электронных писем по задолженностям клиентов (ERP, УТ 11)Отправка электронных писем по задолженностям клиентов (ERP, УТ 11)
Excel Studio for 1CExcel Studio for 1C
Настраиваемый управленческий балансНастраиваемый управленческий баланс
Динамические отчеты СКД
Динамические отчеты СКД
Фоновая отправка уведомлений
Генератор кодаГенератор кода

 

Акция! Вы можете скачать архив всех моих разработок, которые я предлагаю за StartMone, по Специальной  цене:  //infostart.ru/public/960899/#archive

Молочников Олег Spb. 2024

Проверено на следующих конфигурациях и релизах:

  • 1С:Комплексная автоматизация 2, релизы 2.5.7.298

Отправка уведомлений рассылка многопоточность параллелизм фоновое задание

См. также

Взаиморасчеты Email рассылки Акт сверки Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Платные (руб)

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

3000 руб.

25.11.2020    24485    238    8    

205

SALE! 20%

Email рассылки Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Платные (руб)

Решение для массовой рассылки печатных форм (в том числе и дополнительных) любых документов, и произвольных файлов. Рассылка возможна посредством электронной почты, Telegram и файловой системы. Рассылка пакета документов. Добавление факсимильных печати и подписи. Произвольные шаблоны HTML/Simple text с автозаполнением любыми полями документа. Любые форматы файлов. Упаковка вложений в архив. Транслитерация имен файлов. Разбиение рассылки на произвольные порции. Обход спам-фильтров. Журналирование рассылок.

4920 3936 руб.

30.06.2022    11019    72    98    

34

Загрузка и выгрузка в Excel Монитор заказов Email рассылки Пользователь Бухгалтерский учет 8.3.14 1С:Бухгалтерия 3.0 Россия Управленческий учет Платные (руб)

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

6000 руб.

13.10.2021    10127    3    0    

3

Взаиморасчеты Email рассылки Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Платные (руб)

Обработка позволяет автоматически сформировать акты сверок на почту контрагентов (почта берется из контактных данных контрагента). При формировании акта сверки формируется подпись с указанием контактов для связи с бухгалтерией нашей организации (формируется исходя из контактов из карточки организации). Присутствует возможность ручного редактирования электронной почты контрагента для отправки. Отправка осуществляется с системной записи электронной почты. В случае, если у контрагента нет адреса электронной почты, эти контрагенты будут выведены в отдельной табличной части. Это очень удобно, так как сразу наглядно виден список контрагентов, которым невозможно отправить акты сверок!

7080 руб.

11.05.2021    9466    6    1    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ltfriend 21.10.20 18:12 Сейчас в теме
Отправка письма в процедуре обработки проведения. Если проблемы с интернетом или низкая скорость соединения, то письмо отправляется, документ ожидает завершения отправки письма, пользователь ждёт, когда же документ проведётся, транзакция висит. Красота!
2. milkers 2920 22.10.20 11:58 Сейчас в теме
(1) Большое спасибо за ваше замечание. Переписал на отправку в фоновом режиме.
3. KazanKokos 11 24.01.21 20:31 Сейчас в теме
Один минус: произошло исключение, завис клиент - письмо не ушло. Может кто подскажет кто есть на инфостарте обработка или расширение работающее по алгоритму:
1. Пул писем к отправке собирается в регистре сведений
2. рассылка ведется регламентным заданием на основе данных этого РС.
4. YA_1130000057973079 19.08.22 06:40 Сейчас в теме
Добрый день.
Можно ли при проведении реализации - фоном отправить УПД в экселе такой обработкой?
5. milkers 2920 19.08.22 08:24 Сейчас в теме
Если слегка доработать процедуру формирования письма.
Оставьте свое сообщение