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