Механизм оповещений для конфигураций на базе 8.1

Опубликовал Сисой Сисой (Сисой) в раздел Программирование - Практика программирования

Оповещения - инструмент событийного анализа. Имеются почти во всех ERP-системах.
Администратор системы (или пользователь с высоким уровнем полномочий) может задать условия, при наступлении которых производится информирование группы пользователей встроенными средствами информационной системы (панель оповещений) или по электронной почте.
Например, можно настроить отправку сообщений всякий раз, когда в системе будет проводиться приходный кассовый ордер на сумму более 10 000 рублей

Механизм оповещения базируется на штатном механизме версионирования типовых конфигураций 1С на платформе 8.1.
Разработка велась на сильно измененной версии УПП 1.1, в которую были перенесены механизмы версионирования из УПП 1.2

 Ограничения текущей версии

  • В рамках одного оповещения анализ условий выполняется только по одному объекту ИБ (элемент справочника, документ);
  • Анализируются только шапки документов и элементов справочников (возможна доработка для анализа табличных частей); 
  • Версия содержит мелкие ошибки при копировании настроек, не мешающие понять работоспособность механизма

 Алгоритм работы системы оповещений

В справочнике "Регистрация запросов на оповещения" настраиваются условия, при наступлении которых возникают оповещения.
Оповещение может отрабатываться, только если в конфигурации включен режим версионирования объектов и нужный вид справочника или документа версионируется.

Возможны три варианта оповещений:

  • При вводе нового объекта;
  • При любом изменении объекта;
  • При возникновении ситуации, когда значения реквизитов объекта удовлетворяют заданым условиям.

Анализ возникновения событий производит регламентное задание УстановитьОповещения. Оно считывает все изменения контролируемых системой объектов с момента последнего запуска этого задания, сравнивает их состояния с предыдущим. Выполнение анализа протоколируется в журнале регистрации.

  • Если требуется информирование пользователя,  в регистр сведений РегистрацияОповещений помещается информация о наступлении события, контролируемого системой оповещений.
  • Если у пользователя задан параметр ОткрыватьПриЗапускеСписокОповещений, окно оповещений открывается при запуске (обработка ТекущиеОповещения).
  • Если у пользователя задан параметр АвтоматическиОбновлятьСписокОповещений, каждые 10 минут производится анализ регистра сведений РегистрацияОповещений.
  • Пользователь может отказаться от дальнейшего показа оповещения, при этом изменяется реквизит БольшеНеНапоминать в регистре сведений РегистрацияОповещений.

 Инструкция по внедрению функциональности

Прилагается cf-файл каркасной конфигурации, которую необходимо аккуратно объединить с имеющейся:

  1. В общем модуле Оповещения необходимо заменить код
//ОтправитьПисьмоSMTPБезУведомлений(СписокАдресов, ТемаСообщения, ТекстСообщения);

на вызов используемой в Вашей конфигурации процедуры отправки почтовых сообщений.

  1. В план видов характеристик НастройкиПользователей нужно добавить предопределенные элементы
    • ОткрыватьПриЗапускеСписокОповещений
    • АвтоматическиОбновлятьСписокОповещений
  2. В модуль приложения в процедуру ПриНачалеРаботыСистемы() добавить
Если ПолучитьЗначениеПоУмолчанию(глТекущийПользователь, "ОткрыватьПриЗапускеСписокОповещений") = Истина Тогда
    Обработки.ТекущиеОповещения.ПолучитьФорму().Открыть();
КонецЕсли;
Если ПолучитьЗначениеПоУмолчанию(глТекущийПользователь, "АвтоматическиОбновлятьСписокОповещений") = Истина Тогда
    ПодключитьОбработчикОжидания("ПроверкаОповещений", 6000) ;
КонецЕсли; 

Использование неглобальных модулей

Внимание!
В Вашей конфигурации часть используемых в моей конфигурации функций и процедур может находиться в неглобальных модулях. Проведите синтаксический контроль кода и добавьте префиксы, если необходимо.

Обработчик ПроверкаОповещений можно разместить в любом глобальном модуле:

#Если Клиент Тогда
Процедура ПроверкаОповещений() Экспорт

    Оповестить("ОбновитьСписокОповещений");

КонецПроцедуры
#КонецЕсли

Если в Вашей конфигурации используется ограничение прав доступа (например, по организации), необходимо ограничить оповещения только доступными объектами. Например, в процедуре ЗарегистрироватьОповещение может быть код, похожий на вот этот:

// во-первых, отфильтруем по организации, недоступные отбросим
Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Подписка.ВидДокумента))
    И Подписка.ВидДокумента.Метаданные().Реквизиты.Найти("Организация")<>Неопределено Тогда
    ДоступныеО=РегистрыСведений.СписокОрганизацийДляПросмотра.Выбрать(Новый Структура("Пользователь",Пользователь.Пользователь)); // это специфический для моей конфигурации регистр
    ОрганизацияДоступна=Ложь;
    ОрганизацияДокумента=Претендент.Объект["Организация"];
    Пока ДоступныеО.Следующий() Цикл
        Если ДоступныеО.Организация=ОрганизацияДокумента Тогда
            ОрганизацияДоступна=Истина;
        КонецЕсли;
    КонецЦикла;
    Если ОрганизацияДоступна=Ложь Тогда
        Продолжить; // не показываем
    КонецЕсли;
КонецЕсли;

Скачать файлы

Наименование Файл Версия Размер
Оповещения
.cf 40,80Kb
19.11.14
203
.cf 40,80Kb 203 Скачать

См. также

Добавить вознаграждение
Комментарии
1. Михаил Ражиков (tango) 466 29.05.10 16:27 Сейчас в теме
мехнизм оповещений в 8х - это Задачи, нет?
2. Eugeneer (Eugeneer) 29.05.10 16:55 Сейчас в теме
3. Eugeneer (Eugeneer) 29.05.10 16:59 Сейчас в теме
Вот аналогичная разработка с системой оповещения
Управление задачами (с системой оповещения)
http://infostart.ru/public/60511/
4. Басир Мухамедкулов (basicm) 31.05.10 20:24 Сейчас в теме
Во-первых. Не 8.1, а 8.0.
Во-вторых. Регистра сведений на который вы ссылаетесь в модуле обработки не существует.
ЗЫ Сыровато для того чтоб выкладывать на общее обозрение
5. Сисой Сисой (Сисой) 77 31.05.10 22:02 Сейчас в теме
8.0?
А мужики-то и не знали, что подписки на событие (для версионирования) и фоновые задания появились еще в 8.0....
Наличие РС проверю.
Оно не сырое, работает нормально уже больше полугода в УПП на 400 юзеров, просто погрешности при вырезании кусков из конфы.