Имя: Пароль:
1C
 
Сообщение.Сообщить() при "Провести и закрыть"
, , ,
0 dimaldinho
 
20.07.16
14:58
При проведении документа нужно кое-что сообщить пользователю.

Пишем ОбщегоНазначенияКлиентСервер.СообщитьПользователю("кое-что").

Если нажимаем Провести, сообщение сообщается. Если Провести и закрыть - не сообщается.

Как сообщить сообщение пользователю, чтобы оно было видимо даже при Провести и закрыть?
1 lubitelxml
 
20.07.16
15:01
а чем тебе стандартное Сообщить() не нравиться?
2 dimaldinho
 
20.07.16
15:03
(1) оно ведет себя аналогично

Кстати: сообщение выводится из модуля набора записей некого регистра, т.е. проводиться могут документы разных видов. Это к вопросу про решение, описанное в (15)

v8: Можно-ли в УФ, вывести сообщение пользователю, во время проведения?
3 Nuobu
 
20.07.16
15:05
(2) Можно вывести, но только нужно найти другую форму.
Оно выводится на той же форме, которую вы закрываете.
нужно найти другую форму, активировать её, вывести сообщение, и закрыть Вашу форму.
4 dimaldinho
 
20.07.16
15:09
(3) "сообщение выводится из модуля набора записей некого регистра"

Как найти форму, когда мы на сервере в модуле набора записей?
5 Defender aka LINN
 
20.07.16
15:09
(0) "При проведении документа нужно кое-что сообщить пользователю"
Пользователю нужно что-то сообщить, если документ не провелся. В остальных случаях этого не нужно.
6 dimaldinho
 
20.07.16
15:09
(5) Вы SAP до этого внедряли? :)
7 Defender aka LINN
 
20.07.16
15:12
(6) Нет, 1С.
Простой вопрос: перепроводим 100500 документов регламентным заданием. Кто прочитает это все?
8 dimaldinho
 
20.07.16
15:13
(7) Никто не прочитает. Заказчика это устраивает.
9 dimaldinho
 
20.07.16
15:18
Поясню задачу: в результате заведения новых документов система может переходить в состояние не совсем правильное. Что такое правильное, а что такое неправильное - заказчик не хочет формализовать. Он говорит: "Давай если возникает такая предпосылка, ты мне выводишь сообщение, а я человеческим интеллектом, без формализации, буду думать, ОК тут все или не ОК".

Проблема заказчика решается за 5 минут. В некоем модуле набора записей пишем

Если А=Б Тогда
Сообщить("Проверь, все ли тебе нравится");
КонецЕсли

Но тут попадаем на технологическую проблемку с Сообщить()
10 Nuobu
 
20.07.16
15:19
(9) ПоказатьОповещениеПользователю
11 Nuobu
 
20.07.16
15:20
Хотя, возможно, не взлетит.
12 Defender aka LINN
 
20.07.16
15:20
(8) Если никто не прочитает и устраивает - то инфа не мегаважная, значит можно и вообще не сообщать. Логика!
13 Fragster
 
гуру
20.07.16
15:21
(0) оно сообщается, только в закрываемом окне
14 Defender aka LINN
 
20.07.16
15:21
(9) А для этого есть отчеты. А в типовых можно еще и авторассылку настроить
15 dimaldinho
 
20.07.16
15:26
(14) >> А для этого есть отчеты. А в типовых можно еще и авторассылку настроить

Представь, ты в машине хочешь индикатор непристегнутого ремня. Ты готов заплатить за один светодиод-индикатор. А тебе говорят: "Для этого есть телефон сервис-инженера, звоните ему, он сообщит, все ли у вас пристенгуты. А можно еще настроить рассылку уведомлений о ремне по адресу прописки".
16 Jokero
 
20.07.16
15:29
Надо перед записью проверять такую ситуацию и тогда предупреждать пользователя.
17 dimaldinho
 
20.07.16
15:30
(10)ПоказатьОповещениеПользователю

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

Тонкий клиент, веб-клиент, толстый клиент.
18 Jokero
 
20.07.16
15:30
(15) Аналогично, индикатор ремня в машине должен загореться не в момент влетания в камаз, а перед тем как машина поехала.
19 Nuobu
 
20.07.16
15:32
(17) Вот поэтому и подумал, что не взлетит. Давно им пользовался в последний раз.

Пиши в задачу для пользователя. Пиши в ЖР.
20 dimaldinho
 
20.07.16
15:33
(16) Проверить такую ситуацию - продублировать все расчеты, которые выполняются до нужного места в модуле набора записей?

Если ХитроРасчитаннаяПоСтаМодулямШтука = ДругаяХитроРасчитаннаяПоСтаМодулямШтука Тогда
   Сообщить("Проверь, все ли тебе нравится");
КонецЕсли

(19) Сейчас попробую с задачей.
21 Nuobu
 
20.07.16
15:35
(20) Тем более, что можно все хитроРассчитанныеПоСтаМодулямШтуки передавать параметрами.
22 dimaldinho
 
20.07.16
15:37
(21) Сто модулей делать нетиповыми ради одного сообщения
23 lubitelxml
 
20.07.16
15:42
Можно запихнуть все ссылки на объекты по которым нужно комментирование в РС, и потом показать в своей форме
24 Поросенок Петр
 
20.07.16
15:43
Сообщение обязательно должно быть позитивным. Например: "Здравствуйте! Я робот. Я провел документ. Я молодец".

А то маловато наркотиков.
25 xxTANATORxx
 
20.07.16
15:47
(0)варианты:
1.пишешь в регистр, по окончанию проведения читаешь регистр, сообщаешь пользователю
2.создаешь задачу
3.как-то можно извернуться с фоновым заданием
26 Pentosh
 
20.07.16
16:00
(0)
В таб док выводи, и показывай его.
27 Nuobu
 
20.07.16
16:01
(26) А потом беги в серверную и смотри.
28 Jokero
 
20.07.16
16:02
а если переопределить стандартную команду "провести и закрыть" и если чет не так, то сообщать и не закрывать, а если все ок, то со спокойной душой "application.terminate"
29 Cyberhawk
 
20.07.16
16:06
В новости или в задачи писать инфу
30 Nuobu
 
20.07.16
16:06
(29) А есть в БСП "Новости"?
31 Pentosh
 
20.07.16
16:10
(27) зачем? не понял немного

Я в процедуре "ПослеЗаписи" выдаю ТабДок, и он весит спокойно.
32 vicof
 
20.07.16
16:12
(31) У тебя толстый клиент
33 Pentosh
 
20.07.16
16:14
(32) да нет, на тонкий клиент табдок тоже выводит.
34 vicof
 
20.07.16
16:19
(33) этого не может быть, промежуток должен быть
35 Fragster
 
гуру
20.07.16
16:24
ПослеЗаписи - это в форме. вопрос в том, что документ может проводиться еще и из списка, и при восстановлении последовательности или ещё как
36 dimaldinho
 
20.07.16
16:27
* вопрос в том, что видов документов много. и в каждый совать доработку ПослеЗаписи не комильфо

* Мы на сервере, ТабДок.Показать() там недоступно
37 GANR
 
20.07.16
17:04
(0) ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , , Отказ); сообщение появится, но тогда документ не проведется.
38 romix
 
20.07.16
17:11
(0) Я делаю так. Можно выводить в текстовый лог при помощи FileSystemObject (он не блокирует для чтения и можно непрерывно смотреть ленту FAR-ом по F3 по мере проведения документов).


///////////////////////////////////////////////////////////////////////
Процедура Сообщить2(прм_стр, прм_ИмяФайла) Экспорт
    fso=Новый COMОбъект("Scripting.FileSystemObject");
    Если Не fso.FileExists(прм_ИмяФайла) Тогда
        file=fso.CreateTextFile(прм_ИмяФайла, -1, 0); //создать файл, перезаписывая существующий.
        file.WriteLine(прм_стр);
        file.Close();
    Иначе
        file=fso.OpenTextFile(прм_ИмяФайла, 8, 0); //дополнить файл
        file.WriteLine(прм_стр);
        file.Close();
    КонецЕсли;
КонецПроцедуры
39 bolobol
 
20.07.16
17:37
ПодключитьОбработчикОжидания в МодульУправляемогоПриложения
40 FIXXXL
 
20.07.16
18:01
(0) а если проверки вынести в ПередЗаписью объекта с проверкой режимЗаписи=проведение?
тогда словив отказ форма не должна закрыться
41 etc
 
20.07.16
18:31
(38) Не хватает еще предложить ВК в трее повесить. Пусть хранит и выводит журнал сообщений.
42 etc
 
20.07.16
18:32
(0) концепция от обычного приложения не подходит к упр. приложению. Нет независимого окна "Сообщения пользователю".
43 jk3
 
21.07.16
10:43
(0) Есть способ вывода подобного сообщения:

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    ПараметрыСеанса.СообщениеИзОбработкиПроведенияДокумента = "Сообщение для человеческого интеллекта)";
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытии()
    ПриЗакрытииНаСервере();
КонецПроцедуры

&НаСервере
Процедура ПриЗакрытииНаСервере()
    Сообщить(ПараметрыСеанса.СообщениеИзОбработкиПроведенияДокумента);
КонецПроцедуры

Единственное, это способ не подходит для веб-клиента, т.к. цитата из документации:

Поддержка веб-клиента

Следует принять ряд мер для обеспечения нового подхода при закрытии управляемых форм и приложения: в обработчиках событий управляемого приложения ПередЗавершениемРаботыСистемы,ПриЗавершенииРаботыСистемы, а также в обработчиках событий управляемой формы, находящейся в режиме закрытия, ПередЗакрытием, ПриЗакрытии, запрещено открывать окна и выполнять любые серверные вызовы.

В противном случае при закрытии приложения возникнет ошибка "Серверные вызовы при завершении работы запрещены".
44 dimaldinho
 
21.07.16
12:20
(43) хороший вариант. только в каждый документ добавлять придется
45 VladZ
 
21.07.16
12:22
(41) ВК - это слишком. А вот решение в (38) очень даже актуально. Бывают задачи, где нужно вести логи событий. Актуальность этой информации - несколько дней, неделя максимум. Писать в журнал сообщений - это, конечно, вариант. Но со временем журнал превращается в помойку. И нет смысла всю эту помойку хранить. Вводить новые объекты (свой регистр или свой справочник) - тоже не вариант. Ибо опять возвращаемся к вопросу "хранения помойки". В случае с файловым логом все просто: когда файлы не нужны - просто их грохаем и все. База данных за счет логов не растет.
46 Cyberhawk
 
21.07.16
12:31
(30) Нет, "Новости" - это функциональность не БСП, а БИП: https://its.1c.ru/db/uisldoc#content:77:hdoc
2 + 2 = 3.9999999999999999999999999999999...