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