Почему не срабатывают программно созданные напоминания в 1С и как это исправить?

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

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

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


&НаКлиенте
Процедура ОповеститьУчастников(Команда)
    КоличествоУчастников = Объект.Участники.Количество();
    МассивУчастники = Новый массив;
    МассивУчастники = объект.Участники;

    Если КоличествоУчастников > 1 Тогда
        СозданиеСообщения (МассивУчастники, КоличествоУчастников);
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура СозданиеСообщения (МассивУчастники, КоличествоУчастников);
    Счётчик = 0;
    Пока Счётчик < КоличествоУчастников Цикл
        РСНапоминания = РегистрыСведений.НапоминанияПользователя.СоздатьМенеджерЗаписи();
        РСНапоминания.Пользователь = МассивУчастники[Счётчик].Участник;
        РСНапоминания.ВремяСобытия = ТекущаяДата()+30;
        РСНапоминания.Источник = Источник; // Предполагается, что переменная Источник определена ранее
        РСНапоминания.СрокНапоминания = ТекущаяДата()+30;
        РСНапоминания.Описание = "Пользователь: " + объект.БронирующиеЛицо + " приглошает вас на событие в помощение: " + объект.Зал + " ко времени: " + объект.Дата;
        РСНапоминания.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.ВУказанноеВремя;
        РСНапоминания.ИнтервалВремениНапоминания = 0;
        РСНапоминания.ПредставлениеИсточника = объект.Ссылка;
        РСНапоминания.Записать();
        Счётчик = Счётчик + 1;
    КонецЦикла;
КонецПроцедуры

Проблема в том, что, несмотря на корректное выполнение этого кода и создание записей, ничего не происходит. Выясним причину.

Механизм работы напоминаний: не только регистр

Ключевая ошибка в понимании работы системы напоминаний — это предположение, что одной лишь записи в регистр сведений НапоминанияПользователя достаточно для появления окна. На самом деле, это только первый шаг. Весь механизм состоит из трех этапов:

  1. Создание записи: Ваш код или интерактивные действия пользователя создают запись в регистре, где хранится информация о том, КОМУ, КОГДА и О ЧЕМ нужно напомнить.
  2. Обработка записи: Специальный фоновый процесс (регламентное задание) должен периодически проверять регистр, находить записи, у которых подошло время, и готовить их к отправке.
  3. Доставка оповещения: Другой фоновый процесс должен взять подготовленное оповещение и доставить его от сервера к конкретному клиентскому сеансу пользователя.

Таким образом, если второй или третий этап не работают, то созданные напоминания так и останутся "висеть" в базе данных, никогда не достигнув пользователя. За эти этапы отвечают регламентные задания.

Решение: проверка и настройка регламентных заданий

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

Разберем по шагам, что нужно сделать.

  1. Убедитесь, что записи создаются. Прежде всего, после выполнения вашего кода, откройте регистр сведений НапоминанияПользователя (через меню "Все функции") и проверьте, что там появились новые записи с нужными пользователями и временем. Если записи есть, значит, код отработал правильно, и проблема не в нем.
  2. Проверьте состояние регламентных заданий.

    Перейдите в раздел Администрирование -> Обслуживание -> Регламентные операции -> Регламентные и фоновые задания.

    В открывшемся списке найдите два указанных выше задания:

    • Обработка напоминаний: Это задание сканирует регистр и формирует очередь оповещений. Убедитесь, что напротив него стоит галочка "Включено" и настроено расписание. Для отладки можно поставить выполнение каждые 60-120 секунд.
    • Отправка серверных оповещений клиентам: Это задание доставляет готовые оповещения пользователям. Оно также должно быть включено и иметь регулярное расписание.

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

  3. Не изменяйте код регламентных заданий. В попытках исправить ситуацию может возникнуть соблазн открыть процедуру регламентного задания и добавить туда свой код. Этого делать категорически не следует. Стандартные задания уже содержат всю необходимую логику. Любое вмешательство может нарушить их работу.

Рекомендуемый способ создания напоминаний

Хотя прямая запись в регистр сведений работает, более правильным и надежным подходом является использование программного интерфейса (API), предоставляемого конфигурацией. Обычно для этого существуют специальные процедуры в общих модулях, например, в модуле РаботаСНапоминаниямиПользователя.

Использование таких процедур (например, ДобавитьНапоминаниеПользователю) предпочтительнее, так как:

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

В заключение, если ваши программно созданные напоминания не появляются, проблема с вероятностью 99% не в коде их создания, а в отключенных или некорректно настроенных регламентных заданиях, отвечающих за их обработку и доставку. Проверка и включение заданий Обработка напоминаний и Отправка серверных оповещений клиентам должны решить эту проблему.

← На главную