оповещение пользователей 1с

Задача:
При создании заказа поставщикам(проведении) оповещать менеджеров что товар с такого-то завода уже в пути.
Сообщение выводить определенным пользователям.
Фиксировать время ознакомления.
Если пользователь просто закроет окно, оповещение снова скоро появится. И так пока он не нажмет кнопку "Ознакомлен(а)".
Данные по ознакомлению пользователей записывать и хранить в 1С.


Выполнение:


1 Подключаем обработчик ожидания в процедуре "При начале работы системы". Чтобы сильно не грузить процессор вызываем обработчик "ПроверкаНовыхОповещений" раз в 5мин.
Код обработчика:

процедура ПроверкаНовыхОповещений() экспорт
запрос=новый запрос;
запрос.Текст= "ВЫБРАТЬ
              |	СообщенияПользователю.Сообщение,
              |	СообщенияПользователю.Документ
              |ИЗ
              |	РегистрСведений.СообщенияПользователю КАК СообщенияПользователю
              |ГДЕ
              |	СообщенияПользователю.Пользователь = &текПользователь
              |	И СообщенияПользователю.ознакомлен = ЛОЖЬ";
запрос.УстановитьПараметр("текПользователь",ПараметрыСеанса.ТекущийПользователь);
выб=запрос.Выполнить().Выбрать();
пока выб.Следующий() цикл 
	Попытка
ф=обработки.СообщениеПользователю.ПолучитьФорму("Форма");
ф.сообщение=выб.сообщение;
ф.документ=выб.документ;
ф.ОткрытьМодально(10);
исключение
КонецПопытки;

конецЦикла;

	
конецПроцедуры


2 Создаем регистр сведений, где будем хранить список пользователей, которых нужно оповещать:




3 Создадим регистр сведений куда будем писать сообщения для пользователей(автоматически), и где регистрируется дата, время и действие пользователя, что он ознакомился с сообщением.


4 Создадим обработку, которая будет выводить сообщение пользователю.
Для ее формы сделаем параметры "Сообщение" и "Документ".
Обработчиком заполняем эти параметры и выводим пользователю.
Когда пользователь нажмет "Ознакомлен(а)", обработка запишет это событие и время ознакомления в регистр



Процедура ОзнакомленНажатие(Элемент)
	запрос=новый запрос;
	запрос.Текст="ВЫБРАТЬ
	             |	СообщенияПользователю.Пользователь,
	             |	СообщенияПользователю.Документ
	             |ИЗ
	             |	РегистрСведений.СообщенияПользователю КАК СообщенияПользователю
	             |ГДЕ
	             |	СообщенияПользователю.Пользователь = &Пользователь
	             |	И СообщенияПользователю.Документ = &Документ";
	запрос.УстановитьПараметр("Пользователь",ПараметрыСеанса.ТекущийПользователь);
	запрос.УстановитьПараметр("Документ",документ);
	Выборка=запрос.Выполнить().Выбрать();
	менЗаписи=РегистрыСведений.СообщенияПользователю.СоздатьМенеджерЗаписи();
	 Пока Выборка.Следующий() Цикл
       	менЗаписи.Документ=выборка.документ;
		менЗаписи.Пользователь=выборка.пользователь;
		менЗаписи.Прочитать();
		МенЗаписи.Ознакомлен=истина;
		МенЗаписи.датаОзнакомления=ТекущаяДата();
		МенЗаписи.Записать(истина);
    КонецЦикла;
Закрыть();
КонецПроцедуры


Для УТ11 делается по такому же алгоритму.