Отправка сообщения активным пользователям
Вывести сообщение всем активным пользователям системы 1С:Предприятие является простой задачей, имеющей практическое значение .
Для вывод сообщения текущего пользователя используется метод Сообщить :
Сообщить (<Текст сообщения>, <Статус>)
Однако, не существует метод глобального контекста для отправки сообшения всем активным пользователям .
Для рещения задачи нужно создать обрабочик ожидания события внутри процедуры ПриНачалеРаботыСистемы() в модуле управляемого приложения в процедуре:
ПодключитьОбработчикОжидания(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Данная предопределенная процедура модуля управляемого приложения подключает указанную процедуру <ИмяПроцедуры> в качестве обработчика ожидания. Процедура будет вызываться в период ожидания системы каждый раз по истечению указанного интервала времени.
Процедура ПриНачалеРаботыСистемы()ПодключитьОбработчикОжидания("ВывестиСообщенияПользователям",10);
КонецПроцедуры Процедура ВывестиСообщенияПользователям() Экспорт_ДополнительныйМодуль.ВывестиСообщения();
КонецПроцедуры
Для хранения сообщения пользователям я создал регистр сведений в конфигурации:

Процедура ВывестиСообщения я поместил в общем модуле _ДополнительныйМодуль
:
Процедура ВывестиСообщения() ЭкспортЗапрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
| СообщенияПользователям.Пользователь КАК Пользователь,
| СообщенияПользователям.ТекстЗаголовка КАК ТекстЗаголовка,
| СообщенияПользователям.ТекстСообщения КАК ТекстСообщения
|ИЗ
| РегистрСведений._СообщенияПользователям КАК СообщенияПользователям";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
СоообщениеВыведено = ВывестиСообщениеПользователю(Выборка.Пользователь, Выборка.ТекстЗаголовка, Выборка.ТекстСообщения);
Если СоообщениеВыведено Тогда
Попытка
НаборЗаписей = РегистрыСведений._СообщенияПользователям.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Пользователь.Установить(Выборка.Пользователь); НаборЗаписей.Записать();
Исключение
КонецПопытки;
КонецЕсли;
КонецЦикла;
КонецПроцедуры Функция ВывестиСообщениеПользователю(Получатель,ТекстЗаголовка,ТекстСообщения)Если ПользователиИнформационнойБазы.ТекущийПользователь().ПолноеИмя=Получатель.Наименование Тогда
Shell= Новый COMОбъект("Wscript.Shell"); Shell.Popup(ТекстСообщения,30, ТекстЗаголовка, 4+16);
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
Для вывода сообщения я использую метод Popup объекта Wscript.Shell
:
Popup(<ТекстСообщения>, <ВремяЗадержки>, <ТексЗаголовка>, <КнопкаИконка>)
Выводит в окне текстовое сообщение. Возвращает код нажатой кнопки. Возможные значения: -1 – таймаут; 1 – OK; 2 – Cancel; 3 – Abort; 4 – Retry; 5 – Ignore; 6 – Yes; 7 – No;
Метод объединяет в себе функционал стандартных методов 1С Предупреждение() и Вопрос(). Описание объекта Wscript.shell, его своиств и методов можно посмотреть в документации к Microsoft Win32.
Теперь нам понадобится создать форму обработки отправки, например:

Програмнный код модули формы обработки показан в следующем фрагменте:
&НаСервере Процедура ОтправитьНаСервере()Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Пользователи.Ссылка КАК Ссылка
|ИЗ
| Справочник.Пользователи КАК Пользователи
|ГДЕ
| Пользователи.Ссылка <> &ТекущийПользователь"; Запрос.УстановитьПараметр("ТекущийПользователь",Пользователи.ТекущийПользователь());
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Запись= РегистрыСведений._СообщенияПользователям.СоздатьМенеджерЗаписи(); Запись.ТекстЗаголовка = ТекстЗаголовка;
Запись.ТекстСообщения = ТекстСообщения; Запись.Пользователь = ВыборкаДетальныеЗаписи.Ссылка; Запись.Записать();
КонецЦикла;
КонецПроцедуры &НаКлиенте Процедура Отправить(Команда) Если не ЗначениеЗаполнено(ТекстСообщения) ТогдаСообщить("ТекстСообщения не заполнено");
возврат; КонецЕсли;
ОтправитьНаСервере();
ПоказатьПредупреждение(," Сообщение отправлено") ;
Закрыть();
КонецПроцедуры
Заголовок не корректен. Работать будет только если все пользователи работают в режиме удаленного рабочего стола за одним терминальным сервером, который одновременно является и 1С-сервером
На линуксе не будет работать.