Добрый день!
Задача: При записи документа происходит некоторый анализ записываемого документа и его результат выводится как СообщениеПользователю....
Так как данное событие не критично то не влияет на Отмену (записи/Проведения) и просто несет некоторое информативное наполнение...
Т.Е. Открыто окно документа - пользователь может нажать "Провести и закрыть" - окна документа уже нет. чтобы вывести сообщение, Документ может быть открыт из: Списка, Отчета (расшибровка), Избранное и пр. - т.е Владелец окна тоже не подходит...
Как Вывести сообщениеПользователю в такой ситуации???
AnryMc @ Today, 14:13
,
Если БСП, то есть ОбщегоНазначенияКлиент.СообщитьПользователю() с несколькими вариантами вызова.
Petre @ Вчера, 17:49
,
БСП есть но расположенное в модуле формы в процедуре ПослеЗаписиНаСервере - не срабатывает при "Провести и Закрыть"
З.Ы. Или я не знаю "волшебное" слово?
AnryMc @ Today, 8:05
,
Для вызова с сервера есть ОбщегоНазначения.СообщитьПользователю().
В форме есть событие на клиенте ПослеЗаписи.
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("!!!!", Объект.Ссылка, ,,);
КонецПроцедуры
// Модуль "закрываемой" формы:
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
Если ПараметрыЗаписи.Свойство("Сообщения") Тогда
ПустойУИД = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
Для Каждого Элемент Из ПараметрыЗаписи.Сообщения Цикл
Сообщение = Элемент;
Сообщение.ИдентификаторНазначения = ПустойУИД;
Сообщение.Сообщить();
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
ПараметрыЗаписи.Вставить("Сообщения", ПолучитьСообщенияПользователю(Истина)); // удаляем после получения
КонецПроцедуры
// Код вывода сообщения (в серверных процедурах)
// ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Сообщение");
//Как показать пользователю некритические информационные сообщения если он нажал "Записать и закрыть" или "Провести и закрыть".
//Бывают ситуации когда необходимо сообщить пользователю информацию, не вызванную исключительной ситуацией, т.е. ошибкой.
//И все бы хорошо, если бы пользователь не нажимал кнопки "Записать и закрыть" или "Провести и закрыть". В этом случае, если сообщение вызвано исключительной ситуацией, то оно отобразится
//и форма не закроется. Но в случае, если сообщение информационное, т.е. запись или проведение завершились удачно, то сообщение на доли секунды выведется в окно сообщений формы
//и закроется вместе с ней. Плохо.
//Искал по форумам решение, но так и не нашел того, что мне бы подошло. Обработчик ожидания не хочу для этого использовать. Решение с перенаправлением
//сообщения в окно приложения путем активации поочередно окон в моей версии платформы работать корректно не захотело.
//В итоге реализовал так (для записи элемента справочника, для документов реализация будет подобной же):
//1. В форме элемента создал реквизит МассивСообщений типа СписокЗначений для хранения перехваченных с сервера сообщений пользователю.
//2. Процедура ПослеЗаписиНаСервере()
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
МассивСообщений.Очистить();
//Получаем сообщения, предназначающиеся пользователю, но пока не показанные ему, и удаляем их из фиксированного массива (системного), где они хранятся
//Получить сообщения можем лишь на сервере. Как только перейдем на клиент сообщения будут считаться показанными.
ФиксМассивСообщений = ПолучитьСообщенияПользователю(Истина);
//Записываем сообщения в список значений (реквизит формы МассивСообщений)
Для Сч = 0 По ФиксМассивСообщений.Количество() - 1 Цикл
МассивСообщений.Добавить(ФиксМассивСообщений.Получить(Сч));
КонецЦикла;
КонецПроцедуры
//3. Процедура ПослеЗаписи()
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
//Если сообщения есть, то инициируем их показ пользователю
Если МассивСообщений.Количество() > 0 Тогда
ПоказатьСообщенияПользователю();
МассивСообщений.Очистить();
КонецЕсли;
КонецПроцедуры
//4. Создал процедуру ПоказатьСообщенияПользователю()
&НаКлиенте
Процедура ПоказатьСообщенияПользователю()
Для Каждого Сообщение Из МассивСообщений Цикл
//Сообщения показываем в виде предупреждений, т.к. пока пользователь не нажмет "Ок" форма не закроется. Т.е. только так мы достигаем цели,
//чтобы пользователь увидел сообщения перед закрытием формы
Предупреждение("" + Сообщение.Значение.Текст);
КонецЦикла;
КонецПроцедуры
//Все вышеописанные процедуры описаны в модуле формы.
denis84 @ Сегодня, 9:57
,
Это я видел до данной темы, но не понимаю:
1) // удаляем после получения
2) ПолучитьСообщенияПользователю(Истина)
3) // Код вывода сообщения (в серверных процедурах)
// ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Сообщение");
Т.е.:
1) как и где сформировать само сообщение?
2) Как и где его потом очистить?
3) Как и где заставить его вывести?
4) Какое фоновое задание?
Для: Business automation software for accounting CORP, edition 2.1 (2.1.13.1)
P.S. Метод через "Окно.Активировать()" - тоже не смог заставить работать...
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua