Глобальная задача: в справочнике, если он был изменен при "Сохранить" и/или "Сохранить и закрыть", то отправить почтовое сообщение, причем один раз.
Сделал функцию отправки почтового сообщения (работает без проблем)
Разместил в модуле объекта код "ПриЗаписи(Отказ)":
Если Не Отказ Тогда
ОтправитьУведомление();
КонецЕсли;
Всё работает. Но столкнулся с такой проблемой: если нажать сначала "Сохранить", а потом на "Сохранить и закрыть", то уведомление отправляется дважды.
Требуется отправить сообщение единожды, т.е. как-то проверить: сли справочник модифицирован, то при записи отправлять уведомление, если, справочник не изменялся, то никаких уведомлений отправлять не надо...
Посоветуйте как лучше сделать? Модифицированность в модуле объекта не работает....
Хотел это перенести это в модуль формы, но не знаю на какое событие правильно повесить оповещение...
(1) Если в модуле объекта - пишите функцию сверки данных объекта и данных ссылки. Если в форме - то у вас есть Модифицированность мовместно с ПослеЗаписи() и ПослеЗаписиНаСервере(). Исходя из того, что сейчас вы работаете в модуле объекта, то отправка почты происходит на сервере. Соответственно - ПослеЗаписиНаСервере()
(5) Если бы я имел ввиду код - я бы привел программный код в соответствующем теге и оформлении. Я описал схематический смысл доступа к реквизитам и сравления объекта и ссылки. То, как вы назовете потом в коде Объект или Ссылку - вообще не имеет значения (можно назначить эти типы разным переменным для читабельности кода. Например
(4) Это если сравнивать все реквизиты, их много... Нет ли более простого способа, когда сравнивается справочник в БД и справочник открытый и измененный ?
Не совсем понятна задача: рассылка должна быть только при интерактивном изменении или и при программном?
При программном, очевидно, никаких "Записать и закрыть" не будет.
Если только интерактивно, то почему бы не проверять модифицированность формы?
Ничто не мешает пользователю вначале нажать "Записать", потом изменить данные и нажать "Записать и закрыть" - логично, что этом случае рассылка должна уйти 2 раза.
Другое дело, что фактического изменения данных может и не быть (установил новое значение, потом вернул старое), тогда да, только все реквизиты проверять. Ну или только те, изменение которых важно.
Ничто не мешает пользователю вначале нажать "Записать", потом изменить данные и нажать "Записать и закрыть" - логично, что этом случае рассылка должна уйти 2 раза.
Именно. Отсюда только решение записывать изменения в регистр, а отправлять рассылку регламентным заданием с периодичностью. В этом случае в регистре можно брать исходное состояние из первой записи, и измененное из последней, сравнивать их, по необходимости формировать письмо, и удалять нафиг записи из регистра....
Другое дело, что фактического изменения данных может и не быть (установил новое значение, потом вернул старое), тогда да, только все реквизиты проверять. Ну или только те, изменение которых важно.
В подписке "ПередЗаписью" сравнить объект с предыдущей версией (учесть, что предыдущей версии может не быть) и, если есть различия - слать письмо.
Или две подписки: ПередЗаписью сличить с предыдущей версией и поместить флаг в ДополнительныеСведения, а ПослеЗаписи флаг проверить и, если нужно, выслать письмо.