|
Какой аналог "Форма.ВыполнитьВыбор()" из 7.7 ? | ☑ | ||
---|---|---|---|---|
0
Zhuravlik
07.03.13
✎
14:57
|
Добрый день, еще раз)) Если я открываю форму для подбора (из диалога) - это форма обработки, мне нужно передать из нее строковое значение в вызвавшую форму, то для 7 делал Форма.ВыполнитьВыбор(), а в 8.1 как?
|
|||
1
lxndr
07.03.13
✎
14:59
|
(0)
Результат = Форма.ОткрытьМодально(); Если не модально, то передавай владельца при получении формы выбора. |
|||
2
Zhuravlik
07.03.13
✎
15:11
|
(1) Модально, но в самой форме, где идет подбор как указать, что мне нужно вот это значение?
Т.е. открывается обработка, в ней - строковый диалог "стр_МоеПоле". В 7 я бы при закрытии написал "Форма.ВыполнитьВыбор(стр_МоеПоле)", а в 8? |
|||
3
lxndr
07.03.13
✎
15:19
|
(2) При закрытии (или нажатии твоей кнопки) в форме выбора:
Закрыть(стр_МоеПоле); |
|||
4
Zhuravlik
07.03.13
✎
15:21
|
(3) Спасибо, буду пробовать)
|
|||
5
Zhuravlik
07.03.13
✎
16:10
|
(3) А если я ескейп нажал в форме подбора?
|
|||
6
Zhuravlik
07.03.13
✎
16:12
|
Извините за (5), поспешил. Просто форму закрываю в обработчике, но если отказываюсь от редактирования нажатием "Esc", то 1С валится. Подскажите пожалуйста, где можно обработать событие отмены редактирования?
|
|||
7
Reset
07.03.13
✎
16:14
|
"если отказываюсь от редактирования нажатием "Esc", то 1С валится" - страх какой
Если форму открываешь как (1), то при отказе от выбора в Результат попадет Неопределено. |
|||
8
Zhuravlik
07.03.13
✎
16:20
|
(7) Ды не страх. Как-то уже давно не было экспериментов, а тут не подкован, все-равно не приятно.
Спасибо) |
|||
9
Zhuravlik
07.03.13
✎
16:24
|
(7) Вставил проверку на "Неопределено", все-равно валится. А как в "ПриЗакрытии()" этот параметр указать?
|
|||
10
Reset
07.03.13
✎
16:38
|
(9) Зачем при закрытии?
|
|||
11
Zhuravlik
07.03.13
✎
16:40
|
Посмотрел в отладчике, при закрытии вызывается событие строкового диалога (с маской) "ОкончаниеВводаТекста" раз 100, затем конфа валится. Это при условии, что текст вводили, но не ентер нажаили, а ескейп.
(10) Уже понял, что не поможет. Нужно понять, как избавиться от вызова события элемента диалога, если форма закрывается по нажатию ескейпа. |
|||
12
Reset
07.03.13
✎
16:41
|
В событии ОкончаниеВводаТекста напортачил, наверное
|
|||
13
Reset
07.03.13
✎
16:41
|
как-то у тебя бесконечная рекурсия образовалась
|
|||
14
Zhuravlik
07.03.13
✎
16:45
|
Там ни одного цикла нет. Вот код:
Процедура Деффект_ОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка) Текст = СтрЗаменить(Текст, " ", "0"); КП = Сред(Текст, 4, 2); ТП = Прав(Текст, 1); стр_КП = "01, 02, 03, 04, 05, 06, 09, 11, 12, 13, 14, 15, 20" + "21, 22, 23, 08, 10, 18, 19, 30, 36, 39, 40"; стр_ТП = "1, 2, 3, 4, 5, 6"; флНеЗакрывать = 0; Если Найти(стр_КП, КП) = 0 Тогда Сообщить("Неверно указан код повреждения """+ КП +"""!", СтатусСообщения.Внимание); флНеЗакрывать = 1; КонецЕсли; Если Найти(стр_ТП, ТП) = 0 Тогда Сообщить("Неверно указан код тяжести повреждения """+ ТП +"""!", СтатусСообщения.Внимание); флНеЗакрывать = 1; КонецЕсли; Если флНеЗакрывать = 1 Тогда Возврат; КонецЕсли; _Форма.Закрыть(Текст); КонецПроцедуры |
|||
15
Zhuravlik
07.03.13
✎
16:46
|
+ И он ничего не сообщает при нажатии на ескейп, иначе было бы понятно что флНеЗакрывать виноват.
|
|||
16
Zhuravlik
07.03.13
✎
16:47
|
+ СтандартнаяОбработка в "Ложь" выставлял, не помогает...
|
|||
17
Reset
07.03.13
✎
16:49
|
А что это за _Форма и зачем она закрывается здесь?
|
|||
18
Zhuravlik
07.03.13
✎
16:52
|
Использую обработку для ввода текстовой строки по маске.
Закрывается, чтобы передать введенную строку как в (1). В ПриОткрытии, в модуле формы - _Форма = ОбработкаОбъект.ПолучитьФорму("Форма");, _Форма - переменная модуля. |
|||
19
Reset
07.03.13
✎
16:54
|
Ничего не понял (7 марта таки), но чую нюхом что изза этого закрытия
|
|||
20
Zhuravlik
07.03.13
✎
16:56
|
(19) Я тоже "Чую" :) Только что делать-то? Надо как-то обработать событие ПриЗакрытии, если нажат ескейп - закончить редактирование, присвоить Текст = "".
|
|||
21
Reset
07.03.13
✎
16:58
|
(20) не нужно никак обрабатывать событие ПриЗакрытии
В вызывающей форме проверять значение, которое вернулось и все. Там будет или Неопределено (отказались) или строка, которую ты вернул при нажатии на кнопку |
|||
22
Reset
07.03.13
✎
17:01
|
Процедура КнопкаВыбратьНажатие()
Если Найти(Текст,"блала") Сообщить("неверно указан код); Возврат Если Найти(Текст,"бебебеа") Сообщить("неверно указан кодддд!!); Возврат //блабабалала /// Опа - все верно Закрыть(Текст); КонецПроцедуры |
|||
23
Zhuravlik
07.03.13
✎
17:03
|
(21) Проверял, нет. До вызывающей формы дело вообще не доходит, конфа валиться.
Просто при нажатии на ескейп программа пытается вызвать ОкночаниеРедактирования, а там до возврата дело не доходит, форма получает команду на закрытие, и по-новой - вот и рекурсия. Нужно отловить ескейп. (22) То же самое. |
|||
24
Reset
07.03.13
✎
17:06
|
(23) Не нужно ничего ловить, убери оттуда закрытие
|
|||
25
Zhuravlik
07.03.13
✎
17:09
|
(24) Все проще решилось. Перенес код в ПриИзменении, все работает)
Спасибо за поддержку. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |