Отправка электронного письма при изменении реквезита
Добрый день! Есть реквизит "Замечания", при его изменении должно отправляться письмо на электронную почту с содержимым реквизита "Замечания", подскажите как это лучше всего реализовать? То есть зашел кто-то добавить замечание в заявку и после проведения отправлять письмо пользователю который указан на форме.
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Чтобы срабатывало только после записи, а не перед ней (а вдруг отказ, или сбой), можно так:
В обработчике формы ПередЗаписьюНаСервере() в структуру ПараметрыЗаписи добавить в какой-то свой параметр (ПараметрыЗаписи.ЗамечанияДоПерезаписи) Замечания из ТекущийОбъект.Ссылка (для существующих объектов; для новых, если и их нужно обрабатывать, можно брать пустое значение).
А в ПослеЗаписиНаСервере() сравнивать этот сохраненный параметр ПараметрыЗаписи.ЗамечанияДоПерезаписи с новым значением, которое в Объект.Замечания
Чтобы срабатывало только после записи, а не перед ней (а вдруг отказ, или сбой), можно так:
В обработчике формы ПередЗаписьюНаСервере() в структуру ПараметрыЗаписи добавить в какой-то свой параметр (ПараметрыЗаписи.ЗамечанияДоПерезаписи) Замечания из ТекущийОбъект.Ссылка (для существующих объектов; для новых, если и их нужно обрабатывать, можно брать пустое значение).
А в ПослеЗаписиНаСервере() сравнивать этот сохраненный параметр ПараметрыЗаписи.ЗамечанияДоПерезаписи с новым значением, которое в Объект.Замечания
(3) Сначала создал такую функцию
Вопрос вот в чем как мне указать именно того адресата который у меня в поле пользователь стоит? У меня есть типовые функции по отправке сообщений
&НаСервере
Функция ЗамечаниеИзменено(ЗамечаниеПосле)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ивсЗаявкиКлиентов.Замечание КАК Замечание
|ИЗ
| Документ.ивсЗаявкиКлиентов КАК ивсЗаявкиКлиентов
|ГДЕ
| ивсЗаявкиКлиентов.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Замечание = Выборка.Замечание;
Если Выборка.Замечания <> Объект.Замечание Тогда
СозданиеИОтправкаПисьма(Адрес, ТекстПисьма)
КонецЕсли;
Возврат Истина;
Возврат Ложь;
КонецФункции
ПоказатьВопрос вот в чем как мне указать именно того адресата который у меня в поле пользователь стоит? У меня есть типовые функции по отправке сообщений
Функция СозданиеИОтправкаПисьма(Адрес, ТекстПисьма)
Результат = Неопределено;
// Даём полные права на момент выполнения куска кода
// (по умолчанию, до конца функции):
УстановитьПривилегированныйРежим(Истина);
// Воспользуемся получением системной учетной записи, как в типовой функции:
// РаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись();
УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты;
Профиль = Новый ИнтернетПочтовыйПрофиль;
//Профиль = РаботаСПочтовымиСообщениямиСлужебный.ИнтернетПочтовыйПрофиль(УчетнаяЗапись);
Профиль = ИнтернетПочтовыйПрофиль(УчетнаяЗапись);
Почта = Новый ИнтернетПочта;
// ---------------------------------------------------------
// Непосредственное создание почтового сообщения:
// ---------------------------------------------------------
Письмо = Новый ИнтернетПочтовоеСообщение;
Текст = Письмо.Тексты.Добавить(ТекстПисьма);
Текст.ТипТекста = ТипТекстаПочтовогоСообщения.HTML;
Письмо.Тема = "Уведомление о начале отпуска";
Письмо.Отправитель = УчетнаяЗапись.АдресЭлектроннойПочты;
Письмо.ИмяОтправителя = "1С: Предприятие";
Письмо.Получатели.Добавить(Адрес);
// ---------------------------------------------------------
// Отправка письма:
// ---------------------------------------------------------
ТекстСообщения = "";
Попытка
Почта.Подключиться(Профиль);
//ТекстСообщения = "Подключенено";
Почта.Послать(Письмо);
//ТекстСообщения = "Уведомление отправлено";
Почта.Отключиться();
Результат = Истина;
Исключение
ТекстСообщения = "Не удалось подключиться к почтовому серверу !!!";
Сообщить(ОписаниеОшибки());
Результат = Ложь;
КонецПопытки;
Если ТекстСообщения <> "" Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ТекстСообщения;
Сообщение.Поле = "";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
Возврат Результат;
КонецФункции // ОтправкаПисьма(Адрес, ТекстПисьма)
Показать
(1) если это ручное изменение, то в форме есть после записи
если это программное изменение
как вариант
при записи создаете и запускаете фоновое задание с параметрами (если изменился реквизит)
в параметры передаете значение реквизита до изменения, сам документ и если нужно еще какие-то доп. значения
в процедуре выполнения фонового задания делаете паузу на 10-20 секунд (вдруг какая-то ошибка возникла при записи)
сравниваете реквизит со значением в параметре и если действительно он поменялся, то тогда отправляете письмо
как вариант
создаете план обмена))))
вешаете подписки на события и там уже смотрите, если реквизит поменялся, то тогда в получатели добавляете узел обмена.. или удаляете из получателей (смотря как реализуете)
создаете регламентное задание, которое через время будет запускаться и обрабатывать все документы из узла
не забываем чистить узел
если это программное изменение
как вариант
при записи создаете и запускаете фоновое задание с параметрами (если изменился реквизит)
в параметры передаете значение реквизита до изменения, сам документ и если нужно еще какие-то доп. значения
в процедуре выполнения фонового задания делаете паузу на 10-20 секунд (вдруг какая-то ошибка возникла при записи)
сравниваете реквизит со значением в параметре и если действительно он поменялся, то тогда отправляете письмо
как вариант
создаете план обмена))))
вешаете подписки на события и там уже смотрите, если реквизит поменялся, то тогда в получатели добавляете узел обмена.. или удаляете из получателей (смотря как реализуете)
создаете регламентное задание, которое через время будет запускаться и обрабатывать все документы из узла
не забываем чистить узел
Вакансии
Разработчик 1С (от middle до senior), до 300 К gross
Санкт-Петербург
зарплата от 195 000 руб. до 300 000 руб.
Полный день
Санкт-Петербург
зарплата от 195 000 руб. до 300 000 руб.
Полный день