Как отправить сообщение пользователю 1С?

1. кукареку 09.11.11 18:39 Сейчас в теме
Меня интересует, можно ли внутренними средствами 1С 8.0 отправить сообщение определенному пользователю или группе при выполнении некоторой процедуры?
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
19. fzt 03.06.15 11:01 Сейчас в теме
(1) кукареку, в принципе, если очень хочется, то можно всем пользователям послать сообщение.

	Если ОтключитьПользователей Тогда
		Блокировка = ПолучитьБлокировкуСеансов();
		Блокировка.КодРазрешения = КодРазрешения;
		Блокировка.Начало = ДатаНачала;
		Блокировка.Конец = ДатаОкончания;
		Блокировка.Сообщение = Сообщение;
		Блокировка.Установлена = Истина;
	Иначе
		Блокировка = ПолучитьБлокировкуСеансов();
		Блокировка.Установлена = Ложь;
	КонецЕсли;
	
	УстановитьБлокировкуСеансов(Блокировка);
Показать
21. ture 606 03.06.15 14:07 Сейчас в теме
(1) кукареку, группы почтовой рассылки.
37. inf012 13.03.17 08:18 Сейчас в теме
(1) В 8.3.10 в типовых (так понял) будет, как платная функция, вроде.
1с встраивает.
Обмен сообщениями
2. manfeese 09.11.11 18:47 Сейчас в теме
3. xxlinfo 10.11.11 14:14 Сейчас в теме
Если в 1С 8.0 есть процедура глобального контекста ПодключитьОбработчикОжидания,
то можно (в 1С 8.1 и в 1С 8.2 она есть).

В модуле приложения, в процедуре ПриНачалеРаботыСистемы добавляешь строку
ПодключитьОбработчикОжидания("МояПроцедура", 3)
где МояПроцедура - это будет экспортная процедура общего модуля
в которой будет происходить проверка на необходимость вывода
текущему пользователю сообщения.
а 3 - периодичность вызова МояПроцедура в секундах.

Итого: в одной процедуре происходить запись кому и что выводить,
а в другой (которая периодически опрашивается) осуществляется
вывод сообщения для текущего пользователя.
4. кукареку 10.11.11 15:52 Сейчас в теме
ПодключитьОбработчикОжидания в 1С 8.0 имеется, но вопрос был в другом, как именно мне вывести сообщение в 1С другому пользователю 1С?
5. Bober777 26 10.11.11 16:16 Сейчас в теме
Аська нужна внутри 1с?
7. кукареку 10.11.11 16:21 Сейчас в теме
Да хотелось бы не сторонный ресур юзать из 1С а в самой 1С выдать сообщение для определенного мною пользователя, но так я понимаю в 1С-ке нельзя
8. Stapy 12.11.11 20:34 Сейчас в теме
В типовых есть задачи/напоминания можете попробовать использовать их
9. aspiid 8 14.11.11 11:39 Сейчас в теме
Если речь идет о сервере, то теоретически, можно по номеру соединения через ОЛЕ подключиться к уже существующему сеансу, и вывести в нем какое-нибудь сообщение. Но никогда так не делал.
17. AlexO 135 03.02.15 13:18 Сейчас в теме
(9) aspiid,
то теоретически, можно по номеру соединения через ОЛЕ подключиться к уже существующему сеансу
Попробуйте.
Сразу уясните разницу между сеансом 1С и подключением к серверу 1С.
38. user664177_ademar26 1 01.11.17 11:17 Сейчас в теме
Открываю обработку и при отправке пишет:
Не удалось отправить сообщение пользователю : Плишков Дмитрий Владимирович
По причине : {ВнешняяОбработка.ОтправитьСообщениеПользователю.Форма.Форма.Форма(17)}: Поле объекта не обнаружено (СообщенияПользователям)
39. user664177_ademar26 1 01.11.17 11:26 Сейчас в теме
Здравствуйте! я открыл вашу обработку и пытаюсь отправить сообщение но выходит ошибка:
Не удалось отправить сообщение пользователю : Плишков Дмитрий Владимирович
По причине : {ВнешняяОбработка.ОтправитьСообщениеПользователю.Форма.Форма.Форма(17)}: Поле объекта не обнаружено (СообщенияПользователям)
10. Mudrii_Gankster 16.11.11 14:52 Сейчас в теме
Через документ "Событие" можно сообщение отправить пользователю
11. dandrontiy 16.11.11 16:20 Сейчас в теме
Регистр сведений сделать периодический и туда записывать сообщения с указанием, какому пользователю или отделу показать, в обработчике ожидания проверять регистр, и выводить сообщение. Есть и типовая обработка, видел даже где-то здесь, на инфостарте.
12. maxdot 17.11.11 11:12 Сейчас в теме
Нет такой функции ©
А велосипедами можно.
Можно повесить при изменении данных, и писать туда юзеру сабжи.

ЗапуститьПриложение("msg %USERNAME% "Дай денег гат!"");


+ Прелесть, месага поверх всех окон.
- Если сообщений будет много, их придётся проклацать мышкой все.
+ Если юзер офлайн, сабж получит при логоне в форточки.

Соответственно если это выполнять на терминальном сервере, то можно получить список юзверей из переменных окружения и послать всем. Если последнее нада - запрашивай.

UPD: сообщение будет от текущего залогиневшегося юзера.. но можно выполнить MSG от имени другого пользователя.. например завести на компе юзера "программа 1С" и от его имени слать
Yan_Malyakov; dark.tke; TeMochkiN; Stas_Gromov; vshumai; eshxe; кукареку; +7 Ответить
14. кукареку 17.11.11 12:38 Сейчас в теме
(12) bugmeoncemore, Во, хорошая идея)))) спасибо за подсказку =)
15. lulufa 03.02.15 10:44 Сейчас в теме
(12) bugmeoncemore, почему msg сразу вылетает? как задержать, пока пользователь сам не закроет?
16. lulufa 03.02.15 13:10 Сейчас в теме
(12) bugmeoncemore, а каким образом реализовать ЗапуститьПриложение("msg %USERNAME% "Дай денег гат!""); от имени другого пользователя? "UPD: сообщение будет от текущего залогиневшегося юзера.. но можно выполнить MSG от имени другого пользователя.. например завести на компе юзера "программа 1С" и от его имени слать"

18. AlexO 135 03.02.15 13:21 Сейчас в теме
(16) lulufa,
ЗапуститьПриложение("msg %USERNAME% "Дай денег гат!""); от имени другого пользователя?
Никак, кроме как войти под этим "другим" и выполнить ""msg %USERNAME% "Дай денег гат!""
36. redtram 29 13.03.17 06:09 Сейчас в теме
(18) в гугле runas можно попробовать посмотреть :) ну или сразу в cmd runas /?
13. elis99 17.11.11 11:33 Сейчас в теме
http://infostart.ru/public/87579/

думаю, что это может быть решением
20. Чарик 2 03.06.15 12:39 Сейчас в теме
Через регистр сведений и через обработчик ожидания в "ПриНачалеРаботы". В регистр пишутся сообщения пользователям (история переписки), а обработчиком идет рассылка. Писал такое для реализации выгонялки пользователей в файловой базе 1С 8.1. А дальше уже все зависит от твоей фантазии
22. serg138 28.09.15 11:17 Сейчас в теме
Здравствуйте!

ЗапуститьПриложение("msg %USERNAME% "Дай денег гат!"");

Я так понимаю этот код будет работать только в домене или в рамках одного компьютера?

У меня вообще такая задача. Самописная примитивная конфигурация. Пользователь1 открыл конфигурацию и свернул окно. Пользователь2 создал документ и при его проведении необходимо как-то оповестить Пользователь1. То есть у Пользователь1 программа свернута и надо заставить его обратить внимание на нее каким-либо сообщением или заставить мигать свернутое окно. Я так понимаю, что процедура СООБЩИТЬ тут не уместна, а вышеописанный код подойдет лишь для домена или терминальника.
23. Serge_ASB 26.02.16 15:11 Сейчас в теме
Можно создать регистр сведений и нарисовать в каком-то общем модуле что-то подобное:
Процедура ОбработкаСообщенийПользователю() Экспорт
	
	Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1
	|	СообщенияПользователямСрезПоследних.Период,
	|	СообщенияПользователямСрезПоследних.ПользовательОтКого,
	|	СообщенияПользователямСрезПоследних.ПользовательКому,
	|	СообщенияПользователямСрезПоследних.Сообщение,
	|	СообщенияПользователямСрезПоследних.ДатаИсполненияДо,
	|	СообщенияПользователямСрезПоследних.Выполнено
	|ИЗ
	|	РегистрСведений.СообщенияПользователям.СрезПоследних(, ПользовательКому = &ПользовательКому) КАК СообщенияПользователямСрезПоследних
	|ГДЕ
	|	СообщенияПользователямСрезПоследних.ДатаИсполненияДо >= &ДатаИсполненияДо
	|	И (НЕ СообщенияПользователямСрезПоследних.Выполнено)");
						  
	Запрос.УстановитьПараметр("ПользовательКому",ПараметрыСеанса.ТекущийПользователь);
	Запрос.УстановитьПараметр("ДатаИсполненияДо",ТекущаяДата());
	
	Результат = Запрос.Выполнить();
	
	Если Результат.Пустой() тогда
		Возврат;
	КонецЕсли;
	
	Выборка = Результат.Выбрать();
	
	Пока Выборка.Следующий() цикл
		
		Форма = ПолучитьОбщуюФорму("ОповещениеПользователя");
		
		Макет = ПолучитьОбщийМакет("СообщениеПользователю");
		ТС = Макет.ПолучитьОбласть("ТекстСообщения");
		ТС.Параметры.Сообщение = "Вам сообщение от пользователя : "+Выборка.ПользовательОтКого;
		ТС.Параметры.Сообщение1 = Выборка.Сообщение;
		Форма.ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(ТС);
		Если Форма.Открыта() тогда
			Форма.Обновить();
			Форма.Активизировать();
		иначе
			Форма.Открыть();
		КонецЕсли;
		
		ПолучилосьЗаписать = Ложь;
		КоличествоПопыток = 0;
		Сообщение = "";
		
		Пока (Не ПолучилосьЗаписать) и (КоличествоПопыток < 20) цикл 
			
			Попытка
				
				Рег = РегистрыСведений.СообщенияПользователям.СоздатьМенеджерЗаписи();
				Рег.Период = ТекущаяДата();
				
				Рег.ПользовательОтКого = Выборка.ПользовательОтКого;
				Рег.ПользовательКому   = Выборка.ПользовательКому;
				Рег.Сообщение 		   = Выборка.Сообщение;
				Рег.ДатаИсполненияДо   = Выборка.ДатаИсполненияДо;
				Рег.Выполнено          = Истина;
				
				Рег.Записать();
				
				ПолучилосьЗаписать = Истина;
				
			исключение
				
				Сообщение = ОписаниеОшибки();
				
				КоличествоПопыток = КоличествоПопыток + 1;
				
			КонецПопытки;
			
		КонецЦикла;
		
		Если КоличествоПопыток = 20 тогда
			Сообщить(Сообщение);
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры
Показать

Работает.
anatolycompass; +1 Ответить
33. Луна5 101 08.09.16 10:34 Сейчас в теме
(23) Serge_ASB, Все замечательно. Но как теперь прервать вывод сообщений? Ждать 20 минут?
35. Serge_ASB 08.09.16 14:54 Сейчас в теме
(33) Луна5,
Что-то дописать придется. Такая задача не стояла, и с подобной проблемой пока не сталкивались.
24. Serge_ASB 26.02.16 15:17 Сейчас в теме
Еще обработку нужно в конфу добавить:
Прикрепленные файлы:
ОтправитьСообщениеПользователю.epf
25. luda33 01.04.16 13:08 Сейчас в теме
(24) Serge_ASB, еще нужен регистр, общая форма, общий макет - с этим понятно. А главное в какой момент будет отрабатывать (по какому событию) описанная выше процедура для глобального модуля? Это куда прикрутить?
26. Serge_ASB 02.04.16 15:19 Сейчас в теме
(25) luda33,
В ПриНачалеРаботыСистемы.
Если нужно, скину текст и посмотрю остальные компоненты системы.
27. luda33 13.04.16 07:43 Сейчас в теме
(26) Serge_ASB, нужно, спасибо
при НачалеРаботыСистемы не совсем то - надо что бы в реальном времени отрабатывалось, проверялось каждую минуту например, и при этом что бы сервер не висел и сильно не грузился, база скульная. пользователей около15. но при заведении заявки формируется 5 - 7 документов - так что бывает тормозит, а тут еще будет какая то штука крутиться
28. Serge_ASB 13.04.16 11:46 Сейчас в теме
(27) luda33,
ПриНачалеРаботыСистемы()
...
ОбработкаСообщенийПользователю();
ПодключитьОбработчикОжидания("ОбработкаСообщенийПользователю",60);
...


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


Общая форма с 2 реквизитами типа Строка:
"Сообщение" и "Сообщение1"
Общий макет с 1 областью из 2 ячеек:
"Сообщение" - От Кого
и
"Сообщение1" - собственно текст.

Регистр СообщенияПользователям:
независимый, в пределах секунды.
Реквизиты:
ПользовательОтКого - Справочник Пользователи
ПользовательКому - Справочник Пользователи
Сообщение - Строка (500)
ДатаИсполненияДо - Дата и время
Ресурсы:
Выполнено - Булево

Вроде всё.
ChekarV; Voblhned; kins777; luda33; +4 Ответить
29. luda33 14.04.16 07:45 Сейчас в теме
(28) Serge_ASB, спасибо попробую
30. Serge_ASB 14.04.16 19:37 Сейчас в теме
(29) luda33,
Будут вопросы, пишите.
31. Liones23 48 05.05.16 13:05 Сейчас в теме
У кого-нибудь есть рабочий пример отправки сообщений с помощью sent?
Прочитала о нем вот здесь http://forum.infostart.ru/forum16/topic45801/message1552328/?result=reply#message1552328
32. v3rter 05.05.16 13:24 Сейчас в теме
(31) Liones23, net send работает только на серверных виндовсах, вместо него можно использовать msg, но на некоторых windows 7 Home команда msg может не работать. Есть самодельные аналоги net send типа http://www.winsent.ru/rus/download/ или http://www.killprog.com/netviewr.html

P.S. Если вдруг кому понадобится отправить сообщение ВСЕМ терминальным пользователям/пользователям одного компа, то
MSG * Hi there!
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)