В процессе разработки в среде 1С часто возникает задача организовать оперативное взаимодействие между пользователями. Например, когда действия одного сотрудника требуют немедленной реакции или подтверждения от другого. Рассмотрим подробнее, какими методами можно направить предупреждение другому пользователю, проанализируем технические нюансы реализации и выясним причину, почему один способ может быть предпочтительнее другого в разных ситуациях.
Это классический подход, который не требует дополнительных лицензий и работает на любых версиях платформы 1С:Предприятие 8. Разберем по шагам, как это реализовать.
Суть метода заключается в создании «почтового ящика» в базе данных. Когда Пользователь А совершает действие, система записывает информацию об этом в специальный РегистрСведений (например, ОчередьОповещений). У Пользователя Б в клиентском приложении постоянно работает фоновый процесс, который проверяет наличие новых записей в этом регистре.
Для реализации этого механизма проанализируем необходимые шаги:
РегистрСведений.ОчередьОповещений с измерениями Пользователь (тип СправочникСсылка.Пользователи) и Прочитано (тип Булево), а также ресурсом ТекстСообщения и ДанныеОбъекта.ПодключитьОбработчикОжидания().Посмотрим на пример кода, который нужно разместить в процедуре ПриНачалеРаботыСистемы:
Процедура ПриНачалеРаботыСистемы()
// Проверка будет запускаться каждые 60 секунд (1 минута)
ПодключитьОбработчикОжидания("ПроверитьНовыеОповещения", 60);
КонецПроцедуры
Затем в этом же модуле опишем саму процедуру проверки. Обратите внимание, что проверка должна быть максимально «легкой», чтобы не нагружать сервер и сеть:
&НаКлиенте
Процедура ПроверитьНовыеОповещения()
РезультатПроверки = ПроверитьНаличиеСообщенийНаСервере();
Если РезультатПроверки.ЕстьСообщения Тогда
// Выводим окно пользователю
ПоказатьОповещениеПользователя("Внимание!", РезультатПроверки.СсылкаНаОбъект, РезультатПроверки.Текст);
КонецЕсли;
КонецПроцедуры
Важный нюанс: Чтобы поиск в базе данных был быстрым, обязательно установите индексирование по полям Пользователь и Прочитано в регистре сведений. Это позволит системе мгновенно находить нужные записи даже при тысячах уведомлений в таблице.
Если нам требуется моментальное оповещение без циклического опроса базы данных, рассмотрим Систему взаимодействия. Это современный механизм платформы 1С, который работает по протоколу WebSocket. В этом случае сервер сам «толкает» (Push) сообщение клиенту в момент его возникновения.
Выясним причину, почему это лучше обработчика ожидания:
Для программной отправки сообщения другому пользователю используем объект СообщениеСистемыВзаимодействия. Пример кода для отправки уведомления:
// Создаем новое обсуждение, если оно еще не создано
Обсуждение = СистемаВзаимодействия.СоздатьОбсуждение();
Обсуждение.Участники.Добавить(НужныйПользователь);
Обсуждение.Записать();
// Отправляем сообщение
НовоеСообщение = СистемаВзаимодействия.СоздатьСообщение(Обсуждение.Идентификатор);
НовоеСообщение.Текст = "Вам необходимо проверить документ!";
НовоеСообщение.Записать();
На стороне получателя в модуле управляемого приложения можно использовать обработчик события ПриПолученииСообщенияСистемыВзаимодействия, чтобы программно открыть форму нужного документа или вывести диалоговое окно с вариантами выбора, как запрашивал автор темы.
Лицензионные требования: Помните, что для использования собственного (локального) сервера Системы взаимодействия требуется лицензия уровня КОРП. Однако, если вы используете публичный сервис 1С (1c.link), базовые функции доступны и на лицензиях уровня ПРОФ.
Для более мягкого уведомления пользователя, которое не прерывает его текущую работу модальным окном, рекомендуется использовать метод ПоказатьОповещениеПользователя(). Это то самое всплывающее окно в углу экрана («колокольчик»).
Проанализируем преимущества этого подхода:
НавигационнаяСсылка. При нажатии на окно 1С сама откроет нужный документ.Разберем пример вызова:
ТекстОповещения = "Поступил новый заказ №123 от " + ТекущаяДата();
СсылкаНаДокумент = ПолучитьНавигационнуюСсылку(Объект.Ссылка);
ПоказатьОповещениеПользователя("Новое задание", СсылкаНаДокумент, ТекстОповещения, БиблиотекаКартинок.ВажнаяИнформация);
Если уведомление — это не просто информационная справка, а требование выполнить действие, лучше всего использовать встроенный механизм Задачи. В типовых конфигурациях (ЕРП, КА, УТ) уже настроены стандартные «Напоминания пользователя».
Рассмотрим, как это работает с точки зрения UX (пользовательского опыта). Когда мы создаем задачу для пользователя, система автоматически отслеживает ее выполнение. Если пользователь «забывает» о задаче, стандартный механизм напоминаний будет предлагать ему вернуться к ней через определенные интервалы времени (5 минут, час, день). Это именно то, что искал автор сообщения 0 — повторяющееся уведомление до момента принятия решения.
Если ваши сотрудники работают через мобильный клиент или мобильное приложение 1С, стоит рассмотреть технологию Push-уведомлений. С помощью метода ДоставитьПушУведомление можно отправить сообщение, которое отобразится в шторке уведомлений смартфона, даже если приложение 1С полностью закрыто.
Для этого потребуется предварительная настройка в консоли разработчика Google (Firebase) или Apple (APNs), чтобы платформа могла идентифицировать ваше приложение и доставить сообщение адресату.
Проанализируем важный совет из обсуждения: не стоит злоупотреблять всплывающими окнами. Если пользователь уходит в отпуск и возвращается к сотне накопленных окон, это вызывает негатив и замедляет работу системы.
Лучшая практика: Вместо назойливых окон создайте для пользователя удобное рабочее место (АРМ) — обработку со списком дел, где важные документы будут выделены цветом (условным оформлением). Это позволит сотруднику самостоятельно приоритизировать задачи, а не просто «закрывать мешающие окна».
Подводя итог, выбор метода зависит от критичности сообщения: