В процессе разработки конфигураций на платформе 1С часто возникает задача информирования пользователя о важных событиях сразу после авторизации. Это могут быть документы, стоящие на контроле у руководства, просроченные задачи или критические остатки. Рассмотрим подробно, как реализовать механизм вывода оповещений с навигационными ссылками, соблюдая стандарты разработки и обеспечивая высокую производительность системы.
Первая ошибка, которую часто совершают начинающие разработчики — это попытка внести изменения непосредственно в модули Библиотеки стандартных подсистем (БСП), такие как СтандартныеПодсистемыКлиент. Разберем, почему этого делать не стоит. При обновлении конфигурации ваши изменения могут быть затерты. Правильный подход заключается в использовании переопределяемых модулей.
Проанализируем структуру БСП: для логики, выполняемой при старте, предназначен общий модуль ОбщегоНазначенияКлиентПереопределяемый. Именно в его процедуру ПриНачалеРаботыСистемы следует интегрировать вызов вашего функционала. Это гарантирует, что код будет выполнен в нужный момент жизненного цикла сеанса и не создаст проблем при обновлении БСП.
Выполнение запросов непосредственно на клиенте невозможно, а в тонком клиенте — тем более. Нам необходимо реализовать классическую схему взаимодействия:
Важно помнить, что мы не можем передать с сервера на клиент таблицу значений или объект документа целиком. Рассмотрим пример серверной функции в общем модуле с установленными флажками Сервер и Вызов сервера:
Функция ПолучитьСписокКонтрольныхДокументов() Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка КАК Ссылка,
| РеализацияТоваровУслуг.Номер КАК Номер,
| РеализацияТоваровУслуг.Дата КАК Дата
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.НаКонтроле = ИСТИНА";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
СписокДокументов = Новый Массив;
Пока Выборка.Следующий() Цикл
СтруктураДанных = Новый Структура("Ссылка, Представление");
СтруктураДанных.Ссылка = Выборка.Ссылка;
СтруктураДанных.Представление = "Документ " + Выборка.Номер + " от " + Формат(Выборка.Дата, "ДЛФ=D");
СписокДокументов.Добавить(СтруктураДанных);
КонецЦикла;
Возврат СписокДокументов;
КонецФункции
Теперь выясним, как обработать эти данные на стороне клиента. Метод ПоказатьОповещениеПользователя позволяет не просто вывести текст, но и сделать его интерактивным, добавив навигационную ссылку. Рассмотрим код, который следует разместить в клиентском модуле:
Процедура ВывестиОповещенияОДокументах() Экспорт
СписокДокументов = МойСерверныйМодуль.ПолучитьСписокКонтрольныхДокументов();
Для Каждого Элемент Из СписокДокументов Цикл
ТекстОповещения = Элемент.Представление + " требует внимания!";
НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Элемент.Ссылка);
ПоказатьОповещениеПользователя(
"Внимание! Контроль",
НавигационнаяСсылка,
ТекстОповещения,
БиблиотекаКартинок.ВосклицательныйЗнакКрасный,
СтатусОповещенияПользователя.Важное
);
КонецЦикла;
КонецПроцедуры
Если мы вызовем процедуру оповещения напрямую в ПриНачалеРаботыСистемы, пользователь будет вынужден ждать завершения запроса еще до того, как увидит основной интерфейс программы. Чтобы сделать запуск "бесшовным", применим обработчик ожидания. Это позволит системе сначала отрисовать рабочий стол, а через секунду-две вывести уведомления.
В модуле ОбщегоНазначенияКлиентПереопределяемый напишем:
Процедура ПриНачалеРаботыСистемы(ПараметрыВыхода)
// Подключаем однократный вызов через 1 секунду после старта
ПодключитьОбработчикОжидания("Подключаемый_ПоказатьВажныеОповещения", 1, Истина);
КонецПроцедуры
Обратите внимание: процедура Подключаемый_ПоказатьВажныеОповещения должна находиться в экспортном виде в глобальном или доступном клиенту общем модуле.
Проанализируем ситуацию, когда документов на контроле слишком много. Если вывести 20 уведомлений подряд, они перекроют друг друга и создадут дискомфорт. В таких случаях стоит рассмотреть штатные подсистемы БСП:
Если вы все же решили использовать ПоказатьОповещениеПользователя, рекомендуется группировать сообщения. Например, если документов больше трех, выводить одно общее оповещение: "У вас 15 важных документов на контроле", при нажатии на которое открывается форма списка с заранее установленным отбором.
Для корректной реализации оповещений при старте системы необходимо использовать связку клиент-серверного взаимодействия, избегать изменения типовых модулей БСП в пользу переопределяемых и применять обработчики ожидания для сохранения отзывчивости интерфейса. Использование СтатусОповещенияПользователя.Важное выделит ваше сообщение цветом, гарантируя, что оно не останется незамеченным руководством или ответственными лицами.