В процессе работы с конфигурацией «1С:Документооборот» часто возникает важная организационная проблема: пользователи не находятся в программе непрерывно, из-за чего оперативно пришедшие задачи остаются незамеченными. Чтобы решить эту проблему, необходимо настроить систему своевременного оповещения. В данной статье мы подробно разберем, как организовать различные каналы уведомлений — от стандартной электронной почты до интерактивных всплывающих окон на рабочем столе и интеграции с мессенджерами.
Самым простым и не требующим изменения конфигурации способом является отправка уведомлений на электронную почту пользователя. Рассмотрим по шагам, как правильно настроить этот механизм в «1С:Документооборот»:
E-mail.Часто после выполнения всех настроек почта все равно не уходит, а регламентные задания «Отработка произошедших бизнес-событий» или «Отправка уведомлений» выполняются только при ручном запуске. Проанализируем, в чем может быть причина в клиент-серверном варианте работы базы:
Основной причиной блокировки автоматического запуска является включенная опция блокировки регламентных заданий на уровне СУБД или кластера серверов. Чтобы это исправить, выполним следующие действия:
Если стандартного почтового уведомления недостаточно и требуется привлечь максимальное внимание пользователя (вывести окно поверх всех запущенных программ), можно прибегнуть к кастомизации системы. Разберем программное решение, реализующее «непотопляемое» окно предупреждения.
Для реализации этой схемы мы можем задействовать подписку на событие создания задачи и обработчик ожидания на клиенте. Посмотрим на пример кода, который инициализирует всплывающее окно средствами операционной системы через COM-объект:
// Код для вызова системного окна сообщений Windows
ScrCtrl = Новый COMОбъект("MSScriptControl.ScriptControl");
ScrCtrl.Language = "VBscript";
ScrCtrl.ExecuteStatement("msgbox(""Вам поступила новая задача в 1С:Документооборот!"", 262144, ""Внимание!"")");
Параметр 262144 в функции msgbox является системной константой Windows (vbSystemModal), которая заставляет окно отображаться поверх абсолютно всех запущенных приложений, гарантируя, что пользователь его увидит.
Чтобы этот код срабатывал вовремя, нам необходимо настроить обработчик ожидания, который будет периодически опрашивать базу на наличие новых задач. Реализуем эту логику в модуле управляемого приложения:
Процедура ПриНачалеРаботыСистемы()
// Подключаем проверку каждые 5 минут (300 секунд)
ПодключитьОбработчикОжидания("ПроверитьНовыеЗадачиПользователя", 300);
КонецПроцедуры
Процедура ПроверитьНовыеЗадачиПользователя() Экспорт
// Здесь вызывается серверная функция, проверяющая наличие непрочитанных задач
ЕстьНовыеЗадачи = ПроверитьНаличиеНовыхЗадачНаСервере();
Если ЕстьНовыеЗадачи Тогда
ScrCtrl = Новый COMОбъект("MSScriptControl.ScriptControl");
ScrCtrl.Language = "VBscript";
ScrCtrl.ExecuteStatement("msgbox(""Вам поступила новая задача! Пожалуйста, проверьте список задач."", 262144, ""Новое уведомление"")");
КонецЕсли;
КонецПроцедуры
Для того чтобы система понимала, какие именно задачи считать «новыми», рекомендуется создать простой независимый Регистр сведений (например, «НовыеЗадачиПользователей») с измерениями Пользователь и Задача. При создании задачи бизнес-процессом мы делаем запись в этот регистр. В момент, когда обработчик ожидания срабатывает и показывает окно, запись из регистра удаляется (или флаг меняется на противоположный), что предотвращает повторное появление одного и того же уведомления.
Еще одним эффективным каналом доставки является отправка мгновенных сообщений в корпоративный мессенджер. Рассмотрим архитектуру решения на примере протокола Jabber (XMPP), который легко адаптируется под любые современные корпоративные чаты:
Проанализируем структуру разбора входящего сообщения от пользователя в процедуре обработки внешнего события:
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Если Источник = "МессенджерКомпонента" И Событие = "ПолученоСообщение" Тогда
// Переменная Данные содержит текст ответа, например: "Заявка 1205 Утверждаю"
СтрокаПолучена = СокрЛП(Данные);
// Производим парсинг строки
МассивСлов = ОбщегоНазначенияКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаПолучена, " ");
Если МассивСлов.Количество() >= 2 Тогда
НомерЗадачи = МассивСлов[1];
РешениеПользователя = МассивСлов[2];
// Вызываем серверный метод для автоматического исполнения задачи
ОбработатьРешениеИзМессенджераНаСервере(НомерЗадачи, РешениеПользователя);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Если вы работаете на современных версиях платформы 1С:Предприятие 8.3, наиболее надежным и перспективным вариантом является использование штатного механизма — Системы взаимодействия. Этот инструмент позволяет отказаться от сторонних компонентов и сомнительных скриптов. Оповещения будут приходить непосредственно в интерфейсе платформы в виде всплывающих тостов (карточек оповещений) в правом нижнем углу экрана, даже если окно приложения свернуто.
Для реализации этого механизма выполните следующие шаги:
Таким образом, комбинируя стандартные возможности платформы и небольшие доработки механизмов оповещения, мы можем создать максимально удобную и эффективную среду для совместной работы пользователей, исключающую пропуск важных бизнес-задач.