Отправка электронного письма при изменении реквезита

1. Geophysic 31.03.23 14:05 Сейчас в теме
Добрый день! Есть реквизит "Замечания", при его изменении должно отправляться письмо на электронную почту с содержимым реквизита "Замечания", подскажите как это лучше всего реализовать? То есть зашел кто-то добавить замечание в заявку и после проведения отправлять письмо пользователю который указан на форме.
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 31.03.23 14:16 Сейчас в теме
(1)
Если Замечания <> Объект.Замечания Тогда 
    ОтправитьПисьмоПользователюКоторыйУказанНаФорме(Замечания);
КонецЕсли;
5. iqrex22 31.03.23 15:10 Сейчас в теме
(1)
Чтобы срабатывало только после записи, а не перед ней (а вдруг отказ, или сбой), можно так:

В обработчике формы ПередЗаписьюНаСервере() в структуру ПараметрыЗаписи добавить в какой-то свой параметр (ПараметрыЗаписи.ЗамечанияДоПерезаписи) Замечания из ТекущийОбъект.Ссылка (для существующих объектов; для новых, если и их нужно обрабатывать, можно брать пустое значение).

А в ПослеЗаписиНаСервере() сравнивать этот сохраненный параметр ПараметрыЗаписи.ЗамечанияДоПерезаписи с новым значением, которое в Объект.Замечания
3. starjevschik 31.03.23 14:25 Сейчас в теме
А какие варианты рассматриваются? Лучшее можно только выбрать из чего-то.
4. Geophysic 31.03.23 14:52 Сейчас в теме
(3) Сначала создал такую функцию

&НаСервере
Функция ЗамечаниеИзменено(ЗамечаниеПосле)
	Запрос = Новый Запрос;
	
	Запрос.Текст = 
	
	"ВЫБРАТЬ
	|	ивсЗаявкиКлиентов.Замечание КАК Замечание
	|ИЗ
	|	Документ.ивсЗаявкиКлиентов КАК ивсЗаявкиКлиентов
	|ГДЕ
	|	ивсЗаявкиКлиентов.Ссылка = &Ссылка";

	Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);

	Результат = Запрос.Выполнить();
	Выборка = Результат.Выбрать();
	
	Замечание = Выборка.Замечание;
	
	Если Выборка.Замечания <> Объект.Замечание Тогда
		СозданиеИОтправкаПисьма(Адрес, ТекстПисьма)
	КонецЕсли;	
		   
	Возврат Истина;

	Возврат Ложь;
	
КонецФункции
Показать


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

Функция СозданиеИОтправкаПисьма(Адрес, ТекстПисьма)

    Результат = Неопределено;
	
	// Даём полные права на момент выполнения куска кода 
	// (по умолчанию, до конца функции):
    УстановитьПривилегированныйРежим(Истина);
	
	// Воспользуемся получением системной учетной записи, как в типовой функции:
	// РаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись();
	УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты;
	
	Профиль = Новый ИнтернетПочтовыйПрофиль;
	
	//Профиль = РаботаСПочтовымиСообщениямиСлужебный.ИнтернетПочтовыйПрофиль(УчетнаяЗапись);
	Профиль = ИнтернетПочтовыйПрофиль(УчетнаяЗапись);
	
	Почта = Новый ИнтернетПочта;	
	
	// ---------------------------------------------------------
	// Непосредственное создание почтового сообщения:
	// ---------------------------------------------------------
	
	Письмо = Новый ИнтернетПочтовоеСообщение;
	
    Текст = Письмо.Тексты.Добавить(ТекстПисьма);	
	Текст.ТипТекста = ТипТекстаПочтовогоСообщения.HTML;
	
	Письмо.Тема = "Уведомление о начале отпуска"; 
	Письмо.Отправитель = УчетнаяЗапись.АдресЭлектроннойПочты;
	Письмо.ИмяОтправителя = "1С: Предприятие";
	
	Письмо.Получатели.Добавить(Адрес);
	
	// ---------------------------------------------------------
	// Отправка письма:
	// ---------------------------------------------------------
	
	ТекстСообщения = "";
	
	Попытка
		
		Почта.Подключиться(Профиль);
		//ТекстСообщения = "Подключенено";
		Почта.Послать(Письмо);
		//ТекстСообщения = "Уведомление отправлено";
		Почта.Отключиться();
		
		Результат = Истина;
		
	Исключение
		
		ТекстСообщения = "Не удалось подключиться к почтовому серверу !!!";
		Сообщить(ОписаниеОшибки());
		
		Результат = Ложь;
		
	КонецПопытки;
	
	Если ТекстСообщения <> "" Тогда
	
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = ТекстСообщения;
		Сообщение.Поле = "";
		Сообщение.УстановитьДанные(ЭтотОбъект);
		Сообщение.Сообщить();
		
	КонецЕсли;

	УстановитьПривилегированныйРежим(Ложь);		
	
	Возврат Результат;

КонецФункции // ОтправкаПисьма(Адрес, ТекстПисьма) 
Показать
6. starjevschik 31.03.23 16:19 Сейчас в теме
(4)
Вопрос вот в чем как мне указать именно того адресата который у меня в поле пользователь стоит?

Пользователь обычно в параметрах сеанса где-то записан, оттуда можно взять.
7. RustamZz 31.03.23 16:41 Сейчас в теме
(6) Тут все сложнее. В заказе - пользователь, в пользователе - адрес. Сказку-то геофизик, предположим, читал, а как в жизни поступить - не читал.
Прикрепленные файлы:
user1880116; Zevzm; +2 Ответить
8. Dr.HiHi 3 31.03.23 17:19 Сейчас в теме
(1) если это ручное изменение, то в форме есть после записи

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

как вариант
создаете план обмена))))
вешаете подписки на события и там уже смотрите, если реквизит поменялся, то тогда в получатели добавляете узел обмена.. или удаляете из получателей (смотря как реализуете)
создаете регламентное задание, которое через время будет запускаться и обрабатывать все документы из узла
не забываем чистить узел
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот