В процессе разработки часто возникает задача привлечь внимание пользователя к определенным данным или событиям в системе, например, к изменению важного документа. Один из интуитивных, но, как выясняется, неверных подходов — это попытка изменить элемент интерфейса, например, иконку подсистемы. Давайте разберемся, почему этот путь ведет в тупик и какие существуют правильные и эффективные альтернативы.
Исходная задача звучит так: если пользователь внес изменения в документ, необходимо поменять стандартную картинку подсистемы на другую, чтобы сигнализировать об этом событии другим пользователям. Рассмотрим, почему это технически невозможно в рамках платформы 1С:Предприятие и как решить эту задачу правильно.
Основная причина заключается в архитектуре платформы 1С. Командный интерфейс, включая панели разделов и подсистемы с их картинками, является статичной структурой. Разберем этот момент подробнее:
Вывод: Попытка изменить картинку подсистемы в работающем сеансе — это концептуально неверный подход для архитектуры 1С. Вместо того чтобы менять «обертку» (глобальный интерфейс), следует использовать инструменты для работы с данными и штатные механизмы уведомлений.
Хотя исходная идея невыполнима, сама бизнес-задача — уведомить пользователя об изменениях — абсолютно стандартна и решается несколькими проверенными способами. Выбор конкретного способа зависит от того, какая реакция требуется от пользователя.
Это, пожалуй, самый эффективный и наглядный способ привлечь внимание к конкретным записям. Вместо того чтобы менять иконку всей подсистемы, мы выделяем цветом или шрифтом именно тот документ в списке, который требует внимания.
Разберем по шагам:
ТребуетВнимания, или реквизит-перечисление СтатусОбработки (со значениями «Новый», «В работе», «Проверен»).ПриЗаписи или ПередЗаписью, пропишите логику установки этого флага. Например, если изменилась сумма документа, устанавливаем ЭтотОбъект.ТребуетВнимания = Истина;.Документ.ТребуетВнимания = Истина.ПриОткрытии установить Объект.ТребуетВнимания = Ложь; и записать документ.Этот метод напрямую решает задачу: пользователь видит в списке выделенные документы и понимает, что именно требует его реакции.
Если изменение документа требует не просто внимания, а конкретного действия от ответственного сотрудника, то идеальным инструментом будут задачи.
Как это работает:
При записи измененного документа программно создается объект Задача. В этой задаче указывается:
Новая задача появляется у исполнителя на начальной странице в списке «Мои задачи». Этот механизм позволяет не только уведомить, но и проконтролировать исполнение, так как у задачи есть статусы (не начата, в работе, выполнена), и система фиксирует, кто и когда ее выполнил.
Это встроенный в платформу корпоративный мессенджер. Он отлично подходит для неформальных уведомлений и обсуждений, привязанных к объектам системы.
При изменении документа можно программно создать новое обсуждение, связанное с этим документом, и добавить в него нужных пользователей. У этих пользователей появится уведомление в специальной панели («колокольчик»). Они смогут открыть чат, увидеть ссылку на измененный документ и обсудить его. Это менее формально, чем задачи, и хорошо подходит для командной работы.
Для мгновенных, некритичных уведомлений можно использовать метод глобального контекста ПоказатьОповещениеПользователя().
// Пример использования в модуле формы документа после записи
&НаКлиенте
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
ТекстСообщения = "Внесены важные изменения в документ!";
// Можно добавить гиперссылку для перехода к объекту
Оповестить("ОбновлениеДанныхДляОповещения", Новый Структура("Объект", ТекущийОбъект));
КонецПроцедуры
// В модуле управляемого приложения или общей форме
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ОбновлениеДанныхДляОповещения" Тогда
ПоказатьОповещениеПользователя(
"Внимание!",
Параметр.Объект,
"Важный документ был изменен. Нажмите, чтобы открыть.",
БиблиотекаКартинок.Информация32);
КонецЕсли;
КонецПроцедуры
Такой механизм требует организации обмена сообщениями между сеансами (например, через регистр сведений и регламентное задание, которое проверяет новые записи и рассылает оповещения). Это решение подходит для информирования в режиме реального времени, но у него есть минус: если пользователь пропустил всплывающее окно, оно исчезнет, и след от уведомления не сохранится.
Вместо того чтобы пытаться взломать базовые принципы работы интерфейса 1С, всегда ищите стандартные и предназначенные для вашей задачи инструменты.
ПоказатьОповещениеПользователя().Такой подход не только позволит решить вашу задачу, но и сделает вашу конфигурацию поддерживаемой, понятной и стабильной в работе.