Как реализовать систему напоминаний для пользователей в самописной конфигурации 1С?

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

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

Выбор архитектуры: хранилище данных

Для начала определимся с местом хранения заметок. Использовать объект Задачи, как предлагалось в обсуждении, бывает избыточно, если вы не планируете строить сложные бизнес-процессы с маршрутизацией. Наилучшим выбором станет независимый РегистрСведений. Назовем его, например, НапоминанияПользователей.

Разберем, какие данные нам понадобятся в структуре этого регистра:

  1. Измерения:
    • Пользователь (тип СправочникСсылка.Пользователи) — чтобы система понимала, кому адресовано напоминание.
    • ДатаВремяСрабатывания (тип Дата) — момент, когда уведомление должно стать активным.
  2. Ресурсы:
    • ТекстНапоминания (тип Строка) — содержание сообщения.
    • Выполнено (тип Булево) — признак завершенности задачи.

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

Механизм отправки: регламентное задание

Чтобы система «ожила», нам необходимо создать РегламентноеЗадание. Оно будет работать на стороне сервера и периодически проверять актуальные записи. Разберем логику работы серверной процедуры:


Процедура ПроверитьНапоминания() Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Напоминания.Пользователь КАК Пользователь,
        |   Напоминания.ТекстНапоминания КАК Текст
        |ИЗ
        |   РегистрСведений.НапоминанияПользователей КАК Напоминания
        |ГДЕ
        |   Напоминания.Выполнено = ЛОЖЬ
        |   И Напоминания.ДатаВремяСрабатывания <= &ТекущаяДата";
        
    Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
    Результат = Запрос.Выполнить();
    // Далее логика отправки (например, запись в регистр для оповещения или отправка по почте)
КонецПроцедуры

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

Решение проблемы с вводом времени

При создании формы для ввода напоминания вы можете столкнуться с тем, что время при вводе сбрасывается на нули (например, при попытке ввести 16:22). Это классическая проблема настройки формата элемента управления.

Чтобы исправить ситуацию, проанализируем настройки поля ввода в конфигураторе:

  1. Выберите элемент управления, связанный с датой и временем.
  2. Перейдите в палитру свойств.
  3. Найдите свойство Формат.
  4. Установите значение формата, которое явно указывает на необходимость отображения времени, например: ДФ='dd.MM.yyyy HH:mm'.

После этой настройки 1С будет корректно воспринимать ввод времени и не сбрасывать его к началу суток. Если вы используете управляемые формы, убедитесь, что в свойстве ФорматРедактирования также указаны соответствующие параметры маски ввода.

Почему не стоит «изобретать велосипед»?

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

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

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

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

← На главную