Всплывающие напоминания 1С изнутри: где хранятся, почему молчат и как написать свои
Содержание
Напоминания в 1С работают только при открытом клиенте. Это главное, что путают пользователи: окно с напоминанием показывает программа на компьютере сотрудника, а не сервер. Если 1С закрыта, напоминание не придёт ни в 18:00, ни позже — оно всплывёт при следующем входе как просроченное.
В типовых конфигурациях на 8.3 (Бухгалтерия 3.0, ЗУП 3.1, УТ 11, ERP) механизм взят из Библиотеки стандартных подсистем (БСП) и называется «Напоминания пользователя». Его включает администратор, затем каждый сотрудник ставит напоминания себе сам: к документу, контрагенту или просто к времени. Почта и SMS — отдельные механизмы, их подключают дополнительно.
Какие бывают напоминания в 1С и чем они отличаются
Под словом «напоминание» в 1С скрываются разные вещи. Их полезно различать, иначе настройка одного не помогает с другим.
| Вид | Кто создаёт | Где видно | Нужен ли открытый клиент |
|---|---|---|---|
| 🔔 Пользовательское напоминание | Сам сотрудник | Всплывающее окно «Напоминания» | Да |
| 📅 Задачи и сроки отчётности | Программа по данным учёта | Список задач, календарь на начальной странице | Да, при входе |
| 📋 Текущие дела | Программа (подсистема БСП) | Панель на начальной странице | Да |
| ⚙️ Регламентное задание | Администратор или разработчик | Журнал регистрации, почта | Нет (в клиент-серверном варианте) |
| ✉️ Письмо или SMS | Код или рассылка | Почтовый ящик, телефон | Нет |
Системные напоминания программа формирует сама: в Бухгалтерии 3.0 это список задач бухгалтера со сроками отчётов и уплаты налогов на Главное → Список задач. Сотрудник их не создаёт, а только отмечает выполненными.
Пользовательские — те, что ставит конкретный человек: «перезвонить поставщику в 15:00», «проверить оплату по счёту в понедельник». Видит их только автор.
Как устроен механизм напоминаний внутри
Пользовательские напоминания БСП хранятся в регистре сведений НапоминанияПользователя. Одна запись — одно напоминание одного пользователя. В записи лежат пользователь, время события, ссылка на предмет (документ, контрагент) и текст.
Логика работы такая:
- 🖥️ При запуске клиент получает с сервера напоминания текущего пользователя на ближайший период.
- ⏱️ Дальше клиент сам раз в минуту сверяет время и, когда срок наступил, открывает окно «Напоминания».
- 🔄 Время от времени список обновляется с сервера — так подтягиваются напоминания, созданные в другом сеансе.
- ✅ Когда пользователь отключает напоминание, запись удаляется. Периодическое переносится на следующий срок по расписанию.
Отсюда два практических вывода. Напоминание не придёт сотруднику, который в 1С не заходил. И напоминание, созданное с другого компьютера, может появиться не мгновенно, а после очередного обновления списка.
Время срабатывания считается по часам сеанса. Если у пользователя и сервера разные часовые пояса, а в базе не задан часовой пояс сеанса, напоминание сдвигается на разницу поясов.
Способы задать время
В карточке напоминания обычно доступны варианты:
- 🕐 в конкретную дату и время;
- ⏳ через интервал от текущего момента (через 10 минут, через час);
- 📆 относительно даты в самом предмете — например, за день до срока оплаты, указанного в счёте;
- 🔁 периодически по расписанию (каждый понедельник, первого числа месяца).
Вариант «относительно даты предмета» удобен: если в документе сдвинули срок, напоминание пересчитается.
Настройка напоминаний пользователя: пошагово
Шаг 1. Включить механизм в базе
Это делает администратор один раз. В типовых конфигурациях флажок «Напоминания пользователя» находится в Администрирование → Органайзер. Если в вашем релизе раздела нет, найдите флажок поиском по слову «напоминания» в разделе Администрирование.
После включения в формах документов и справочников появляется команда «Напомнить», а в личных настройках — параметры напоминаний.
Шаг 2. Проверить личные настройки
Каждый пользователь может у себя отключить показ напоминаний. Откройте персональные настройки через главное меню (кнопка с тремя полосками в заголовке окна) и найдите блок про напоминания. Там задают:
- показывать ли напоминания вообще;
- время напоминания по умолчанию для новых записей.
Шаг 3. Создать напоминание к документу
- Откройте документ или карточку, о которой нужно напомнить.
- В командной панели формы найдите команду «Напомнить» (часто она в меню
Ещё). - Выберите вариант времени: через интервал, в указанное время или относительно даты предмета.
- Допишите текст — по нему потом проще понять, зачем вы это ставили.
- Сохраните. Предмет напоминания станет ссылкой во всплывающем окне.
Шаг 4. Работать с всплывшим окном
Когда срок наступил, открывается окно со списком сработавших напоминаний. Из него можно:
- 🔗 открыть предмет двойным щелчком;
- ⏸️ отложить на выбранный интервал;
- ❌ отключить, если дело сделано.
Окно не закрывает напоминание само по себе. Если просто закрыть окно крестиком, напоминание останется и всплывёт снова.
Программная работа с напоминаниями: примеры на встроенном языке
В БСП есть программный интерфейс подсистемы: общие модули с именами, начинающимися на НапоминанияПользователя. Через них из кода ставят напоминание «в указанное время» или «по расписанию». Точный состав и параметры процедур зависят от версии БСП в вашей конфигурации — смотрите описание программного интерфейса в самих модулях, раздел ПрограммныйИнтерфейс.
Если нужен свой механизм — например, для доработки в расширении, — проще всего собрать его на объектах платформы. Ниже — два рабочих куска.
Всплывающее оповещение на клиенте
Простейшее напоминание без хранения: через 15 минут после открытия формы показать оповещение в правом нижнем углу.
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// 900 секунд = 15 минут, однократно
ПодключитьОбработчикОжидания("ПоказатьНапоминание", 900, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьНапоминание() Экспорт
ПоказатьОповещениеПользователя(
"Напоминание",
,
"Проверьте поступление оплаты по счёту",
БиблиотекаКартинок.Информация);
КонецПроцедуры
Обработчик ожидания живёт, пока открыта форма. Закрыли форму — напоминания не будет. Для долгих сроков такой способ не годится.
Своё хранение и проверка по расписанию
Для напоминаний, которые должны пережить перезапуск, нужен регистр. Пусть в расширении создан регистр сведений
НапоминанияОтдела с измерениями Пользователь и ВремяСобытия и ресурсом Текст (строка). Серверная функция возвращает наступившие напоминания текущего пользователя:
&НаСервереБезКонтекста
Функция НаступившиеНапоминания()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Н.ВремяСобытия КАК ВремяСобытия,
| Н.Текст КАК Текст
|ИЗ
| РегистрСведений.НапоминанияОтдела КАК Н
|ГДЕ
| Н.Пользователь = &Пользователь
| И Н.ВремяСобытия <= &Сейчас
|
|УПОРЯДОЧИТЬ ПО
| ВремяСобытия";
Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь());
Запрос.УстановитьПараметр("Сейчас", ТекущаяДатаСеанса());
Результат = Новый Массив;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Результат.Добавить(Формат(Выборка.ВремяСобытия, "ДФ=HH:mm") + " — " + Выборка.Текст);
КонецЦикла;
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ПроверитьНапоминания() Экспорт
Для Каждого Строка Из НаступившиеНапоминания() Цикл
ПоказатьОповещениеПользователя("Напоминание", , Строка);
КонецЦикла;
КонецПроцедуры
Проверку подключают раз в 60 секунд: ПодключитьОбработчикОжидания("ПроверитьНапоминания", 60). После показа запись нужно удалить или сдвинуть время, иначе оповещение будет приходить каждую минуту. Пользователи.ТекущийПользователь() — функция БСП; в конфигурации без БСП берите пользователя из своего справочника.
Не создавайте новые объекты в типовой конфигурации напрямую. Регистр и формы держите в расширении — тогда обновление конфигурации пройдёт без ручного сравнения.
Напоминания по почте и SMS: когда клиент закрыт
Всплывающее окно бесполезно для сотрудника, который сидит не за компьютером. Тогда напоминание отправляют письмом или SMS из регламентного задания на сервере.
Схема такая:
- Регламентное задание запускается по расписанию, например каждые 10 минут.
- Оно выбирает наступившие напоминания из регистра.
- Отправляет письмо через учётную запись почты базы или SMS через подключённого провайдера.
- Помечает напоминание отправленным, чтобы не слать повторно.
Учётные записи почты в типовых конфигурациях настраивают в администрировании, в разделе органайзера. SMS требует договора с провайдером: в БСП есть подсистема отправки SMS со списком поддерживаемых сервисов, логин и пароль вводят в её настройках.
Минимальная отправка письма средствами платформы:
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.example.ru";
Профиль.ПортSMTP = 465;
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ПользовательSMTP = "robot@example.ru";
Профиль.ПарольSMTP = ПарольИзБезопасногоХранилища; // не храните пароль в коде
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Отправитель = "robot@example.ru";
Письмо.Получатели.Добавить("buh@example.ru");
Письмо.Тема = "Напоминание: срок оплаты по счёту";
Письмо.Тексты.Добавить("Сегодня последний день оплаты по счёту № 145.",
ТипТекстаПочтовогоСообщения.ПростойТекст);
Почта = Новый ИнтернетПочта;
Почта.Подключиться(Профиль);
Почта.Послать(Письмо);
Почта.Отключиться();
В типовой конфигурации лучше вызывать почтовые процедуры БСП: они сами берут настройки учётной записи и пишут ошибки в журнал регистрации.
В файловом варианте базы регламентные задания выполняются только пока открыт хотя бы один клиентский сеанс. Для надёжной рассылки по ночам нужен клиент-серверный вариант или постоянно открытый сеанс на одном компьютере.
Готовые напоминания в разных конфигурациях
Прежде чем писать код, посмотрите, что уже есть «из коробки». Часто нужное напоминание реализовано.
| Конфигурация | Что напоминает | Где искать |
|---|---|---|
| Бухгалтерия 3.0 | Сроки отчётов и налогов, закрытие месяца | Главное → Список задач, календарь на начальной странице |
| ЗУП 3.1 | Кадровые и расчётные дела по сотрудникам | Панель «Текущие дела» на начальной странице |
| УТ 11, ERP | Взаимодействия, задачи, сроки по сделкам | Раздел CRM, задачи по бизнес-процессам |
| Любая на БСП | Личные напоминания к объектам | Команда «Напомнить» в формах |
Отдельный сценарий — бизнес-процессы и задачи. Задача с назначенным исполнителем и сроком сама по себе работает как напоминание: она висит в списке задач исполнителя и подсвечивается при просрочке. Для поручений между сотрудниками это удобнее личных напоминаний, потому что видно, кто и когда выполнил.
Нагрузка при большом числе напоминаний
Пока напоминаний десятки, о производительности можно не думать. Проблемы начинаются, когда разработчик массово создаёт их кодом — например, по каждому счёту на оплату.
Что помогает:
- 🧹 Чистить отработанные. Отключённые напоминания удаляются, а забытые копятся. Раз в месяц полезно удалять записи старше 30–60 дней.
- 🎯 Ставить одно периодическое вместо сотни разовых. «Каждый понедельник в 9:00 проверить дебиторку» — одна запись.
- ⏱️ Не опрашивать сервер каждую секунду. Интервал обработчика ожидания 60 секунд и больше. Запрос к серверу раз в секунду от 50 пользователей — это 3 000 обращений в минуту на пустом месте.
- 📦 Отправлять пачками. Регламентное задание выбирает все наступившие напоминания одним запросом, а не делает запрос в цикле по пользователям.
- 🔑 Отбирать по измерениям регистра. Условие по пользователю и времени события использует индекс; отбор по тексту — нет.