Справочник: почтовое уведомление если справочник изменен. Один раз

1. Arkadag 22.10.20 11:49 Сейчас в теме
Приветствую, Форумчане.
1с8.3.12, самопис, УФ

Глобальная задача: в справочнике, если он был изменен при "Сохранить" и/или "Сохранить и закрыть", то отправить почтовое сообщение, причем один раз.

Сделал функцию отправки почтового сообщения (работает без проблем)
Разместил в модуле объекта код "ПриЗаписи(Отказ)":

Если Не Отказ Тогда
	ОтправитьУведомление();
КонецЕсли;


Всё работает. Но столкнулся с такой проблемой: если нажать сначала "Сохранить", а потом на "Сохранить и закрыть", то уведомление отправляется дважды.
Требуется отправить сообщение единожды, т.е. как-то проверить: сли справочник модифицирован, то при записи отправлять уведомление, если, справочник не изменялся, то никаких уведомлений отправлять не надо...

Посоветуйте как лучше сделать? Модифицированность в модуле объекта не работает....

Хотел это перенести это в модуль формы, но не знаю на какое событие правильно повесить оповещение...
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. FatPanzer 22.10.20 11:56 Сейчас в теме
(1) Если в модуле объекта - пишите функцию сверки данных объекта и данных ссылки. Если в форме - то у вас есть Модифицированность мовместно с ПослеЗаписи() и ПослеЗаписиНаСервере(). Исходя из того, что сейчас вы работаете в модуле объекта, то отправка почты происходит на сервере. Соответственно - ПослеЗаписиНаСервере()
3. Arkadag 22.10.20 12:08 Сейчас в теме
(2)Сможете напомнить как сравнить данные объекта и ссылки в модуле объекта?
4. FatPanzer 22.10.20 12:09 Сейчас в теме
(3) Конечно. Объект.Реквизит = Ссылка.Реквизит.
5. antz 22.10.20 12:13 Сейчас в теме
(4) В модуле объекта будет ЭтотОбъект.Реквизит или просто Реквизит.
6. FatPanzer 22.10.20 12:18 Сейчас в теме
(5) Если бы я имел ввиду код - я бы привел программный код в соответствующем теге и оформлении. Я описал схематический смысл доступа к реквизитам и сравления объекта и ссылки. То, как вы назовете потом в коде Объект или Ссылку - вообще не имеет значения (можно назначить эти типы разным переменным для читабельности кода. Например
ИзмененныеДанные = ЭтотОбъект;
ИсходныеДанные = Ссылка;
и потом на протяжении еще 10050 тысяч строк кода пользоваться этими переменными для читабельности кода
ИзмененныеДанные.Реквизит = ИсходныеДанные.Реквизит;
7. Arkadag 22.10.20 12:21 Сейчас в теме
(4) Это если сравнивать все реквизиты, их много... Нет ли более простого способа, когда сравнивается справочник в БД и справочник открытый и измененный ?
8. FatPanzer 22.10.20 12:23 Сейчас в теме
(7) Есть. Называется "Цикл".
9. XAKEP 22.10.20 13:15 Сейчас в теме
(8)
вам сообщение ...
зайдите для ответа :)
10. AlekseiAdamov 181 22.10.20 14:44 Сейчас в теме
Не совсем понятна задача: рассылка должна быть только при интерактивном изменении или и при программном?
При программном, очевидно, никаких "Записать и закрыть" не будет.
Если только интерактивно, то почему бы не проверять модифицированность формы?
Ничто не мешает пользователю вначале нажать "Записать", потом изменить данные и нажать "Записать и закрыть" - логично, что этом случае рассылка должна уйти 2 раза.
Другое дело, что фактического изменения данных может и не быть (установил новое значение, потом вернул старое), тогда да, только все реквизиты проверять. Ну или только те, изменение которых важно.
11. FatPanzer 22.10.20 15:03 Сейчас в теме
(10)
Ничто не мешает пользователю вначале нажать "Записать", потом изменить данные и нажать "Записать и закрыть" - логично, что этом случае рассылка должна уйти 2 раза.
Именно. Отсюда только решение записывать изменения в регистр, а отправлять рассылку регламентным заданием с периодичностью. В этом случае в регистре можно брать исходное состояние из первой записи, и измененное из последней, сравнивать их, по необходимости формировать письмо, и удалять нафиг записи из регистра....

(10)
Другое дело, что фактического изменения данных может и не быть (установил новое значение, потом вернул старое), тогда да, только все реквизиты проверять. Ну или только те, изменение которых важно.
Да-да-да, все именно так.
12. dehro 7 23.10.20 14:45 Сейчас в теме
В подписке "ПередЗаписью" сравнить объект с предыдущей версией (учесть, что предыдущей версии может не быть) и, если есть различия - слать письмо.

Или две подписки: ПередЗаписью сличить с предыдущей версией и поместить флаг в ДополнительныеСведения, а ПослеЗаписи флаг проверить и, если нужно, выслать письмо.
13. Arkadag 23.10.20 18:13 Сейчас в теме
Нашел здесь функцию проверки на изменение. Поместил её в общие модули. Вызываю перед записью. Если не модифицирован, то не отправляю

https://forum.infostart.ru/forum9/topic187536/
Оставьте свое сообщение

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