1с вывод сообщения со статусом #803305


#0 by Sargez
Здравствуйте, На первый взгляд простецкая задача, но не могу решить. В подписке при проверки записи элемента выдаются сообщения пользователю. Реаллизовано через механизм ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю И ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю. при отказе выдаются сообщения. НО заказчик захотел чтобы сообщения , которые не дают записать элемент маркировались красным знаком "!", а сообщения , которые информативные и все равно дают записать элемент (такие есть) маркировались "i" - информация. аналог был в прошлом - сообщить(текст,статуссообщения) - но во-первых на платформе 8.3.10 - сообщения все равно не маркируются, ну а во-вторых какой-то старый способ. какие есть предложения по решению данного вопроса? механизм оповещения пользователя тоже больше нет, чем да, тк может быть очень много всплывающих окон. Заранее благодарен!
#1 by Denis_CFO
ну добавь перед текстом сообщения ! или i. и сообщай.
#2 by Dzenn
В общем случае такое не решить, так как запись не всегда происходит из клиентской формы. В частном случае, если речь идёт о какой-то конкретной форме, можно сделать так: 1 — добавляешь на форму новый реквизит типа строка 2 — в событии "перед записью" формы создаёшь помещаешь во временное хранилище пустое значение, адрес временного хранилища помещаешь в созданный тобой реквизит 3 — передаёшь адрес временного хранилища черед дополнительные параметры объекта, адрес становится доступен в событии 4 — вместо использования "сообщить ошибку пользователю" помещаешь все сообщения в объект и по адресу временного хранилища 5 — в событии "после записи" формы смотришь, есть ли что-то во временном хранилище 6 — если есть, выводишь в любом удобном для себя виде через какое-то новое окно, используя "форматирование текста" например
#3 by Dzenn
а если совсем попроще и без цвета, то при выводе группируй сообщения — сначала важные, потом неважные, с выводом заголовков. Важные сообщения:    Первое    Второе    Второе
#4 by dezss
ПоказатьОповещениеПользователя
#5 by dezss
+ Картинку сможешь поставить какую захочешь.
#6 by Dzenn
"после записи" при отмене записи не вызывается, на "после записи" повесить не получится(
#7 by Dzenn
->
#8 by Dzenn
показатьоповещениепользователя не работает на сервере
#9 by dezss
на сервере нет, но какой смысл выводить что-то на сервере. Это же интерактивная работа с объектом, так что все это имеет смысл только в модуле формы, а что-то выводить при, например, массовой перепроводке документов ИМХО глупо.
#10 by Dzenn
к вместо "После записи" можно использовать ПодключитьОбработчикОжидания, который после записи с периодичностью 0.5 секунды в течение N секунд будет смотреть, не появилось ли что-то во временном хранилище, и если появилось, выведет это что-то
#11 by dezss
0.5 нельзя...минимум 1. Если 0.5, то он выполнится только 1 раз.
#12 by Dzenn
да
#13 by Dzenn
ну так тут как раз и идёт речь о том, чтобы передать что-то с клиента на сервер. Если он на клиенте получит информацию, то её уже можно вывести как угодно — хоть через ПоказатьОповещение... , хоть через своё окно
#14 by Dzenn
с сервера на клиент*
#15 by Sargez
так если будет ошибка, которая не дает записать объект. после записи не будет вызываться.
#16 by dezss
Насколько я понял, у автора дилема именно с маркировкой сообщения, а не с передачей чего-то на клиент.
#17 by Sargez
да, через ПодключитьОбработчикОжидания - вариант.
#18 by dezss
В общем, вот варианты оповещений, может что-то подойдет.
#19 by Dzenn
проблема у автора в том, что сообщения с сервера доступны только в одном формате — через оператор Сообщить(..), лишённый возможностей форматирования, а по условиям задачи нужно форматировать. А форматировать можно только на клиенте. Соответственно, нужно после записи получить текст с сервера на клиент.
#20 by dezss
Тогда вопрос больше в архитектуре. Зачем городить огород, если работа идет интерактивно? Можно же все сделать в модуле формы.
#21 by Dzenn
А что изменит изменение архитектуры? Запись никогда не будет происходить на клиенте, и тебе всё равно нужно будет получить тексты сообщений, тем или иным образом, в форме элемента и именно после записи
#22 by dezss
Как это что изменит? Если осуществлять свои проверки именно в модуле формы перед записью, а не в подписке, возвращать туда результаты и в зависимости от них выводить сообщения, то проблемы у ТС и не будет.
#23 by Dzenn
перенос функциональности из подписки в модуль формы ПередЗаписью никак не изменит способ получения сообщений на клиенте после записи. Тебе всё равно придётся использовать адрес во временном хранилище, который ты инициализируешь перед записью. Тебе всё равно придётся получать данные из этого адреса опосредованно, из обработчика ожидания.
#24 by dezss
Зачем после записи, ведь перед? Да и какой в этом смысл, ведь после записи мы не можем отменить запись, а это ведь нужно в задаче ТС. Да и временное хранилище не обязательно. Добавить отдельный реквизит формы для этих сообщений и заполнять его.
#25 by Sargez
вопрос все-таки остается все равно. как в сообщении в всплывающем окне промаркировать? всплывающие окна в виде показатьоповещениюпользователю не подходят заказчику. даже если я все сообщения получу на клиенте - то как промаркировать? те сделать красный восклицательный знак или синию букву "i"
#26 by dezss
Почему не подходят? Группировать сообщения по критичности и их будет всего 2. Одно с красным восклицательным знаков, второе с синей i. Если не успели невести курсор и прочитать, есть история. В конце концов, если вообще никак не подходят, то нарисуй свою форму с выводам сообщения.
#27 by Dzenn
как и в какой момент ты будешь заполнять предлагаемый тобой отдельный реквизит формы? Попробуй на пустом конфигураторе реализовать предлагаемое тобой, и тогда может быть поймёшь суть вопроса автора топика.
#28 by dezss
Это я на твое сообщение о том, как передавать из ПередЗаписью в ПослеЗаписи в модуле формы.
#29 by Dzenn
Всё равно попробуй реализовать сказанное тобой.
#30 by dezss
Ща, сохраню конфу и попробую. Пройдусь отладчиком.
#31 by Dzenn
ну так в подписке собирай сообщения не в строковый реквизит, а например в такой объект:
#32 by dezss
Он не про то, как получить разделить ошибки, а про то, как именно показать знаки. Всплывающих вроде только 2. СообщениеПользователю и ПоказатьОповещениеПользователя. Больше никаких всплывающих я не знаю.
#33 by Dzenn
я в написал — нужно создать свою форму вывода. В форме вывода может использоваться что угодно — хоть ФорматированныйТекст, хоть ПолеHTML, хоть ТабличныйДокумент, хоть ещё что-то — как душе угодно.
#34 by dezss
попробовал. Вот результат, именно этого я и ожидал: ПриОткрытии ПередЗаписью ПослеЗаписи
#35 by Dzenn
Первое — событие "ПослеЗаписи" при отказе от записи не отработает Второе — ПередЗаписью в твоём случае отрабатывает на клиенте
#36 by dezss
Естественно не отработает. Это только был ответ на твой вопрос, как передавать. Да, на клиенте. И что мешает использовать это событие и именно в нем проводить свои проверки?
#37 by dezss
Вот жеж...Моего оппонента забанили.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С