В процессе совместной работы в среде «1С:Предприятие 8» часто возникает необходимость оперативного информирования сотрудников о важных событиях. Типичный сценарий: пользователю или разработчику назначено «Задание №1», к исполнению которого необходимо приступить в определенную дату (например, 20.02). Идеальное решение — сделать так, чтобы при входе в информационную базу в указанный день пользователь сразу видел всплывающее окно или уведомление о необходимости начать работу.
В этой статье мы подробно разберем, почему простейшие попытки написать такой код «в лоб» часто приводят к ошибкам, и рассмотрим четыре эффективных и профессиональных способа реализации этой задачи.
Часто начинающие разработчики пытаются решить задачу простым добавлением кода в модуль управляемого приложения. На первый взгляд, алгоритм кажется очевидным: считать текущую дату, запросить базу данных на наличие задач и вывести предупреждение. Однако при этом они совершают две критические ошибки, из-за которых система отказывается работать или начинает сильно зависать:
ПоказатьПредупреждение() или ПоказатьОповещениеПользователя(), непосредственно в серверном коде (например, в модуле сеанса или в серверных функциях) вызывает неустранимую ошибку. Интерактивные окна могут инициализироваться исключительно на клиенте.ПередНачаломРаботыСистемы или ПриНачалеРаботыСистемы, то каждый раз при входе пользователя программа будет долго «висеть» на этапе загрузки интерфейса. Это вызывает сильное раздражение пользователей.Ниже мы подробно рассмотрим правильные методы обхода этих ограничений.
Если ваша конфигурация разработана на базе Библиотеки стандартных подсистем (БСП) — а это справедливо для большинства современных типовых конфигураций (ERP, КА, УТ, УНФ, ЗУП, БП) — в ней уже присутствует готовый и очень удобный механизм напоминаний. Нам не нужно изобретать велосипед, достаточно правильно его настроить.
Разберем по шагам, как включить и настроить этот механизм:
Теперь пользователи могут самостоятельно создавать напоминания к любым объектам системы, а разработчик может создавать их программно при записи документа «Задание».
Проанализируем пример кода, который программно создает напоминание для конкретного исполнителя в регистре сведений НапоминанияПользователя:
МЗ = РегистрыСведений.НапоминанияПользователя.СоздатьМенеджерЗаписи();
МЗ.Пользователь = СсылкаНаРазработчика; // Кому предназначено напоминание
МЗ.ВремяСобытия = ДатаНачалаЗадания; // Например, 20.02.2026 09:00:00
МЗ.СрокНапоминания = ДатаНачалаЗадания;
МЗ.Описание = "Необходимо приступить к выполнению Задания №1";
МЗ.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.ВУказанноеВремя;
МЗ.Источник = СсылкаНаДокументЗадание; // Ссылка на документ-задание для быстрого перехода
МЗ.Записать();
При наступлении указанного времени у пользователя в 1С всплывет удобное окно поверх всех остальных окон. Пользователь сможет сразу открыть документ-источник в один клик, прекратить напоминание или отложить его на определенное время (например, на 15 минут или на 1 час).
Если вам необходимо написать собственное решение «с нуля» без привязки к БСП, то делать это нужно асинхронно. Мы применим подключение обработчика ожидания. Это позволит интерфейсу программы полностью загрузиться, и только через несколько секунд система выполнит легкую проверку и покажет красивое всплывающее оповещение.
Посмотрим на пример реализации. В Модуле управляемого приложения добавим следующий код:
Процедура ПриНачалеРаботыСистемы()
// Подключаем однократный обработчик с задержкой в 5 секунд после старта системы
ПодключитьОбработчикОжидания("ПроверитьНовыеЗаданияПриЗапуске", 5, Истина);
КонецПроцедуры
Процедура ПроверитьНовыеЗаданияПриЗапуске() Экспорт
// Вызываем серверную функцию для быстрой проверки наличия задач на сегодня
ЕстьЗадачи = ПроверитьЗадачиНаСервере(ПараметрыСеанса.ТекущийПользователь);
Если ЕстьЗадачи Тогда
// Показываем аккуратное всплывающее оповещение в правом нижнем углу экрана
ПоказатьОповещениеПользователя(
"Новые задания!",
"ПолучитьСсылкуНаЗадание()",
"Вам необходимо приступить к выполнению Задания №1",
БиблиотекаКартинок.Информация
);
КонецЕсли;
КонецПроцедуры
Этот подход гарантирует быстрый запуск программы без «зависаний» интерфейса. Функция ПоказатьОповещениеПользователя() не блокирует работу пользователя, плавно появляется на экране и так же плавно исчезает, оставляя уведомление в списке оповещений платформы.
Начиная с версии платформы 8.3.10, разработчикам доступен мощный встроенный механизм — Система взаимодействия. Это полноценный чат и система видеозвонков, интегрированная непосредственно в платформу «1С:Предприятие».
Мы можем использовать Систему взаимодействия для отправки мгновенных сообщений от имени системы (робота) конкретному пользователю или разработчику:
С точки зрения методологии и архитектуры крупных систем управления предприятием (таких как ERP или CRM), самым правильным вариантом является использование стандартного механизма Бизнес-процессов и задач.
При таком подходе мы не используем навязчивые всплывающие окна, которые могут отвлекать пользователя от текущей работы. Вместо этого:
Этот подход признан наиболее эргономичным и профессиональным для организации ежедневного рабочего процесса сотрудников.