|
8.3 УФ Перехват события автоподбор в поле ввода | ☑ | ||
---|---|---|---|---|
0
Марусенька
27.11.14
✎
16:55
|
Добрый день!
Мне нужно переписать модальные окна при использовании Вопрос() под УФ. Попробовала написать так. Окно открывается при нажатии кнопки выпадающего списка, но тем не менее позволяет произвести выбор значения и только потом блокируется. Что я делаю не так? Пробовала использовать НачалоВыбораИЗСписка - не помогло. Спасибо. &НаКлиенте Процедура ПодразделениеОрганизацииАвтоПодбор(Элемент, Текст, ДанныеВыбора, Параметры, Ожидание, СтандартнаяОбработка) если ЗначениеЗаполнено(ДоговорАренды) тогда СтандартнаяОбработка = Ложь; Ответ = Неопределено; ПоказатьВопрос(Новый ОписаниеОповещения("ПодразделениеОрганизацииПриИзмененииЗавершение", ЭтотОбъект), "Поле 'Договор аренды' будет очищено. Продолжить?", режимдиалогавопрос.ОКОтмена,0); конецесли; КонецПроцедуры &НаКлиенте Процедура ПодразделениеОрганизацииПриИзмененииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт Ответ=РезультатВопроса; если Ответ = КодВозвратаДиалога.Да Тогда ОчиститьОСДоговорАренды(); Объект.Комментарий=""; иначе возврат; конецесли; КонецПроцедуры |
|||
1
Марусенька
27.11.14
✎
21:07
|
апну, вдруг кто сталкивался с подобной проблемой.
|
|||
2
vicof
27.11.14
✎
21:34
|
эмм...а автор знает, что такое модальные окна?
|
|||
3
Coldboy
27.11.14
✎
22:35
|
(0) а можно скриншот, какой именно кнопки вы хотите перехватить событие ?
|
|||
4
Franchiser
гуру
28.11.14
✎
01:23
|
попробуй другое событие...
|
|||
5
cw014
28.11.14
✎
07:16
|
Используй событие не "АвтоПодборТекста" а "НачалоВыбора" (или "НачалоВыбораИзСписка")
|
|||
6
Марусенька
28.11.14
✎
08:34
|
(2) я в курсе, что такое модальные окна в обычном приложении, на УФ они работают несколько иначе и на УФ я с ними не работала еще. Потому и вопрос возник.
(3) Вот ссылка http://images.vfl.ru/ii/1417151284/10f31c2b/7072854.png Окно блокируется,но позволяет при этом выбрать значение в поле ввода перед блокировкой. (5) это событие тоже не дает нужного эффекта, пробовала |
|||
7
Марусенька
28.11.14
✎
09:15
|
ап
|
|||
8
olegves
28.11.14
✎
09:48
|
(0) а не проще рулить доступностью этого поля при изменении ДоговорАренды?
|
|||
9
olegves
28.11.14
✎
09:57
|
+ (8) вопрос надо задавать в обработке Приизменении, и в случае отмены восстанавливать предыдущее значение (для его хранения надо создать реквизит формы и заполнять его при создании на сервере и приизменении)
|
|||
10
Марусенька
28.11.14
✎
10:00
|
(8) я думала о том, чтоб управлять видимостью, но во-первых, тогда мне придется ввести новые объекты на форму, типа переключателя для режима выбора заполнения ТЧ, и я хотела по минимуму изменять типовую конфу, а во-вторых, надо же разобраться как это делается. Попробую поискать в типовых конфах пример, как отловить нажатие кнопки автоподбора все же. Вообще, считаю, что уход от модальности это очень фу, но что поделать - такова селява.
|
|||
11
Марусенька
28.11.14
✎
10:02
|
(9) у меня работало ПриИзменении в БП 2.0, все хорошо было, но в _типовой_ БП 3.0 этой кнопки нет, я, конечно, могу ее вынести, но все же - хочу разобраться как работать с автоподбором. Ибо ситуация не единственная.
|
|||
12
RomaH
naïve
28.11.14
✎
10:36
|
(11) это не кнопка,а событие
(9) слишком категоричное заявление предположим, что выбор значения у пользователя занимает продолжительное время, - вот он пять минут думал, варианты прикидывал - наконец выбрал, а тут, бац, вторая смена |
|||
13
Марусенька
28.11.14
✎
10:51
|
(12) имелась ввиду кнопка, которая это событие вызывает. Меня интересует, как перехватить событие при нажатии кнопки выпадающего списка. Событие Автоподбор его перехватывает, но позволяет сделать выбор до того, как окно блокирует доступ к этому полю ввода.
|
|||
14
ВРедная
28.11.14
✎
10:56
|
(13) Смысл отказа от модальности в том, что у тебя не блокируется поле ввода.
Если до решения пользователя не нужно производить выбор из списка - пиши "СтандартнаяОбработка = ложь", а выбор после того, как пользователь решится реализуй отдельно |
|||
15
Марусенька
28.11.14
✎
11:10
|
(14) Мне как раз нужно модальность сымитировать. В момент нажатия на кнопку выпадающего списка нужно или подтвердить действие выбора (и тогда позволить заполнить поле ввода), или отказаться от него, не меняя поле ввода.
Стандартная обработка = Ложь где ты предлагаешь написать? |
|||
16
Aleksandr N
28.11.14
✎
11:28
|
(15) Тогда вам нужно в параметрах обработки оповещения передать еще и предыдущее значение подразделения, и если пользователь отказывается его менять, то присваивать его обратно.
|
|||
17
Aleksandr N
28.11.14
✎
11:29
|
(16) + и да, кстати вот это не нужно:
иначе возврат; |
|||
18
Марусенька
28.11.14
✎
11:37
|
(16) согласна, можно, а нельзя никак вообще не менять значение поля ввода и к черту все блокировать сразу, чтобы список не выпадал в принципе?
|
|||
19
Aleksandr N
28.11.14
✎
11:49
|
(18) Не совсем понятно, что нужно получить в итоге.
|
|||
20
Aleksandr N
28.11.14
✎
11:50
|
Можно, конечно, в событии авто подбора написать что-то типа:
ДанныеВыбора = Новый СписокЗначений; Но тогда вообще становится ничего не понятно) |
|||
21
Марусенька
28.11.14
✎
11:53
|
(20) нужно в итоге -> (15) Так, как работало событие НачалоВыбора при нажатии кнопки [...] в БП 2.0.
|
|||
22
Aleksandr N
28.11.14
✎
11:55
|
(21) Может, стоит воспользоваться обработчиком "ОбработкаВыбора"?
|
|||
23
Марусенька
28.11.14
✎
11:56
|
(22) Событие ОбработкаВыбора вызывается, когда значение уже выбрано, не подойдет.
|
|||
24
Марусенька
28.11.14
✎
11:56
|
(22) а я бы зотела, чтобы значение в поле ввода не менялось, пока пользователь не скажет "Да"
|
|||
25
Марусенька
28.11.14
✎
11:57
|
*хотела
|
|||
26
Aleksandr N
28.11.14
✎
11:58
|
(23) В ОбработкеВыбора как раз значение выбрано, но еще не применилось. Поэтому в этом обработчике предыдущее значение еще доступно через ТекущийЭлемент.ТекущиеДанные.НужныйРеквизит
|
|||
27
Aleksandr N
28.11.14
✎
11:58
|
(26) + его можно передать в качестве параметра в обработку оповещения.
|
|||
28
Aleksandr N
28.11.14
✎
12:02
|
Короче, я делал так:
&НаКлиенте Процедура УслугиПодразделениеЗатратОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) Если ТипЗнч(ВыбранноеЗначение) = Тип("СправочникСсылка.ПодразделенияОрганизаций") Тогда Если ПодразделениеЗакрыто(ВыбранноеЗначение) Тогда ТекущееПодразделение = ТекущийЭлемент.ТекущиеДанные.ПодразделениеЗатрат; ТекущиеДанные = ТекущийЭлемент.ТекущиеДанные; Режим = РежимДиалогаВопрос.ОКОтмена; Текст = "ru = ""Выбранное подразделение закрыто. Продолжить?"""; ПоказатьВопрос(Новый ОписаниеОповещения("УслугиПодразделениеЗатратОбработкаВыбораЗавершение", ЭтотОбъект, Новый Структура("ТекущееПодразделение, ТекущиеДанные", ТекущееПодразделение, ТекущиеДанные)), НСтр(Текст), Режим, 0); КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура УслугиПодразделениеЗатратОбработкаВыбораЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт ТекущееПодразделение = ДополнительныеПараметры.ТекущееПодразделение; ТекущиеДанные = ДополнительныеПараметры.ТекущиеДанные; Ответ = РезультатВопроса; Если Ответ = КодВозвратаДиалога.Отмена Тогда ТекущиеДанные.ПодразделениеЗатрат = ТекущееПодразделение; КонецЕсли; КонецПроцедуры |
|||
29
olegves
28.11.14
✎
12:07
|
(22) а что тогда ей делать в событиях:
ОкончаниеВводаТекста и ПриВводеСтроки ? |
|||
30
Aleksandr N
28.11.14
✎
12:11
|
(29) Хм, думаю, ничего.
|
|||
31
Марусенька
28.11.14
✎
12:17
|
(26) вопрос в том, что я вообще хочу лишить пользователя возможности что-то выбирать, а не возвращать на место первоначальное значение в случае отказа от выбора (это уже просто способ обхода данной проблемы). Мне нужно, чтобы список вообще не выпадал (в идеале) или выпадал, но блокировался, это возможно? Пользователи бывают, как маленькие дети, нужно просто запретить в принципе действие, во избежание лишних вопросов и манипуляций, шаг влево-вправо - расстрел. Нельзя выбирать, значит и списка быть не должно вообще. Разве не так?
|
|||
32
Марусенька
28.11.14
✎
12:18
|
(28) посмотрю, спасибо.
|
|||
33
Марусенька
28.11.14
✎
12:22
|
(28) в вашем случае имеет значение, какое именно подразделение выбрано, имеет смысл обработка выбора. А у меня изначально известно, что ничего корректировать нельзя и не надо.
|
|||
34
Aleksandr N
28.11.14
✎
12:24
|
(33) Тогда
СтандвртнаяОбработка = Ложь |
|||
35
Aleksandr N
28.11.14
✎
12:24
|
*Стандартная
|
|||
36
Марусенька
28.11.14
✎
12:27
|
(34) я как раз и использую СтандартнаяОбработка = Ложь (или не там написала?), но блокировка срабатывает только после того, как пользователь что-то выбрал. Я как раз и писала об этом в самом начале.
|
|||
37
Aleksandr N
28.11.14
✎
12:32
|
(36) В каких обработчиках используете?
|
|||
38
Марусенька
28.11.14
✎
12:37
|
(37)
&НаКлиенте Процедура ПодразделениеОрганизацииАвтоПодбор(Элемент, Текст, ДанныеВыбора, Параметры, Ожидание, СтандартнаяОбработка) если ЗначениеЗаполнено(ДоговорАренды) тогда СтандартнаяОбработка = Ложь; // вот здесь использую Ответ = Неопределено; ПоказатьВопрос(Новый ОписаниеОповещения("ПодразделениеОрганизацииПриИзмененииЗавершение", ЭтотОбъект), "Поле 'Договор аренды' будет очищено. Продолжить?", режимдиалогавопрос.ОКОтмена,0); конецесли; КонецПроцедуры |
|||
39
Aleksandr N
28.11.14
✎
12:37
|
(36) Попробуйте в свойстве поля ИсторияВыбораПриВводе поставить НеИспользовать
|
|||
40
Aleksandr N
28.11.14
✎
12:38
|
(39) + в св-ве поля подразделение в смысле
|
|||
41
Марусенька
28.11.14
✎
12:43
|
(39) но в тех случаях, когда пользователь вправе ввести значение - менять это свойство? попробую, но тоже залипуха по-моему)
Вообще конечно странно. Ну если вызывается окно с вопросом, то почему оно блокируется только после окончания выбора, вот что я не могу понять, это же не логично - блокировать действие после выбора. |
|||
42
Aleksandr N
28.11.14
✎
12:47
|
(41) Не хочу долго объяснять, просто кину ссылку - там все очень подробно расписано
http://its.1c.ru/docs/v8nonmodal/ |
|||
43
Aleksandr N
28.11.14
✎
12:48
|
(41) Потому что блокирующее окно не останавливает действия, происходящее на форме в отличие от модального.
|
|||
44
Марусенька
28.11.14
✎
12:59
|
(42) Я читала эту статью, правда не до конца.
(43) Вот о том и речь. И никак не сделать, чтоб блокировалось, получается. Только в обход идти. Ненавижу 1С. |
|||
45
Марусенька
28.11.14
✎
13:00
|
(43) а окно блокируется, только не сразу.
|
|||
46
Aleksandr N
28.11.14
✎
13:11
|
(44) А я люблю. Наверно, я мазохист)))
|
|||
47
olegves
28.11.14
✎
13:24
|
(29) а зря, Обработка выбора в этих случаях не срабатывает
|
|||
48
Марусенька
28.11.14
✎
13:36
|
(46) Что люблю, то и ненавижу. А модальные окна это очень важная часть функционала, была.. как можно было от них отказаться! И плевать я хотела на Веб-клиент. Меня и в тонком клиенте неплохо кормят, оставили бы в тонком и толстом клиенте все как раньше.
Хуже всего что извращаться чаще всего приходится именно с какими-то мелкими вещами, типа вот этой. |
|||
49
Aleksandr N
28.11.14
✎
13:38
|
(48) Так в свойствах конфигурации можно просто поставить нужный режим использования модальных окон и ничего не переписывать
|
|||
50
Марусенька
28.11.14
✎
13:39
|
(48) не хочу. Принцип нашей работы - уход от типовой по минимуму.
|
|||
51
Марусенька
28.11.14
✎
13:39
|
(50)->(49)
|
|||
52
Марусенька
28.11.14
✎
13:40
|
(49) хотя... может быть это будет проще, чем менять кучу обработчиков
|
|||
53
olegves
28.11.14
✎
13:41
|
(50) странно, более месяца на форуме, а фотки до сих пор нет
|
|||
54
Aleksandr N
28.11.14
✎
13:41
|
(52) Я именно это и имел в виду
|
|||
55
Aleksandr N
28.11.14
✎
13:42
|
(53) Кстати, да. Гиде?
|
|||
56
Марусенька
28.11.14
✎
13:43
|
(55) а нету)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |