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

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 секунд (вдруг какая-то ошибка возникла при записи)
сравниваете реквизит со значением в параметре и если действительно он поменялся, то тогда отправляете письмо

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

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)