Как реализовать регулярные уведомления по условию в 1С:Документооборот

Программист 1С v8.3 (Управляемые формы) 1С:Документооборот IT и автоматизация бизнеса
← На главную

При автоматизации процессов в 1С:Документооборот часто возникает задача отправки напоминаний пользователям, если в документе не заполнено определенное поле, либо если документ завис на определенном этапе более заданного количества дней. Разберем архитектурные особенности подсистемы событий и выясним, какой механизм лучше выбрать для реализации периодических уведомлений по расписанию.

Ограничения подсистемы бизнес-событий и детекторов

Рассмотрим стандартный механизм бизнес-событий. Для создания пользовательского уведомления по событию в конфигурации предусмотрена цепочка элементов:

  1. Создание вида бизнес-события.
  2. Создание детектора события, где программно проверяются условия (возвращается Результат = Истина).
  3. Настройка обработчика события и подписки на него.
  4. Включение регламентных заданий по обработке детекторов и очереди событий.

Проанализируем ключевую особенность работы детекторов: они срабатывают в момент записи или изменения объектов в базе данных. Если требуется отслеживать пассивное ожидание (например, с момента создания прошло две недели, а реквизит так и остался пустым), объект физически не перезаписывается. Соответственно, событие записи не происходит, детектор не запускается и не может зафиксировать факт просрочки. Поэтому подсистема бизнес-событий не предназначена для периодического контроля по времени.

Реализация через дополнительную обработку по расписанию

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

Разберем алгоритм работы обработки по шагам:

  1. Выборка данных: формируем запрос к документам с фильтром по условиям (например, дата создания старше 14 дней, дополнительный реквизит не заполнен, документ не помечен на удаление и не находится в архиве).
  2. Определение адресатов: получаем ответственных сотрудников по каждому документу.
  3. Формирование записей в очереди: вместо прямой отправки через почтовые библиотеки 1С помещаем задачи на отправку в типовой регистр сведений ОчередьУведомлений.

Использование регистра «Очередь уведомлений»

Рассмотрим, почему предпочтительнее использовать штатную очередь уведомлений вместо прямой отправки писем через почтовый профиль:

  1. Учет персональных настроек: система самостоятельно выберет удобный для пользователя канал доставки (электронная почта, всплывающее окно в программе, SMS или чат-бот), а также учтет рабочее время и периодичность отправки.
  2. Отказоустойчивость: при временной недоступности почтового сервера штатное регламентное задание Уведомление пользователей о произошедших событиях автоматически повторит попытку отправки позже.
  3. Единая история: все отправленные сообщения фиксируются в типовых журналах и протоколах программы.

Посмотрим на пример программного добавления записи в регистр сведений ОчередьУведомлений:


МенеджерЗаписи = РегистрыСведений.ОчередьУведомлений.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Период = ТекущаяДатаСеанса();
МенеджерЗаписи.Объект = Выборка.Ссылка;
МенеджерЗаписи.Пользователь = Выборка.Ответственный;
МенеджерЗаписи.ВидСобытия = ПредопределенноеЗначение("Справочник.ВидыБизнесСобытий.ПустаяСсылка");
МенеджерЗаписи.КраткоеСодержание = "Не заполнен обязательный реквизит документа";
МенеджерЗаписи.Текст = "В документе " + Строка(Выборка.Ссылка) + " не заполнен обязательный реквизит. Пожалуйста, внесите данные.";
МенеджерЗаписи.Записать();

Рекомендации по оптимизации и защите от дублей

При внедрении ежедневных проверок необходимо учесть несколько важных технических аспектов:

  1. Защита от спама и повторов: если регламентное задание запускается ежедневно, а напоминание требуется слать реже (например, раз в неделю), фиксируйте дату последнего отправленного оповещения во вспомогательном регистре сведений или дополнительном реквизите.
  2. Оптимизация запроса: не сканируйте всю таблицу документов. Накладывайте жесткие фильтры по периоду, проверяйте статус состояния документа (исключайте завершенные и закрытые процессы) и используйте индексированные поля.
  3. Права доступа: формируя текст оповещения с навигационной ссылкой на документ, убедитесь, что получатель уведомления обладает правами на чтение данного объекта.
← На главную