Имя: Пароль:
1C
1С v8
1с вывод сообщения со статусом
0 Sargez
 
18.08.17
10:50
Здравствуйте,

На первый взгляд простецкая задача, но не могу решить.

В подписке при проверки записи элемента выдаются сообщения пользователю. Реаллизовано через механизм ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю И
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю.

при отказе выдаются сообщения. НО заказчик захотел чтобы сообщения , которые не дают записать элемент маркировались красным знаком "!", а сообщения , которые информативные и все равно дают записать элемент (такие есть) маркировались "i" - информация.

аналог был в прошлом - сообщить(текст,статуссообщения) - но во-первых на платформе 8.3.10 - сообщения все равно не маркируются, ну а во-вторых какой-то старый способ.

какие есть предложения по решению данного вопроса?

механизм оповещения пользователя тоже больше нет, чем да, тк может быть очень много всплывающих окон.

Заранее благодарен!
1 Denis_CFO
 
18.08.17
11:03
(0) ну добавь перед текстом сообщения ! или i. и сообщай.
2 Dzenn
 
гуру
18.08.17
11:04
В общем случае такое не решить, так как запись не всегда происходит из клиентской формы.

В частном случае, если речь идёт о какой-то конкретной форме, можно сделать так:

1 — добавляешь на форму новый реквизит типа строка
2 — в событии "перед записью" формы создаёшь помещаешь во временное хранилище пустое значение, адрес временного хранилища помещаешь в созданный тобой реквизит
3 — передаёшь адрес временного хранилища черед дополнительные параметры объекта, адрес становится доступен в событии
4 — вместо использования "сообщить ошибку пользователю" помещаешь все сообщения в объект и по адресу временного хранилища
5 — в событии "после записи" формы смотришь, есть ли что-то во временном хранилище
6 — если есть, выводишь в любом удобном для себя виде через какое-то новое окно, используя "форматирование текста" например
3 Dzenn
 
гуру
18.08.17
11:07
а если совсем попроще и без цвета, то при выводе группируй сообщения — сначала важные, потом неважные, с выводом заголовков.

Важные сообщения:
   Первое
   Второе

Неважные сообщения
   Первое
   Второе
4 dezss
 
18.08.17
11:10
ПоказатьОповещениеПользователя
5 dezss
 
18.08.17
11:10
(4) + Картинку сможешь поставить какую захочешь.
6 Dzenn
 
гуру
18.08.17
11:14
(3) "после записи" при отмене записи не вызывается, на "после записи" повесить не получится(
7 Dzenn
 
гуру
18.08.17
11:14
(6) -> (2)
8 Dzenn
 
гуру
18.08.17
11:15
(4) показатьоповещениепользователя не работает на сервере
9 dezss
 
18.08.17
11:18
(8) на сервере нет, но какой смысл выводить что-то на сервере. Это же интерактивная работа с объектом, так что все это имеет смысл только в модуле формы, а что-то выводить при, например, массовой перепроводке документов ИМХО глупо.
10 Dzenn
 
гуру
18.08.17
11:18
к (2) вместо "После записи" можно использовать ПодключитьОбработчикОжидания, который после записи с периодичностью 0.5 секунды в течение N секунд будет смотреть, не появилось ли что-то во временном хранилище, и если появилось, выведет это что-то
11 dezss
 
18.08.17
11:18
(10) 0.5 нельзя...минимум 1. Если 0.5, то он выполнится только 1 раз.
12 Dzenn
 
гуру
18.08.17
11:19
(11) да
13 Dzenn
 
гуру
18.08.17
11:19
(9) ну так тут как раз и идёт речь о том, чтобы передать что-то с клиента на сервер. Если он на клиенте получит информацию, то её уже можно вывести как угодно — хоть через ПоказатьОповещение... , хоть через своё окно
14 Dzenn
 
гуру
18.08.17
11:19
с сервера на клиент*
15 Sargez
 
18.08.17
11:22
(2) так если будет ошибка, которая не дает записать объект. после записи не будет вызываться.
16 dezss
 
18.08.17
11:22
(14) Насколько я понял, у автора дилема именно с маркировкой сообщения, а не с передачей чего-то на клиент.
17 Sargez
 
18.08.17
11:22
(10) да, через ПодключитьОбработчикОжидания - вариант.
18 dezss
 
18.08.17
11:25
В общем, вот варианты оповещений, может что-то подойдет.
http://xn----1-bedvffifm4g.xn--p1ai/articles/вывод-сообщений-пользователю/
19 Dzenn
 
гуру
18.08.17
11:27
(16) проблема у автора в том, что сообщения с сервера доступны только в одном формате — через оператор Сообщить(..), лишённый возможностей форматирования, а по условиям задачи нужно форматировать. А форматировать можно только на клиенте. Соответственно, нужно после записи получить текст с сервера на клиент.
20 dezss
 
18.08.17
11:30
(19) Тогда вопрос больше в архитектуре. Зачем городить огород, если работа идет интерактивно? Можно же все сделать в модуле формы.
21 Dzenn
 
гуру
18.08.17
11:37
(20) А что изменит изменение архитектуры? Запись никогда не будет происходить на клиенте, и тебе всё равно нужно будет получить тексты сообщений, тем или иным образом, в форме элемента и именно после записи
22 dezss
 
18.08.17
11:41
(21) Как это что изменит? Если осуществлять свои проверки именно в модуле формы перед записью, а не в подписке, возвращать туда результаты и в зависимости от них выводить сообщения, то проблемы у ТС и не будет.
23 Dzenn
 
гуру
18.08.17
11:48
(22) перенос функциональности из подписки в модуль формы ПередЗаписью никак не изменит способ получения сообщений на клиенте после записи. Тебе всё равно придётся использовать адрес во временном хранилище, который ты инициализируешь перед записью. Тебе всё равно придётся получать данные из этого адреса опосредованно, из обработчика ожидания.
24 dezss
 
18.08.17
11:51
(23) Зачем после записи, ведь перед? Да и какой в этом смысл, ведь после записи мы не можем отменить запись, а это ведь нужно в задаче ТС.
Да и временное хранилище не обязательно. Добавить отдельный реквизит формы для этих сообщений и заполнять его.
25 Sargez
 
18.08.17
11:52
(22) вопрос все-таки остается все равно. как в сообщении в всплывающем окне промаркировать? всплывающие окна в виде показатьоповещениюпользователю не подходят заказчику.
даже если я все сообщения получу на клиенте - то как промаркировать? те сделать красный восклицательный знак или синию букву "i"
26 dezss
 
18.08.17
11:56
(25) Почему не подходят? Группировать сообщения по критичности и их будет всего 2. Одно с красным восклицательным знаков, второе с синей i. Если не успели невести курсор и прочитать, есть история.
В конце концов, если вообще никак не подходят, то нарисуй свою форму с выводам сообщения.
27 Dzenn
 
гуру
18.08.17
12:04
(24) как и в какой момент ты будешь заполнять предлагаемый тобой отдельный реквизит формы?

Попробуй на пустом конфигураторе реализовать предлагаемое тобой, и тогда может быть поймёшь суть вопроса автора топика.
28 dezss
 
18.08.17
12:05
(27) Это я на твое сообщение о том, как передавать из ПередЗаписью в ПослеЗаписи в модуле формы.
29 Dzenn
 
гуру
18.08.17
12:07
(28) Всё равно попробуй реализовать сказанное тобой.
30 dezss
 
18.08.17
12:09
(29) Ща, сохраню конфу и попробую. Пройдусь отладчиком.
31 Dzenn
 
гуру
18.08.17
12:10
(25) ну так в подписке собирай сообщения не в строковый реквизит, а например в такой объект:


Структура = Новый Структура;
Структура.Вставить("Ошибки", МассивСообщенийОбОшибке);
Структура.Вставить("Предупреждения", МассивПредупреждающихСообщений);

// И потом:
ПоместитьВоВременноеХранилище(Структура, НашАдрес);
32 dezss
 
18.08.17
12:13
(31) Он не про то, как получить разделить ошибки, а про то, как именно показать знаки.

Всплывающих вроде только 2.
СообщениеПользователю и ПоказатьОповещениеПользователя.
Больше никаких всплывающих я не знаю.
33 Dzenn
 
гуру
18.08.17
12:15
(32) я в (2) написал — нужно создать свою форму вывода. В форме вывода может использоваться что угодно — хоть ФорматированныйТекст, хоть ПолеHTML, хоть ТабличныйДокумент, хоть ещё что-то — как душе угодно.
34 dezss
 
18.08.17
12:19
(29) попробовал.
Вот результат, именно этого я и ожидал:
ПриОткрытии
http://clip2net.com/s/3N2lbDM
ПередЗаписью
http://clip2net.com/s/3N2litD
ПослеЗаписи
http://clip2net.com/s/3N2llLe
35 Dzenn
 
гуру
18.08.17
12:42
(34) Первое — событие "ПослеЗаписи" при отказе от записи не отработает
Второе — ПередЗаписью в твоём случае отрабатывает на клиенте
36 dezss
 
18.08.17
12:47
(35) Естественно не отработает. Это только был ответ на твой вопрос, как передавать.
Да, на клиенте. И что мешает использовать это событие и именно в нем проводить свои проверки?
37 dezss
 
18.08.17
12:57
Вот жеж...Моего оппонента забанили.