Предлагаю Вашему вниманию универсальный механизм уведомления заинтересованных лиц о наступлении момента, связанного с датой в объекте системы.
Например, можно уведомлять участников о предстоящем совещании, ответственных об истечении срока договора, отдел кадров и сотрудника об истечении срока действия сертификата/аттестации.
Все настройки производятся в одном справочнике "Настройка уведомлений о наступлении даты" ("UDL_DateNotifications").
На этой вкладке настраиваются отслеживаемый реквизит и фильтр объектов, относительные даты уведомлений.
Можно указать любой реквизит с типом дата из карточки или детального раздела любого справочника или ТКД.
Фильтр указывается в формате SQL используется в where. Можно использовать alias'ы MBAnalit, SBEDoc и MBAnValR...12, SBEDocAcc, SBEDocVer, SBEDocValR...6, если отслеживается реквизит из детального раздела.
В табличной части указываются сдвиги (offset) относительно даты в объекте. При расчете необходимости уведомления берутся даты всех подходящих объектов, по этим сдвигам вычисляются относительные даты, и, если рассчитанная дата совпадает с текущей, формируется уведомление.
Типы уведомления: "Один раз" или "Ежедневно". "Один раз": берется сдвиг из реквизита "Старт периода". "Ежедневно": уведомления формируются ежедневно в течение периода, рассчитанного с использованием сдвигов "Старт периода" и "Конец периода". К примеру, можно уведомлять сотрудника за 30, 15, 5 дней до срока окончания действия сертификата и каждый день после истечения срока, пока не будет установлена новая дата окончания действия.
В "Статические подписчики" можно указывать работников или пользователей.
В "Подписчики из объекта" указываются реквизиты типа справочник "Пользователи" или "Работники" карточки или детального раздела отслеживаемого объекта.
Для email-уведомлений используется стандартный реквизит "Рабочий Email" ("Строка2") из карточки работника.
Настройка для уведомлений Directum и email одинаковая. Email формируется в формате обычного текста, не HTML. Если тема или текст не заполнены, то уведомление в этом формате не сформируется.
В шаблонах можно использовать реквизиты объекта и связанных с ним справочников, а также гиперссылку на объект [URL]. Для обращения к реквизитам связанных справочников следует указывать их через '.' после имени реквизита в объекте (можно рекурсивно). Пример: [Работник.Строка] - должность председателя совещания.
Сценарий "Обработать уведомления о наступлении даты" ("UDL_ProcessDateNotifications") необходимо запускать в планировщике на сервере.
Для фиксации сгенерированных решением уведомлений используется SQL-таблица. Поэтому сценарий можно запускать сколь угодно часто.
Для исправления ситуаций, когда сценарий по каким-то причинам не отработал, существует константа "UDL_NotificationsTriggerPeriod". Если значение константы отлично от 0, то сценарий генерирует уведомления за последние <значение константы> дней. При этом, если по одному объекту за последние несколько дней было несколько одинаковых уведомлений, то отправляется только одно, без дублей.
Если у объекта изменилась дата или на вкладке "Триггер" удалили строку и добавили новую (даже с такими же значениями), то информация из SQL-таблицы о сгенерированных ранее уведомлениях игнорируется.
Для отправки email используется стандартная функция MailSend(), настройки исходящей почты берутся из констант "ПЧИМОТПР", "ПЧОТПР", "MailOutgoingSettings".
Пакет разработки (лицензия MIT): Уведомления о наступлении даты.zip
Для установки решения импортируйте пакет разработки и запустите сценарий "Установка модуля "Оповещение о наступлении даты"" под пользователем с парольной аутентификацией, правами на создание таблиц и выдачи прав на них.
Этот сильно упрощенный вариант существующего решения сделан специально для публикации. Основное, чем хотел поделиться - механизм отслеживания даты и генерация какого-то события, если сработал триггер. В данном случае событие = отправка уведомления.
Александр - ждем публикации решения на Awards. Поощрять небольшие решения - это тоже задача конкурса. Такие решения будут рассматриваться экспертами отдельно. Решения на конкуре получают внимание и плюсы от сообщества.
Авторизуйтесь, чтобы написать комментарий