Как реализовать периодические напоминания в мобильном приложении 1С

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

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

Понятие локальных уведомлений и их отличие от Push-уведомлений

Для начала проанализируем разницу между двумя типами уведомлений, доступными в 1С. Push-уведомления (доставляемые уведомления) приходят от внешнего сервиса или сервера. Они требуют наличия интернет-соединения и работы серверной части. Локальные уведомления создаются и управляются самой мобильной платформой внутри устройства. Это именно то решение, которое позволяет приложению работать автономно.

Для работы с ними используется объект ДоставляемоеУведомление. Несмотря на название, этот объект универсален и при правильной настройке превращается в локальное напоминание, которое сработает в заданное время, даже если приложение закрыто.

Настройка объекта уведомления для периодических повторов

Рассмотрим структуру объекта ДоставляемоеУведомление. Чтобы сделать напоминание периодическим, нам необходимо обратить внимание на свойство ИнтервалПовтора. Разберем по шагам, как программно создать такое напоминание:

  1. Создаем новый объект уведомления.
  2. Заполняем текст и заголовок сообщения.
  3. Устанавливаем дату и время первого появления.
  4. Задаем интервал повторения.

Посмотрим на пример кода, который инициализирует ежедневное напоминание:


НовоеУведомление = Новый ДоставляемоеУведомление;
НовоеУведомление.Заголовок = "Напоминание о задаче";
НовоеУведомление.Текст = "Пора проверить ежедневный отчет!";
НовоеУведомление.ДатаПоявленияУниверсальноеВремя = ТекущаяДата() + 3600; // Через час
НовоеУведомление.ИнтервалПовтора = 86400; // Количество секунд в сутках
НовоеУведомление.ЗвуковоеОповещение = ЗвуковоеОповещение.Стандартное;

ДоставляемыеУведомления.Добавить(НовоеУведомление);

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

Обработка события при нажатии на уведомление

Просто показать сообщение недостаточно — приложение должно отреагировать, когда пользователь нажмет на него. Для этого в Модуле управляемого приложения предусмотрен специальный обработчик ПриПолученииЛокальногоУведомления. Проанализируем, как это работает:

Когда пользователь открывает уведомление, управление передается в эту процедуру. Мы можем передать в свойство Данные структуру или соответствие, чтобы приложение «поняло», какой именно документ или задачу нужно открыть.


Процедура ПриПолученииЛокальногоУведомления(Уведомление, Локальное, Показано)
    Если Локальное Тогда
        // Извлекаем данные, которые мы заложили при создании
        ИдентификаторЗадачи = Уведомление.Данные.Получить("ИД");
        // Логика открытия нужной формы
        ОткрытьФорму("Справочник.Задачи.ФормаОбъекта", Новый Структура("Ключ", ИдентификаторЗадачи));
    КонецЕсли;
КонецПроцедуры

Особенности и ограничения мобильных операционных систем

Выясним причины, по которым уведомления могут не приходить или работать некорректно. Работа в мобильной среде накладывает ряд жестких ограничений, которые необходимо учитывать программисту 1С:

Алгоритм управления очередью напоминаний

Рассмотрим подробнее ситуацию, когда пользователь меняет настройки своих напоминаний в интерфейсе. Если мы просто будем добавлять новые уведомления методом Добавить(), они будут накапливаться в очереди ОС, создавая путаницу.

Правильный алгоритм работы выглядит так:

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

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

Использование фоновых заданий (для версий 8.3.18+)

В современных версиях мобильной платформы появилась поддержка Фоновых заданий. Это открывает дополнительные возможности. Вместо того чтобы полагаться только на жесткий RepeatInterval, мы можем запускать фоновое задание, которое будет проверять условия (например, остатки товаров или новые записи в локальной БД) и при необходимости создавать новое локальное уведомление программно.

Разберем пример логики для фонового задания:


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

Если Не Результат.Пустой() Тогда
    // Создаем оперативное уведомление для пользователя
    Уведомление = Новый ДоставляемоеУведомление;
    Уведомление.Текст = "У вас есть просроченные задачи!";
    ДоставляемыеУведомления.Добавить(Уведомление);
КонецЕсли;

Комбинируя механизм RepeatInterval для простых напоминаний и ФоновыеЗадания для сложной бизнес-логики, вы сможете создать максимально гибкую и отзывчивую систему уведомлений в вашем мобильном приложении на базе 1С.

← На главную