Как вывести оповещение со ссылками на документы при начале работы системы 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки конфигураций на платформе 1С часто возникает задача информирования пользователя о важных событиях сразу после авторизации. Это могут быть документы, стоящие на контроле у руководства, просроченные задачи или критические остатки. Рассмотрим подробно, как реализовать механизм вывода оповещений с навигационными ссылками, соблюдая стандарты разработки и обеспечивая высокую производительность системы.

Выбор правильного места для доработки в БСП

Первая ошибка, которую часто совершают начинающие разработчики — это попытка внести изменения непосредственно в модули Библиотеки стандартных подсистем (БСП), такие как СтандартныеПодсистемыКлиент. Разберем, почему этого делать не стоит. При обновлении конфигурации ваши изменения могут быть затерты. Правильный подход заключается в использовании переопределяемых модулей.

Проанализируем структуру БСП: для логики, выполняемой при старте, предназначен общий модуль ОбщегоНазначенияКлиентПереопределяемый. Именно в его процедуру ПриНачалеРаботыСистемы следует интегрировать вызов вашего функционала. Это гарантирует, что код будет выполнен в нужный момент жизненного цикла сеанса и не создаст проблем при обновлении БСП.

Разделение логики между клиентом и сервером

Выполнение запросов непосредственно на клиенте невозможно, а в тонком клиенте — тем более. Нам необходимо реализовать классическую схему взаимодействия:

  1. Клиентская часть вызывает серверную функцию.
  2. Серверная функция выполняет запрос к базе данных.
  3. Результат запроса преобразуется в формат, допустимый для передачи (массив или структура).
  4. Клиент получает данные и выводит визуальное оповещение.

Важно помнить, что мы не можем передать с сервера на клиент таблицу значений или объект документа целиком. Рассмотрим пример серверной функции в общем модуле с установленными флажками Сервер и Вызов сервера:


Функция ПолучитьСписокКонтрольныхДокументов() Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	РеализацияТоваровУслуг.Ссылка КАК Ссылка,
        |	РеализацияТоваровУслуг.Номер КАК Номер,
        |	РеализацияТоваровУслуг.Дата КАК Дата
        |ИЗ
        |	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        |ГДЕ
        |	РеализацияТоваровУслуг.НаКонтроле = ИСТИНА";
    
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    
    СписокДокументов = Новый Массив;
    Пока Выборка.Следующий() Цикл
        СтруктураДанных = Новый Структура("Ссылка, Представление");
        СтруктураДанных.Ссылка = Выборка.Ссылка;
        СтруктураДанных.Представление = "Документ " + Выборка.Номер + " от " + Формат(Выборка.Дата, "ДЛФ=D");
        СписокДокументов.Добавить(СтруктураДанных);
    КонецЦикла;
    
    Возврат СписокДокументов;
КонецФункции

Реализация оповещения на клиенте

Теперь выясним, как обработать эти данные на стороне клиента. Метод ПоказатьОповещениеПользователя позволяет не просто вывести текст, но и сделать его интерактивным, добавив навигационную ссылку. Рассмотрим код, который следует разместить в клиентском модуле:


Процедура ВывестиОповещенияОДокументах() Экспорт
    СписокДокументов = МойСерверныйМодуль.ПолучитьСписокКонтрольныхДокументов();
    
    Для Каждого Элемент Из СписокДокументов Цикл
        ТекстОповещения = Элемент.Представление + " требует внимания!";
        НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Элемент.Ссылка);
        
        ПоказатьОповещениеПользователя(
            "Внимание! Контроль", 
            НавигационнаяСсылка, 
            ТекстОповещения, 
            БиблиотекаКартинок.ВосклицательныйЗнакКрасный, 
            СтатусОповещенияПользователя.Важное
        );
    КонецЦикла;
КонецПроцедуры

Оптимизация запуска через обработчик ожидания

Если мы вызовем процедуру оповещения напрямую в ПриНачалеРаботыСистемы, пользователь будет вынужден ждать завершения запроса еще до того, как увидит основной интерфейс программы. Чтобы сделать запуск "бесшовным", применим обработчик ожидания. Это позволит системе сначала отрисовать рабочий стол, а через секунду-две вывести уведомления.

В модуле ОбщегоНазначенияКлиентПереопределяемый напишем:


Процедура ПриНачалеРаботыСистемы(ПараметрыВыхода)
    // Подключаем однократный вызов через 1 секунду после старта
    ПодключитьОбработчикОжидания("Подключаемый_ПоказатьВажныеОповещения", 1, Истина);
КонецПроцедуры

Обратите внимание: процедура Подключаемый_ПоказатьВажныеОповещения должна находиться в экспортном виде в глобальном или доступном клиенту общем модуле.

Альтернативные и штатные механизмы БСП

Проанализируем ситуацию, когда документов на контроле слишком много. Если вывести 20 уведомлений подряд, они перекроют друг друга и создадут дискомфорт. В таких случаях стоит рассмотреть штатные подсистемы БСП:

Если вы все же решили использовать ПоказатьОповещениеПользователя, рекомендуется группировать сообщения. Например, если документов больше трех, выводить одно общее оповещение: "У вас 15 важных документов на контроле", при нажатии на которое открывается форма списка с заранее установленным отбором.

Подведем итоги

Для корректной реализации оповещений при старте системы необходимо использовать связку клиент-серверного взаимодействия, избегать изменения типовых модулей БСП в пользу переопределяемых и применять обработчики ожидания для сохранения отзывчивости интерфейса. Использование СтатусОповещенияПользователя.Важное выделит ваше сообщение цветом, гарантируя, что оно не останется незамеченным руководством или ответственными лицами.

← На главную