Имя: Пароль:
1C
1С v8
Как получить сообщения пользователю в тонком клиенте?
,
0 mikecool
 
11.08.11
16:56
которые были сообщены на стороне сервера?
1 mikecool
 
11.08.11
17:01
так понимаю - надо пользоваться Сообщить?
2 Diversus
 
11.08.11
17:01
Никак. Сообщить на стороне сервера не работает...
3 aleks-id
 
11.08.11
17:01
СообщениеПользователю
4 mikecool
 
11.08.11
17:02
(2) о как
а как быть с
Сообщить (Message)
Синтаксис:

Сообщить(<ТекстСообщения>, <Статус>)
Параметры:

<ТекстСообщения> (обязательный)


Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
5 Stepa86
 
11.08.11
17:02
Глобальный контекст (Global context)
ПолучитьСообщенияПользователю (GetUserMessages)
Синтаксис:

ПолучитьСообщенияПользователю(<УдалятьПолученные>)
Параметры:

<УдалятьПолученные> (необязательный)

Тип: Булево. Признак необходимости удаления полученных сообщений из списка.
Истина - удалять.
Значение по умолчанию: Ложь
Возвращаемое значение:

Тип: ФиксированныйМассив.
Описание:

Получает массив объектов СообщениеПользователю, которые еще не были выведен пользователю.
Такое может происходить при работе в регламентных заданиях, на стороне сервера или в Web-сервисах.

Доступность:

Сервер, толстый клиент, внешнее соединение.
См. также:

СообщениеПользователю
Глобальный контекст, метод Сообщить
6 mikecool
 
11.08.11
17:02
(3) пользуюсь, но в тонком клиенте не могу ПолучитьСообщенияПользователю()
7 mikecool
 
11.08.11
17:02
(5) ну почитай доступность, вротмненоги ((
8 mikecool
 
11.08.11
17:03
+7 я попробовал, получил в ответ - Нет такого метода
9 Diversus
 
11.08.11
17:04
Опапа... А я не знал :)
10 aleks-id
 
11.08.11
17:05
(6) для зачем тебе его получать? оно без получения выстрелит.
11 mikecool
 
11.08.11
17:06
(10) а я хз )) щас ошибку сгенерю и посмотрю
12 aleks-id
 
11.08.11
17:07
(11) тока стреляй туда куда надо :)
13 mikecool
 
11.08.11
17:07
(10) имеешь ввиду - что тонкий клиент отобразит сообщениепользователю , которое сообщено на стороне сервера автоматиськи?
14 Aprobator
 
11.08.11
17:09
нефига не понял, а что мешает сообщить сразу на клиенте, а не откда то сообщение еще доставать? Тупо #Если ТонкийКлиент ну и т.д..
15 mikecool
 
11.08.11
17:09
какой то странный эффект
Глобальная команда, добавлена в интерфейс в раздел Важное
При выполнении команды исчезает рабочий стол((
16 fisher
 
11.08.11
17:09
По идее, ПолучитьСообщенияПользователю() только на стороне сервера и нужно. А на стороне клиента они должны отображаться при первой же возможности.
17 mikecool
 
11.08.11
17:09
(14) потому что данные об ошибках находятся на стороне сервера и гонять их на клиента пока не вижу смысла
18 mikecool
 
11.08.11
17:10
(16) как раз наеборот, имхо
19 mikecool
 
11.08.11
17:11
+15 вернее - исчезает окно открытой на раб. столе обработки
20 aleks-id
 
11.08.11
17:12
(13) отобразит. только надо правильно указать в каком месте отображать его!
21 Stepa86
 
11.08.11
17:12
(7) и что тебе мешает получить фикс. массив в серверном методе и отдать на клиент только нужно???
22 mikecool
 
11.08.11
17:13
(21) разве что так...
(20) а подробнее?
23 aleks-id
 
11.08.11
17:15
(22) в сп пример глянь
24 fisher
 
11.08.11
17:17
(18) В смысле, наоборот?
Я надеюсь, мы об объекте СообщениеПользователю говорим?
Потому что обычное Сообщить() просто игнорируется на сервере.
А СообщениеПользователю.Сообщить() ставит сообщение в очередь и сообщение будет отображено сразу после передачи управления на клиент.
ПолучитьСообщенияПользователю() позволяет посмотреть эту очередь на сервере. А как только управление получит клиент, сообщения будут отображены и очередь очиститься.
25 mikecool
 
11.08.11
17:17
(23) этот?

Пример:

Процедура ДействиеСОбъектом(ОбъектДанных)
   ...
   Сообщение = Новый СообщениеПользователю();
   Текст = "ru = ""В строке 11 табличной части ""Номенклатура"" не хватает ";"
    + " en = ""In line 11 of tabular section ""Nomenclature"" is missing ";
   Сообщение.Текст = НСтр(Текст)+НедостающееКоличество+" "+ЕдиницаИзмеренияНоменклатуры;
   Сообщение.Поле = "Номенклатура[10].Количество";
   Сообщение.УстановитьДанные(ОбъектДанных);
   Сообщение.Сообщить();

КонецПроцедуры;
26 mikecool
 
11.08.11
17:18
(24) попробую проверить, спс за наводку
27 aleks-id
 
11.08.11
17:18
короче на серверную процедуру

Процедура СообщитьПользователю(
       Знач ТекстСообщенияПользователю,
       Знач КлючДанных = Неопределено,
       Знач Поле = "",
       Знач ПутьКДанным = "",
       Отказ = Ложь) Экспорт
   
   Сообщение = Новый СообщениеПользователю;
   Сообщение.Текст = ТекстСообщенияПользователю;
   Сообщение.Поле = Поле;
   
   ЭтоОбъект = Ложь;
   
#Если НЕ (ТонкийКлиент ИЛИ ВебКлиент) Тогда
   Если КлючДанных <> Неопределено
      И XMLТипЗнч(КлючДанных) <> Неопределено Тогда
       ТипЗначенияСтрокой = XMLТипЗнч(КлючДанных).ИмяТипа;
       ЭтоОбъект = Найти(ТипЗначенияСтрокой, "Object.") > 0;
   КонецЕсли;
#КонецЕсли
   
   Если ЭтоОбъект Тогда
       Сообщение.УстановитьДанные(КлючДанных);
   Иначе
       Сообщение.КлючДанных = КлючДанных;
   КонецЕсли;
   
   Если НЕ ПустаяСтрока(ПутьКДанным) Тогда
       Сообщение.ПутьКДанным = ПутьКДанным;
   КонецЕсли;
       
   Сообщение.Сообщить();
   
   Отказ = Истина;
   
КонецПроцедуры

пример вызова:
СообщитьПользователю(ТекстСообщения,,,,);
28 mikecool
 
11.08.11
17:23
(27) спс, вспомнил, что в типовой где то есть подобное )))
буду искать
29 fisher
 
11.08.11
17:24
(27) Тогда уж лучше обзови СообщитьПользователюОбОшибке()
30 aleks-id
 
11.08.11
17:24
(28) ОбщегоНазначенияКлиентСервер ;)
31 fisher
 
11.08.11
17:26
Хотя, да... Если просто сообщить, тогда просто Отказ не передается...
32 mikecool
 
11.08.11
17:27
(30) спс
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.