|
Как в УФ перед записью вызвать вопрос? | ☑ | ||
---|---|---|---|---|
0
Хосе
10.08.15
✎
11:30
|
Т.е. нужно перед записью проверить соответствие реквизитов определенной схеме и задать вопрос. Если пользователь подтвердит, то записать, если не подтвердит - то прервать запись.
Как это сделать в новой парадигме модальности? Блокировать интерфейс не получится, имхо. |
|||
1
butterbean
10.08.15
✎
11:33
|
ПоказатьВопрос()
|
|||
2
Fragster
гуру
10.08.15
✎
11:42
|
(1) тут возникает косяк со стандартной кнопкой "записать и закрыть"
|
|||
3
Хосе
10.08.15
✎
11:44
|
(1) (2) Но как модально обработать? Т.е. я делаю возврат из ПередЗаписью и блокирую интерфейс.
Потом, когда я словлю результат вопроса, куда мне передать управление? |
|||
4
Новиков
10.08.15
✎
11:57
|
Делаешь свою переменную в форме. В обр. ПередЗакрытием (как пример) проверяешь ее на неопределено. Если да, тогда можешь проверить модифицированность или что-то еще, почему ты поймешь, что нужно что-то спросить. Понял и если да, то Отказ = Истина, и уходишь в свое оповещение, где делаешь свои дела, и в конце процедуры оповещения свою переменную устанавливаешь во что-то (что тебе надо) и принудительно закрываешь форму через Закрыть(), что спровоцирует еще один вызов перед закрытием, ты уже на неопределено не выйдешь, вопрос не спросишь и уйдешь стандартно.
|
|||
5
Хосе
10.08.15
✎
12:10
|
(4) а если пользователь нажмет не закрыть, а записать? есть же событие ПередЗаписью, на это заточенное как раз.
|
|||
6
Хосе
10.08.15
✎
12:11
|
или нужно в обработчике вызывать заново метод Записать, но уже не дергать свое событие, если ответ получен?
|
|||
7
Новиков
10.08.15
✎
12:12
|
(5) я привел в скобках "(как пример)". Используй обработчик тот, который больше подходит. В моем примере, как спросить что-то перед закрытием.
|
|||
8
Хосе
10.08.15
✎
12:13
|
(7) немного не понятно. Я хочу словить событие перед записью, т.е. оно может быть связано и с закрытием формы и с нажатием записать, точка входа в него одна - ПередЗаписью.
|
|||
9
UFO
10.08.15
✎
12:13
|
Есть обработчик формы у клиента передзапись, там выдаешь вопрос модальный, если нет то отказ в истину и всё
|
|||
10
UFO
10.08.15
✎
12:13
|
роцедура ПередЗаписью(Отказ, ПараметрыЗаписи)
|
|||
11
Новиков
10.08.15
✎
12:15
|
=) Я тебе рекомендую, если навскидку сразу не понятно, где нужно что проверять, точками проставить - и проследить последовательность вызова тех или иных обработчиков событий в форме. Или в библии есть наглядный пример. В (9) кажется то, что тебе нужно, если я все сейчас правильно понял.
|
|||
12
Хосе
10.08.15
✎
12:23
|
(9) нельзя модальный.
(11) не знаю, не знаю. пока не могу понять логику. Как в этом случае использовать немодальный ПоказатьВопрос. |
|||
13
UFO
10.08.15
✎
12:25
|
Вопрос не может быть не модальным! Потому как вопрос подразумевает реакцию пользователя, а не его игнорирование
|
|||
14
UFO
10.08.15
✎
12:26
|
Если он не модальный, то он автоматом становится не вопросом, а просто сообщением
|
|||
15
UFO
10.08.15
✎
12:27
|
ПРограмма должна как то реагировать на ответ пользователя, и как она будет реагировать, если ответа нет?
|
|||
16
UFO
10.08.15
✎
12:28
|
Так записывать или нет?
|
|||
17
UFO
10.08.15
✎
12:28
|
Так что мозги не себе не другим не парь а ставь модальный вопрос и всё
|
|||
18
ЧеловекДуши
10.08.15
✎
12:30
|
(3) Странный вопрос, куда передать :)
1. Ты находишь ошибки 2. Задаешь вопрос, и пользователь принимает решение. 3. Если пользователь не принял решение, или у тебя жестко "Только без ошибок". То пишешь Отказ = Истина в процедуре "ПередЗаписью", которая должна размещаться в форме записываемого "Объета". 4. ... а сам как думаешь, что дальше?... |
|||
19
UFO
10.08.15
✎
12:32
|
(18) Не.. можно конечно принять человека на работу, который будет определять, записывать это или нет... :) Тогда никаких модальных вопросов, а ему очередь данных, где надо принять решение: записать или нет
|
|||
20
Stepa86
10.08.15
✎
12:35
|
&НаКлиенте
Перем ОтветПередЗакрытием; &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) Если ОтветПередЗакрытием <> Истина Тогда Отказ = Истина; Оповещение = Новый ОписаниеОповещения( "ПередЗакрытиемЗавершение", ЭтотОбъект); ПоказатьВопрос(Оповещение, “Закрыть?”, РежимДиалогаВопрос.ДаНет); КонецЕсли КонецПроцедуры &НаКлиенте Процедура ПередЗакрытиемЗавершение(Результат, Параметры) Экспорт Если Результат = КодВозвратаДиалога.Да Тогда ОтветПередЗакрытием = Истина; Закрыть(); КонецЕсли; КонецПроцедуры http://its.1c.ru/db/metod8dev/content/5272/hdoc |
|||
21
Новиков
10.08.15
✎
12:35
|
(12) у тебя кажется представление о модальности/немодальности слегка замылилось. Ты сначала просто посмотри, как работают для пользователя немодальные вызовы.
|
|||
22
UFO
10.08.15
✎
12:36
|
(20) Степа, у него был вопрос, чтобы не сохранять, а ты уже закрытие показываешь
|
|||
23
alexei366
10.08.15
✎
12:44
|
(22) Ну так пусть сам автор поменяет степин код с "Закрытие" на "Запись" и метод "Закрыть" на "Записать", и все
|
|||
24
UFO
10.08.15
✎
12:47
|
(23) Вся беда в том что нужно реагирование пользователя на сохраняемые данные, в зависимости от данных и решение принимается сохранять или нет, а в таком диалоге без модальности как быть?
|
|||
25
UFO
10.08.15
✎
12:51
|
Если проигнорировать, то данные сохранятся с ошибками
|
|||
26
Fragster
гуру
10.08.15
✎
13:07
|
(24)(25) с точки зрения пользователя - модальный, с точки зрения 1с - не модальный. вообще этот отказ от модальности принес кучу проблем для разработчиков. Та, которую в общем случае не обойти - в (2)
|
|||
27
Fragster
гуру
10.08.15
✎
13:08
|
а вообще - почитай http://v8.1c.ru/o7/201301nm/
|
|||
28
UFO
10.08.15
✎
14:02
|
(27) опять ты куралесишь...
Пользователь нажал Записать и закрыть, значит надо прервать процесс записи и спросить у пользователя, как без модальности? |
|||
29
UFO
10.08.15
✎
14:03
|
а 27 ничего толкого-го не нашел
|
|||
30
UFO
10.08.15
✎
14:04
|
Одно дело в процессе ввода инфы спросить без модальности и другое в таких ситуациях, когда изменения отменить будет нельзя
|
|||
31
UFO
10.08.15
✎
14:07
|
Ещё в 90-х писал на VC++ многопоточные приложения, и прекрасно помню принцип модальности и для чего он нужен. И сейчас он другим не стал. Просто у вас еще подход идет от 7.7
|
|||
32
DmitrO
10.08.15
✎
14:15
|
(28) :)
Так в том то и дело, что "модально" - это не "прервать", это остановить, спросить, а потом продолжить. И это не (27) куралесит, а 1С. Для 1Сников же милое дело было спросить что нибудь у пользователя во время транзакции, а потом визжать что 1С тормозная система. Вот 1С отучает мало по малу. :) |
|||
33
UFO
10.08.15
✎
14:18
|
(32) Хорошо, чем плох Вопрос?
|
|||
34
UFO
10.08.15
✎
14:19
|
Что он там прерывает?
|
|||
35
DmitrO
10.08.15
✎
14:21
|
(33)тем что во время ответа на вопрос, пользователь может уйти поссать, а его там арестуют за не уплату налогов, а у нас транзакция в базе идет, событие ПриЗаписи уже в транзакции срабатывает.
|
|||
36
UFO
10.08.15
✎
14:22
|
(35) Ну и в 27 тоже выполнение останавливается( ваша транзакция, пока он ссыт)
|
|||
37
UFO
10.08.15
✎
14:22
|
Тоже налогавая арестует
|
|||
38
UFO
10.08.15
✎
14:23
|
Просто механизм вывода окна другой, но смысл тот же
|
|||
39
DmitrO
10.08.15
✎
14:24
|
(36)в (27) именно прервыение, она откатывается, и блокировки снимаются, пока он ходит ничего не заблокировано.
|
|||
40
UFO
10.08.15
✎
14:24
|
Всё в 27 сделано для веб клиента, чтобы веб клиенты работали и браузеры не висли
|
|||
41
DmitrO
10.08.15
✎
14:24
|
*прерывание
|
|||
42
UFO
10.08.15
✎
14:25
|
Ха ха.. какое же это сохранение, если все откатывается и ничего не сохраняется, хе хе
|
|||
43
UFO
10.08.15
✎
14:26
|
ПередЗаписью это тоже еще не сохранение
Это только подготовка данных к сохранению |
|||
44
DmitrO
10.08.15
✎
14:26
|
а я и не говорю что так делать правильно - правильно это спросить все еще до записи.
|
|||
45
UFO
10.08.15
✎
14:28
|
И никаких блокировок. Ну вылезет вопрос, спросит ( а он ссать ушел), дык по таймауту просто отмена закрытия пройдёт и никаких блокировок
|
|||
46
DmitrO
10.08.15
✎
14:30
|
(45) таймаут, несколько минут? ну тут мне нечего сказать :)
автору виднее, проблему я обозначил ) |
|||
47
Хосе
11.08.15
✎
14:03
|
(20) а почему перед закрытием? ведь можно нажать кнопку записать.
(19) (18) в режиме совместимости с немодальностью нельзя использовать модальные замораживания кода. (23) Нет события ПередЗаписьюЗавершение, нельзя выполнять код ПередЗаписьюНаСервере, пока не получен ответ от пользователя. пока ответа тут не увидел. Но кажется что нужно передзаписью: 1. Задавать вопрос 2. делать отказ 3. В обработчике вызывать Записать с параметром, который указывает, что контролировать не надо. Имхо, так. |
|||
48
Fragster
гуру
11.08.15
✎
15:55
|
(47) см. (2)
|
|||
49
Хосе
12.08.15
✎
16:04
|
(48) какой косяк? При нажатии стандарной кнопки тоже будет вызываться ПередЗаписью и если я там откажусь, то запись не пройдет.
|
|||
50
Fragster
гуру
12.08.15
✎
19:31
|
(49) никак не отличить нажатие на стандартные кнопки "записать и закрыть" и "записать". Соответственно, если в ответ на вопрос таки должна произойти запись, то ты не сможешь определить, нужно ли после нее закрывать форму.
|
|||
51
hhhh
12.08.15
✎
20:08
|
(50) эта проблеиа в УТ11. Когда делаешь чек ККМ и нажимаешь на крестик закрыть базу, она сначала спрашивает "завершить работу?", отвечаем "ок", потом спрашивает "Есть непробитый чек, отменить чек?", говорим "отменить". И о чудо: программа не закрывается, база остается открытой, приходится второй раз завершать.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |