Имя: Пароль:
1C
1С v8
Не выводится сообщение в управляемом приложении
,
0 mashunka
 
25.12.13
13:56
Управляемое приложение.
Имеется код, если упрощенно, то такой:
В модуле формы

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если БроньПеренесена(Параметр1....ПараметрN) Тогда
ОбщиеДействия.СообщениеПользователю("Бронь перенесена"); // Вызов 1
КонецЕсли;
КонецПроцедуры

ОбщиеДействия.СообщениеПользователю - там создается объект "СообщениеПользователю" и, собственно, сообщается. Процедура скопирована из типовых конфигураций, т.е. интереса не представляет.

БроньПеренесена - функция в серверном общем модуле, там что-то вроде:

&НаСервере
Функция БроньПеренесена(Параметр1....ПараметрN)
// Сначала запрос, который  получает документ Бронь и данные для нег (интереса не представляет)
// Если запрос не нашел то, что мне нужно, возвращается ЛОЖЬ и следует выход из функции.
...
Пока ВыборкаИзЗапроса.Следующий() Цикл
ДокументОбъект = Выборка.Документ.ПолучитьОбъект(); // Документ ТОГО же вида, что и тот, из формы которого вызвана функция, но не тот же самый.
// Действия по изменению документа
ДокументОбъект.Записать();
ОбщиеДействия.СообщениеПользователю("Бронь перенесена"); // Вызов 2
КонецЦикла;
Возврат Истина;
КонецФункции


Ситуация такая: если Функция БроньПеренесена возвращает истину, то ни одно сообщение из двух не выводится (я специально их в двух местах воткнула для проверки, хотя раньше был только Вызов 2)! Если же Функция БроньПеренесена прерывается до того, как обходит выборку из запроса, и возвращает ЛОЖЬ, то сообщение из модуля формы (вызов 1) выводится!
То есть получается, когда выполняются действия по получению и записи какого-то другого документа данного вида, то программ теряет связь с открытой формой... Или что-то в этом роде.
Если сообщение заменить на предупреждение, то Предупреждение появляется. Но ситуация требует, чтобы было именно фоновое не напрягающее сообщение.
Кто-нибудь сталкивался с тем, что сообщения выводятся в никуда? И как этого избежать?
1 Wobland
 
25.12.13
14:04
показать оповещение? всё не читал
2 lavryshev
 
25.12.13
14:11
Сообщение выводится на активную форму. Если после вывода сообщения форма закрывается, то пользователь его и не увидит.
3 mashunka
 
25.12.13
14:15
(2) в том-то и дело, что форма остается открытой, но сообщение не появляется. А если не делать действий, которые делает вызываемая функция, то появляется нормально. Вот я не могу понять, что такого она там делает, что программа перестает видеть открытую форму?
4 mashunka
 
25.12.13
14:15
(1) В принципе, очень прилично выглядит. Спасибо, это выход!
5 Sabbath
 
25.12.13
14:18
(0)
БроньПеренесена - функция в серверном общем модуле, там что-то вроде:


&НаСервере
Функция БроньПеренесена(Параметр1....ПараметрN)

что-то тут не то) &НаСервере в общем модуле?
6 lavryshev
 
25.12.13
14:18
(4) Показать оповещение на сервере не работает
7 mashunka
 
25.12.13
14:19
(5) нет, конечно, я сейчас написала, чтоб в глаза бросалось, что это серверная процедура
8 Sabbath
 
25.12.13
14:19
> если Функция БроньПеренесена возвращает истину

судя по коду там всегда истина возвращается
9 lavryshev
 
25.12.13
14:19
(5) если модуль и клиентский и серверный, то вполне
10 mashunka
 
25.12.13
14:20
(6) я вижу. Я его в форме вызову, ничего страшного!
11 Sabbath
 
25.12.13
14:21
(9) клиентский и серверный модуль отрабатывает там, откуда вызвано
12 Sabbath
 
25.12.13
14:22
+(11) а, я не про то)
13 Sabbath
 
25.12.13
14:22
+(12) хотя нет, все по теме
14 mashunka
 
25.12.13
14:24
(8) смотрите комментарий в начале функции - там сказано, когда возвращается ЛОЖЬ. Да это неважно сейчас, там на самом деле вообще по-другому, только писать было долго. Смысл в том, что если из функции выйти, не сделав куска про ПолучитьОбъект() и Записать(), то сообщения выводятся нормально! Если объект получался и записывался - то перестают.
15 Sabbath
 
25.12.13
14:26
(14) а модуль точно не клиет и сервер?
16 mashunka
 
25.12.13
14:27
(9), (15), модуль серверный, в оригинале нету текста &НаСервере. Простите, что ввела вас в заблуждение, хотела наоборот для наглядности показать, что это - на сервере! :)
17 Sabbath
 
25.12.13
14:34
(16) перечитал текст, тогда не понял, как предупреждение отрабатывает, если оно не доступно на сервере
18 Sabbath
 
25.12.13
14:34
Вообще этот модуль в типовых КлиентСервер обычно
19 Sabbath
 
25.12.13
14:39
СообщениеПользователю

Описание:

Предназначен для хранения параметров сообщения, которые необходимо вывести пользователю.
Если сообщение еще не было показано пользователю (такое может быть при работе на стороне сервера, в фоновом задании, внешнем соединении или Web-сервисах),

Короче ставь галку клиент и сервер, а записывай доумент отдельно на сервере)
20 mashunka
 
25.12.13
14:39
(17) ОбщиеДействия и модуль, в котором расположена функция БроньПересена - это вообще-то два разных модуля... Вы вчитываетесь в ненужные детали.
Хотелось подробнее изложить, в результате одни вопросы, а не ответы.

Если нет ничего по существу "пропадающих сообщений", то давайте считать тему закрытой - мне первым же ответом уже подсказали удовлетворительный выход из ситуации.
21 mashunka
 
25.12.13
14:40
(19) - см (20)
22 Sabbath
 
25.12.13
14:42
(20) по существу пропадающих сообщений же есть:
"Если сообщение еще не было показано пользователю (такое может быть при работе на стороне сервера"
23 Kvestin
 
25.12.13
17:22
(22) Сегодня уже два вопроса про сообщения на стороне сервера.  ;)
(0) Как 1С-ка связывает сообщения с формой при выводе их на сервере только ей и известно.
Я вызывал сообщения на стороне сервера только в фоновом задании для передачи текущего состояния через ПолучитьСообщенияПользователю().
Что мешает в вашем случае обработать все что нужно на сервере и вернуть структуру с результатом. На клиенте обработать эту структуру и сообщить результат обработки?
Независимо от того, куда вы едете — это в гору и против ветра!