Если в 1С 8.0 есть процедура глобального контекста ПодключитьОбработчикОжидания,
то можно (в 1С 8.1 и в 1С 8.2 она есть).
В модуле приложения, в процедуре ПриНачалеРаботыСистемы добавляешь строку
ПодключитьОбработчикОжидания("МояПроцедура", 3)
где МояПроцедура - это будет экспортная процедура общего модуля
в которой будет происходить проверка на необходимость вывода
текущему пользователю сообщения.
а 3 - периодичность вызова МояПроцедура в секундах.
Итого: в одной процедуре происходить запись кому и что выводить,
а в другой (которая периодически опрашивается) осуществляется
вывод сообщения для текущего пользователя.
Если речь идет о сервере, то теоретически, можно по номеру соединения через ОЛЕ подключиться к уже существующему сеансу, и вывести в нем какое-нибудь сообщение. Но никогда так не делал.
38.
user664177_ademar26
101.11.17 11:17 Сейчас в теме
Открываю обработку и при отправке пишет:
Не удалось отправить сообщение пользователю : Плишков Дмитрий Владимирович
По причине : {ВнешняяОбработка.ОтправитьСообщениеПользователю.Форма.Форма.Форма(17)}: Поле объекта не обнаружено (СообщенияПользователям)
39.
user664177_ademar26
101.11.17 11:26 Сейчас в теме
Здравствуйте! я открыл вашу обработку и пытаюсь отправить сообщение но выходит ошибка:
Не удалось отправить сообщение пользователю : Плишков Дмитрий Владимирович
По причине : {ВнешняяОбработка.ОтправитьСообщениеПользователю.Форма.Форма.Форма(17)}: Поле объекта не обнаружено (СообщенияПользователям)
Регистр сведений сделать периодический и туда записывать сообщения с указанием, какому пользователю или отделу показать, в обработчике ожидания проверять регистр, и выводить сообщение. Есть и типовая обработка, видел даже где-то здесь, на инфостарте.
ЗапуститьПриложение("msg %USERNAME% "Дай денег гат!"");
+ Прелесть, месага поверх всех окон.
- Если сообщений будет много, их придётся проклацать мышкой все.
+ Если юзер офлайн, сабж получит при логоне в форточки.
Соответственно если это выполнять на терминальном сервере, то можно получить список юзверей из переменных окружения и послать всем. Если последнее нада - запрашивай.
UPD: сообщение будет от текущего залогиневшегося юзера.. но можно выполнить MSG от имени другого пользователя.. например завести на компе юзера "программа 1С" и от его имени слать
(12) bugmeoncemore, а каким образом реализовать ЗапуститьПриложение("msg %USERNAME% "Дай денег гат!""); от имени другого пользователя? "UPD: сообщение будет от текущего залогиневшегося юзера.. но можно выполнить MSG от имени другого пользователя.. например завести на компе юзера "программа 1С" и от его имени слать"
Через регистр сведений и через обработчик ожидания в "ПриНачалеРаботы". В регистр пишутся сообщения пользователям (история переписки), а обработчиком идет рассылка. Писал такое для реализации выгонялки пользователей в файловой базе 1С 8.1. А дальше уже все зависит от твоей фантазии
ЗапуститьПриложение("msg %USERNAME% "Дай денег гат!"");
Я так понимаю этот код будет работать только в домене или в рамках одного компьютера?
У меня вообще такая задача. Самописная примитивная конфигурация. Пользователь1 открыл конфигурацию и свернул окно. Пользователь2 создал документ и при его проведении необходимо как-то оповестить Пользователь1. То есть у Пользователь1 программа свернута и надо заставить его обратить внимание на нее каким-либо сообщением или заставить мигать свернутое окно. Я так понимаю, что процедура СООБЩИТЬ тут не уместна, а вышеописанный код подойдет лишь для домена или терминальника.
(24) Serge_ASB, еще нужен регистр, общая форма, общий макет - с этим понятно. А главное в какой момент будет отрабатывать (по какому событию) описанная выше процедура для глобального модуля? Это куда прикрутить?
(26) Serge_ASB, нужно, спасибо
при НачалеРаботыСистемы не совсем то - надо что бы в реальном времени отрабатывалось, проверялось каждую минуту например, и при этом что бы сервер не висел и сильно не грузился, база скульная. пользователей около15. но при заведении заявки формируется 5 - 7 документов - так что бывает тормозит, а тут еще будет какая то штука крутиться
Процедура ОбработкаСообщенийПользователю() Экспорт
Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1
| СообщенияПользователямСрезПоследних.Период,
| СообщенияПользователямСрезПоследних.ПользовательОтКого,
| СообщенияПользователямСрезПоследних.ПользовательКому,
| СообщенияПользователямСрезПоследних.Сообщение,
| СообщенияПользователямСрезПоследних.ДатаИсполненияДо,
| СообщенияПользователямСрезПоследних.Выполнено
|ИЗ
| РегистрСведений.СообщенияПользователям.СрезПоследних(, ПользовательКому = &ПользовательКому) КАК СообщенияПользователямСрезПоследних
|ГДЕ
| СообщенияПользователямСрезПоследних.ДатаИсполненияДо >= &ДатаИсполненияДо
| И (НЕ СообщенияПользователямСрезПоследних.Выполнено)");
Запрос.УстановитьПараметр("ПользовательКому",ПараметрыСеанса.ТекущийПользователь);
Запрос.УстановитьПараметр("ДатаИсполненияДо",ТекущаяДата());
Результат = Запрос.Выполнить();
Если Результат.Пустой() тогда
Возврат;
КонецЕсли;
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() цикл
Форма = ПолучитьОбщуюФорму("ОповещениеПользователя");
Макет = ПолучитьОбщийМакет("СообщениеПользователю");
ТС = Макет.ПолучитьОбласть("ТекстСообщения");
ТС.Параметры.Сообщение = "Вам сообщение от пользователя : "+Выборка.ПользовательОтКого;
ТС.Параметры.Сообщение1 = Выборка.Сообщение;
Форма.ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(ТС);
Если Форма.Открыта() тогда
Форма.Обновить();
Форма.Активизировать();
иначе
Форма.Открыть();
КонецЕсли;
ПолучилосьЗаписать = Ложь;
КоличествоПопыток = 0;
Сообщение = "";
Пока (Не ПолучилосьЗаписать) и (КоличествоПопыток < 20) цикл
Попытка
Рег = РегистрыСведений.СообщенияПользователям.СоздатьМенеджерЗаписи();
Рег.Период = ТекущаяДата();
Рег.ПользовательОтКого = Выборка.ПользовательОтКого;
Рег.ПользовательКому = Выборка.ПользовательКому;
Рег.Сообщение = Выборка.Сообщение;
Рег.ДатаИсполненияДо = Выборка.ДатаИсполненияДо;
Рег.Выполнено = Истина;
Рег.Записать();
ПолучилосьЗаписать = Истина;
исключение
Сообщение = ОписаниеОшибки();
КоличествоПопыток = КоличествоПопыток + 1;
КонецПопытки;
КонецЦикла;
Если КоличествоПопыток = 20 тогда
Сообщить(Сообщение);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать
Общая форма с 2 реквизитами типа Строка:
"Сообщение" и "Сообщение1"
Общий макет с 1 областью из 2 ячеек:
"Сообщение" - От Кого
и
"Сообщение1" - собственно текст.
Регистр СообщенияПользователям:
независимый, в пределах секунды.
Реквизиты:
ПользовательОтКого - Справочник Пользователи
ПользовательКому - Справочник Пользователи
Сообщение - Строка (500)
ДатаИсполненияДо - Дата и время
Ресурсы:
Выполнено - Булево