Как в 1с сделать периодичные напоминания? Например поставить периодичность 1 день и каждый день в одно и то же время при приходило push уведомление.
Нужно сделать для мобильного приложения. Есть идея сделать через РС,но не знаю, как узнать,что пришло время и дата для уведомления.
Буду рад всем идеям, а если еще сможете пример привести, то вообще будет шикарно
---
ДоставляемоеУведомление (DeliverableNotification)
Свойства:
Данные (Data)
ДатаПоявленияУниверсальноеВремя (FireDateUniversalTime)
Заголовок (Title)
ЗвуковоеОповещение (SoundAlert)
ИнтервалПовтора (RepeatInterval)
Наклейка (Badge)
Получатели (Recipients)
Текст (Text)
Конструкторы:
По умолчанию
Описание:
Объект описывает уведомление. Используется для работы с push-уведомлениями и с локальными уведомлениями мобильной платформы.

тебе надо читать про второй вариант использования : "с локальными уведомлениями мобильной платформы."
каждый час ставишь ИнтервалПовтора = 3600
---
в обработчике уведомления создаешь новое локальное (не пуш) уведомление
пуш уведомление приходит с удаленного компьютера - оно не может быть не зависимо от компьютера который его отправляет как ты хочешь в (5)
---
неужели никак нельзя сделать так, чтобы в самом мобильном приложении работали периодические напоминания? Все равно должен быть какой-то способ, как сделать это
---
локальные уведомления это и есть периодические напоминания!!!
---
как сделать так,чтобы например каждый час приходили эти локальные напоминания?
---
ДоставляемоеУведомление (DeliverableNotification)
Свойства:
Данные (Data)
ДатаПоявленияУниверсальноеВремя (FireDateUniversalTime)
Заголовок (Title)
ЗвуковоеОповещение (SoundAlert)
ИнтервалПовтора (RepeatInterval)
Наклейка (Badge)
Получатели (Recipients)
Текст (Text)
Конструкторы:
По умолчанию
Описание:
Объект описывает уведомление. Используется для работы с push-уведомлениями и с локальными уведомлениями мобильной платформы.

тебе надо читать про второй вариант использования : "с локальными уведомлениями мобильной платформы."
каждый час ставишь ИнтервалПовтора = 3600
---
точно,спасибо)
---
если программа запущена и обработчик выполнился (заводишь например константу дату последнего запуска обработчика по уведомлению но нужно еще напоминать в этом же обработчике создаешь новое уведомление с нужной периодичностью иначе после успешного выполнения обработчика больше напоминаний не будет)
---
можно использовать регламентные задания. там есть расписание запуска
---
в мобильном приложении нельзя использовать рег. задания
---
полагаю, что требуется не с мобильного приложения, а как раз в него отправить

у нас правда не отправка сообщения, а выполнение обмена по расписанию, но в качестве примера может подойти
опишу не полностью, но с достаточной функциональностью

1. завели справочник ЗаданияОбмена с реквизитами ПоследнийЗапуск (Дата-ДатаВремя), Активность(Булево), ДатаНачала(Дата-Дата), ВремяИсполненияНачальное(Дата-Время), ВремяИсполненияКонечное(Дата-Время), ИнтервалПовтора(Число(4,0)), ВидПериодаПовтора(Перечисление - Минута, Час, День, Неделя, Месяц)

для вас, вероятно, потребуется еще ТекстСообшения и ПолучательСообщения

код выполнения задания прописан в модуле справочника ЗаданияОбмена

2. завели регламентное задание, которое выполняется по своему расписанию, проверяя элементы справочника ЗаданияОбмена
Алгоритм проверки такой
1 НЕ Активные не отбираются, не выполняются
2 текущее время сверяется с ДатаНачала на дату - если меньше, значит задание еще рано выполнять, пропускается
3 текущее время сверяется с ВремяИсполненияНачальное - если меньше, значит задание еще рано выполнять, пропускается
4 текущее время сверяется с ВремяИсполненияКонечное- если больше, значит задание уже поздно выполнять
5 к текущему дата время прибавляется ИнтервалПовтора с учетом ВидПериодаПовтора и сверяется с ПоследнийЗапуск
6 ПоследнийЗапуск заполнено и меньше чем текущее дата\время - ИнтервалПовтора с учетом ВидПериодаПовтора- задание выполняется
7 следует запуск задания
8 в конце фиксируется ПоследнийЗапуск по текущее дата\время, но не текущее на момент окончания выполнения задания, а текущее на момент начала действия алгоритма, это нивелирует разницу во времени, она все равно есть, но минимальная в итоге и входит в пул между ВремяИсполненияНачальное - ВремяИсполненияКонечное. ну и есть еще механизм сброса ПоследнийЗапуск для случая когда разница превысила пул между ВремяИсполненияНачальное - ВремяИсполненияКонечное и проверка в п. 4 будет возвращать ЛОЖЬ, т.е. задание будет пропускаться по истечению времени вполнения

 пример кода выполнения рег задания

```1c
    лОтбор = Новый Структура("Активность", Истина);

    // получаем все активные задания
    лРегламентныеЗаданияВыборка = Справочники.ЗаданияОбмена.Выбрать(, лОтбор);
    Пока лРегламентныеЗаданияВыборка.Следующий() Цикл
    лЗаданиеСсылка = лРегламентныеЗаданияВыборка.Ссылка;

    Если лЗаданиеСсылка.ПометкаУдаления Тогда
    Продолжить;
    КонецЕсли;

    лТекущаяДата = ТекущаяДата();

    Если НачалоДня(лЗаданиеСсылка.ДатаНачала) > НачалоДня(лТекущаяДата) Тогда // дата начала еще не наступила
    Продолжить;
    КонецЕсли;
    Если МинутСНачалаДня(лЗаданиеСсылка.ВремяИсполненияНачальное) > МинутСНачалаДня(лТекущаяДата) Тогда // время запуска еще не наступило
    Продолжить;
    КонецЕсли;
    Если МинутСНачалаДня(лЗаданиеСсылка.ВремяИсполненияКонечное) < МинутСНачалаДня(лТекущаяДата) Тогда // время запуска уже прошло
    Продолжить;
    КонецЕсли;

    // если задача уже выполнялась, то проверяем по расписанию, прошел ли интервал запуска задачи
    СравнитьВремя = истина; Разница_интервала = 0;
    Если ЗначениеЗаполнено(лЗаданиеСсылка.ПоследнийЗапуск) Тогда
    лВидПериодаЗапуска = лЗаданиеСсылка.ВидПериодаПовтора;
    лИнтервалЗапуска = лЗаданиеСсылка.ИнтервалПовтора;
    лДатаПоследнегоЗапуска = лЗаданиеСсылка.ПоследнийЗапуск;

    //***интервал запуска в днях, в секундах
    Если лВидПериодаЗапуска = Перечисления.ВидыПериодаПовтора.Минута Тогда
    ИнтервалЗадания = лИнтервалЗапуска * 60;
    СравнитьВремя = истина;
    ИначеЕсли лВидПериодаЗапуска = Перечисления.ВидыПериодаПовтора.Час Тогда
    ИнтервалЗадания = лИнтервалЗапуска * 60 * 60;
    СравнитьВремя = истина;
    ИначеЕсли лВидПериодаЗапуска = Перечисления.ВидыПериодаПовтора.День Тогда
    ИнтервалЗадания = лИнтервалЗапуска;
    СравнитьВремя = ложь;
    ИначеЕсли лВидПериодаЗапуска = Перечисления.ВидыПериодаПовтора.Неделя Тогда
    ИнтервалЗадания = лИнтервалЗапуска * 7;
    СравнитьВремя = ложь;
    ИначеЕсли лВидПериодаЗапуска = Перечисления.ВидыПериодаПовтора.Месяц Тогда
    ИнтервалЗадания = Цел((НачалоДня(ДобавитьМесяц(лДатаПоследнегоЗапуска, лИнтервалЗапуска)) - НачалоДня(лДатаПоследнегоЗапуска))/(24*60*60));
    СравнитьВремя = ложь;
    Иначе
    ИнтервалЗадания = лИнтервалЗапуска * 60;
    СравнитьВремя = истина;
    КонецЕсли;

    Если СравнитьВремя тогда
    Разница_интервала = лТекущаяДата - лДатаПоследнегоЗапуска;
    Иначе
    Разница_интервала = Цел((НачалоДня(лТекущаяДата) - НачалоДня(лДатаПоследнегоЗапуска))/(24*60*60));
    КонецЕсли;

    // пропускаем, если время запуска по расписанию еще не наступило
    Если Разница_интервала < ИнтервалЗадания тогда
    продолжить;
    КонецЕсли;
    КонецЕсли;

    Попытка
    лРезультат = лЗаданиеСсылка.ПолучитьОбъект().ВыполнитьСинхронизацию();
    Если Не лРезультат = " Тогда
    ЗаписьЖурналаРегистрации(лИмяСобытия, УровеньЖурналаРегистрации.Информация, Метаданные.Справочники.ЗаданияОбмена, лЗаданиеСсылка, лЗаданиеСсылка.Наименование + ", ошибка при выполнении: " + лРезультат);
    КонецЕсли;
    Исключение
    ЗаписьЖурналаРегистрации(лИмяСобытия, УровеньЖурналаРегистрации.Информация, Метаданные.Справочники.ЗаданияОбмена, лЗаданиеСсылка, лЗаданиеСсылка.Наименование + ", ошибка при выполнении: " + ОписаниеОшибки());
    КонецПопытки;

    лЗаданиеОбъект = лЗаданиеСсылка.ПолучитьОбъект();

    Если НЕ ЗначениеЗаполнено(лЗаданиеОбъект.ПоследнийЗапуск) тогда
    лЗаданиеОбъект.ПоследнийЗапуск = лТекущаяДата;
    Иначе
    Если НЕ СравнитьВремя тогда
    Если МинутСНачалаДня(лЗаданиеСсылка.ВремяИсполненияНачальное) < МинутСНачалаДня(лЗаданиеОбъект.ПоследнийЗапуск) И
    МинутСНачалаДня(лЗаданиеСсылка.ВремяИсполненияКонечное) > МинутСНачалаДня(лЗаданиеОбъект.ПоследнийЗапуск) Тогда
    лЗаданиеОбъект.ПоследнийЗапуск = лЗаданиеОбъект.ПоследнийЗапуск + Разница_интервала*24*60*60;
    Иначе
    //если перенесено время запуска
    лЗаданиеОбъект.ПоследнийЗапуск = лТекущаяДата;
    КонецЕсли;
    Иначе
    лЗаданиеОбъект.ПоследнийЗапуск = лТекущаяДата;
    КонецЕсли;
    КонецЕсли;

    лЗаданиеОбъект.Записать();

    КонецЦикла; //лРегламентныеЗаданияВыборка.Следующий()
```
---
спасибо за информацию, тоже пригодится. Но мне нужно именно, чтобы в мобильном приложении создавалось периодическое напоминание и чтобы и чтобы приходил пуш уведомление.
Мобильное приложении должно работать автономно, без привязки к конфигурации компьютера