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

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

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

Разбор типовой ошибки при создании напоминания

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


НапоминаниеПользователю = РегистрыСведений.НапоминанияПользователя.СоздатьМенеджерЗаписи();
НапоминаниеПользователю.Пользователь = ДокВРегистре; // Ошибка 1
НапоминаниеПользователю.ВремяСобытия = ТекущаяДата() + 30; // Ошибка 2
НапоминаниеПользователю.СрокНапоминания = ТекущаяДата() + 30;
НапоминаниеПользователю.Описание = "Необходимо выйти";
НапоминаниеПользователю.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.ВУказанноеВремя;
НапоминаниеПользователю.ИнтервалВремениНапоминания = 0;
НапоминаниеПользователю.Записать();

Выясним причины некорректной работы этого кода:

  1. Неверное заполнение измерения Пользователь: В коде выше в качестве пользователя передается ссылка на документ (ДокВРегистре). Однако это измерение должно содержать исключительно ссылку на справочник Пользователи. Если записать в это поле другой объект, система просто не «увидит» это напоминание для текущего авторизованного сотрудника.
  2. Короткий интервал времени: Прибавление числа 30 к текущей дате в 1С означает 30 секунд. Учитывая механизмы опроса системы, о которых мы поговорим ниже, напоминание с таким коротким сроком может быть «пропущено» или обработано как уже просроченное.
  3. Отсутствие связи с источником: В регистре НапоминанияПользователя есть реквизит Источник. Именно туда следует записывать ссылку на документ или задачу, к которой относится напоминание, чтобы пользователь мог открыть этот объект из окна уведомления.

Механизм опроса: почему уведомление не приходит мгновенно?

Проанализируем ситуацию с точки зрения архитектуры платформы. В 1С (особенно в решениях на базе БСП) не реализована технология мгновенной доставки Push-уведомлений от сервера к клиенту для этого регистра. Вместо этого используется механизм опроса (polling).

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

Важные нюансы работы обработчика ожидания:

Как правильно создавать напоминания через API БСП

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

Пример правильного кода:


ПараметрыНапоминания = Новый Структура;
ПараметрыНапоминания.Вставить("Пользователь", Пользователи.ТекущийПользователь());
ПараметрыНапоминания.Вставить("ВремяСобытия", ТекущаяДата() + 600; // Напоминание через 10 минут
ПараметрыНапоминания.Вставить("СпособУстановкиВремениНапоминания", Перечисления.СпособыУстановкиВремениНапоминания.ВУказанноеВремя);
ПараметрыНапоминания.Вставить("Описание", "Срочно проверить статус отгрузки!");
ПараметрыНапоминания.Вставить("Источник", СсылкаНаДокумент);
ПараметрыНапоминания.Вставить("ИмяИнтервала", "");

НапоминанияПользователяСлужебный.ПодключитьНапоминание(ПараметрыНапоминания);

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

Особенности работы «для другого пользователя»

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

Если вам требуется мгновенное уведомление другого пользователя, стандартный механизм напоминаний БСП для этого не предназначен. В таких случаях лучше рассмотреть использование Системы взаимодействия (встроенный мессенджер 1С), которая работает по протоколу WebSocket и доставляет сообщения мгновенно.

Настройка интервалов проверки

Если задержка в 5-10 минут критична для бизнес-процесса, можно попробовать изменить настройки интервала проверки. Рассмотрим, где это можно сделать:

  1. Хранилище общих настроек: В некоторых конфигурациях интервал проверки хранится в общих настройках. Можно программно изменить его значение для конкретного пользователя, используя ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиНапоминаний", "ИнтервалПроверкиНапоминаний", НужноеЗначениеВСекундах).
  2. Правка кода (не рекомендуется): В крайнем случае, можно изменить константу или жестко заданное значение интервала в модуле НапоминанияПользователяГлобальный, найдя вызов ПодключитьОбработчикОжидания. Однако помните, что слишком частый опрос (например, каждые 5 секунд) может существенно замедлить работу клиентского приложения на слабых ПК.

Советы по отладке и диагностике

Чтобы выяснить точную причину, почему напоминание не появляется, рекомендуем выполнить следующие шаги:

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

← На главную