Имя: Пароль:
1C
1С v8
V8: Изменение значения в поле ввода. Какое событие?
,
0 Liris
 
03.04.12
14:53
Добрый день!
Поискал поиском по форуму, не нашел подобной темы.
Платформа: 1С:Предприятие 8.2 (8.2.14.540)
Есть типовая НЕ управляемая форма. На форме расположен элемент "ПолеВвода" (многострочный). В это поле вводится текст.
Как в момент ввода текста считать количество символов? В других языках есть событие типа OnChange(), которое вызывается каждый раз при изменении значения в поле ввода.
Здесь такого не нашел.
Есть событие "ПриИзменении", но оно вызывается при потере фокуса объектом.
Есть событие "АвтоПодборТекста". Использовать его можно только в случае набора текста. Стоит начать "затирать" набранный текст, событие не вызывается.
У формы есть событие "ОбновлениеОтображения". Вообще не понятно в какой момент вызывается.
Может быть кто-то делал подобное?
Может можно подключить обработчик к "ПолюВвода" или форме?
1 Maxus43
 
03.04.12
14:55
ПриИзменении
2 Maxus43
 
03.04.12
14:56
Есть событие "ПриИзменении", но оно вызывается при потере фокуса объектом - Ложь
3 Maxus43
 
03.04.12
14:57
Оно вызывается именно при изменении значения, пока вводиш - значение не меняется
4 Fish
 
03.04.12
14:58
(0) А цель этого можно озвучить? Может есть и другие варианты.
5 Maxus43
 
03.04.12
14:59
v8: Подскожите идею автоподбора в регистре сведений.
АвтоПодборТекста - работает криво, выход в подключении обработчика ожидания например
6 Liris
 
03.04.12
15:01
(2) По какой-то причине событие "ПриИзменении" не вызывается.
7 Kashemir
 
03.04.12
15:02
(6) Не верю
8 hhhh
 
03.04.12
15:03
(6) процедура привязана к событию?
9 orefkov
 
03.04.12
15:03
В обработке ожидания делаешь ПолучитьГраницыВыделения, потом УстановитьГраницыВыделения(1, 1, 1, 10000),
потом читаешь ВыделенныйТекст, потом снова УстановитьГраницыВыделения по сохраненным данным.
10 Maxus43
 
03.04.12
15:03
(6) вызовется когда данные изменяться. процесс набора текста - не есть изменени. нажми ентер - вызовется
11 Liris
 
03.04.12
15:10
(7)
Имя поля "SMSСообщение"
В модуле формы:

Процедура ПосчитатьКоличествоСимволов()
   ДлинаSMSСообщения    =    СтрДлина( ЭлементыФормы.SMSСообщение.Значение );
КонецПроцедуры

Вызываю эту процедуру на событие SMSСообщениеПриИзменении. ДлинаSMSСообщения - реквизит формы.


Процедура SMSСообщениеПриИзменении(Элемент)
   ПосчитатьКоличествоСимволов();
КонецПроцедуры

При вводе текста в ПолеВвода не вызывается событие SMSСообщениеПриИзменении. Если закончить ввод тескта и перейти на другой объект - вызывается.
12 Fish
 
03.04.12
15:12
(10) По энтеру не вызовется. Только что проверил :)) Тем более поле многострочное и энтер - это просто перевод строки.
13 Liris
 
03.04.12
15:13
(10) Поле многострочное, перевод строки получается.
Мне нужно при изменении содержимого ПоляВвода сразу знать число символов.
14 Maxus43
 
03.04.12
15:14
тогда тока обработчик ожидания вешать, но там минимальный интервал - 1 секунда
15 Maxus43
 
03.04.12
15:14
можно комплексно - и обработчик ожидания и событие "АвтоПодборТекста"
16 orefkov
 
03.04.12
15:15
(13)
Так (9) же.
Ну раз поле многострочное, делай УстановитьГраницыВыделения(1, 1, 10000, 10000)

Проверено, работает.
17 orefkov
 
03.04.12
15:17
(14)
Вроде как Форма.ПодключитьОбработчикОжидания - интервал задается в 1/10 сек.
18 Рэйв
 
03.04.12
15:17
ОкончаниеВводаТекста
19 Liris
 
03.04.12
15:17
(15) Уже так делал. Но как-то не красиво получается. Простая функция, а городить такой огород.
(16) Попробую. Спасибо.

Тема остается открытой для тех, кто знает более простые и изящные варианты.
20 Рэйв
 
03.04.12
15:17
+(18)Но это только при интерактивном набивании строки вручную.При простом перещелвикании мышкой не сработает
21 Maxus43
 
03.04.12
15:18
(17) точно. тогда обработчика хватит, 0,1 секунды - приемлемая скорость. без автоподбора текста
22 vmv
 
03.04.12
15:18
опять костыли изобретаете

обработчики ожидания зло особенно для веб-клиента!

границы выделения и есть костыль

Вывод: служба обновления платформы должна занести в план работ пунктик
- создать аналог метода OnChange() для поля ввода
23 Liris
 
03.04.12
15:18
(18)(20) Вызывается после ввода текста при сходе с элемента управления.
Для моего случая не подходит. С элемента управления не ухожу
24 Infsams654
 
03.04.12
15:18
(10) (7) - (0) пишет "В других языках есть событие типа OnChange(), которое вызывается каждый раз при изменении значения в поле ввода"  - изменение значения в поле ввода - (10) как раз и есть изменени. И тут приходится изголяться (15)(16) - что не есть хорошо.
25 vmv
 
03.04.12
15:22
(24) опрботчик ПриИзменении() в 1С работает только в прошлом времени, т.е. когда событие уже произошло, наверное философия не позволяет разработчикам 1С сделать его работу и в настоящем времени или создать другое событие, например ПриИзмененииВНастоящемВремени()
26 Liris
 
03.04.12
15:22
(22) >Вывод: служба обновления платформы должна занести в план работ пунктик
Не имею опыта по общею со службой обновления платформы. Считаете, что имеет смысл обратиться?

Тема открыта для более простого и изящного решения
27 orefkov
 
03.04.12
15:23
(22)
Сидите и ждите, когда фирма 1С посчитает нужным это сделать.
А мы не ждем, а делаем - http://snegopat.ru/mdnav.html - пример фильтрации по подстроке.
28 vmv
 
03.04.12
15:24
(26) сиди тут и у них и ной раз в неделю на эту тему и прикрутят - я так часто делаю, практически все о чем ныл прикрутили)
29 Maxus43
 
03.04.12
15:25
(28) поной им что нет большой кнопки - "Сделать всё хорошо" :)
30 vmv
 
03.04.12
15:25
(27) Невозможно отобразить содержимое. Требуется Adobe Flash

на фига мне поделка котарая не может работать со стандартным дистрибутивом - это тожа костыль, чувак)
31 orefkov
 
03.04.12
15:28
(30)
Какая поделка? Какой дистрибутив? Ты о чем вообще?
32 Liris
 
03.04.12
15:28
(27) Могу поинтересоваться, каким образом работает верхнее ПолеВвода? Если АвтоПодборТекста, то он не реагирует на "стирание" текста. Только на набор.
(28) Понял.
(29) :-)
33 Maxus43
 
03.04.12
15:29
(32) сказали же - обработчик ожидания, раз в 0,1 секунды будет проверять содержимое твоего поля ввода
34 vmv
 
03.04.12
15:30
(33) запусти это чудо в веб-клиенте - накидай на форму пару таблиц, полей, подсказок и получай удовольствие
35 Maxus43
 
03.04.12
15:31
(34) мы ж не о веб
36 vmv
 
03.04.12
15:32
+(34) я считаю, что обработчики ожидания нужно уничтодить точто также как и обработчик ПриВыводеСтроки(), который был в 8.1. Это обработчики-паразиты, котрые исскушают неокрепшие умы писать г-код)
37 orefkov
 
03.04.12
15:33
(32)
Так и работает, как я описал в (9).
38 orefkov
 
03.04.12
15:34
(36)
Пипец. Полсофта на таймерах работают, а это г-код оказываецца.
39 Maxus43
 
03.04.12
15:34
(36) при выводе строки и в 8.2 есть если чо
40 Fish
 
03.04.12
15:35
(38) Ну некоторые и рекурсию г-кодом считают из-за неумения её понять :)))
41 vmv
 
03.04.12
15:39
(40) рекурсия - это стиль алгоритмизации кода.
я говорю не о стилях, а о методах.

Любой стиль имеет право на жизнь в определенной ситуации, но не любой метод имеет право на жизнь в аналогичных ситуациях)
42 vmv
 
03.04.12
15:41
(39) на УФ нету, обычные формы в 82 - это дань динозаврам, которые не могут без слез смотреть на свои культи-нетленки)
43 vmv
 
03.04.12
15:43
(38) именно так, обработчик ожидания - это как та сучка на помойке, сидит и тявкает и по делу и не по делу, нарушая общую идиллию
44 orefkov
 
03.04.12
15:47
(43)
А твое решение-то какое?
Яви нам мудрости образчик.
45 Infsams654
 
03.04.12
15:48
(39) на простом поле ввода события ПриВыводеСтроки() нет. Кстати, при вводе текста в ячейке ТП это событие срабатывает только при потере фокуса ячейки. Так, что не прокатит.
46 Maxus43
 
03.04.12
15:49
(42) полстраны на 7.7 сидят ещё, на 8.2 тоже на толстых клиентах сидят и ничо. переписаную в хлам УПП 1.2 переведи ка на управляемые формы, а таких контор много
47 Maxus43
 
03.04.12
15:49
(45) мы про ТП и говорим
48 vmv
 
03.04.12
15:51
(44) поставленную в сабже задачу на платформах линейки 8.1 и 8.2 можно решить только через озвученные выше костыли - мудро не получиться, настоящее время еще обрабатывать не научились яйцеголовые - но мы быдет ныть!
49 Infsams654
 
03.04.12
15:53
(44)(48) перехват клавиатуры может ?
50 vmv
 
03.04.12
15:54
(46) зачем переводить - сидят на старых релизах, ну и пусть сидят. я знаю десяток банков которые юзают софт под мс дос до сих пор и довольны.

но новые задачи и проекты имеет смысл разрабатывать на УФ, если ты конечно не ленивый и далее согласно постулату)
51 Fish
 
03.04.12
15:54
(48) А как организовать обмен по расписанию между файловыми базами без обработчиков ожидания? Может и на этот случай у тебя есть костыль? :))
52 vmv
 
03.04.12
15:55
(49) заюзав ком можно все, но это же ком - чужеродная сущность)
53 vmv
 
03.04.12
15:56
(51) хранить протокол фиксации операций обмена в периодическом РС, дальше рассказывать или дать г да еще и ложку?)
54 Fish
 
03.04.12
15:59
(53) Сам-то понял что сказал? Каким боком тут расписание? Как ты запустишь обмен тогда, когда надо без обработки ожидания?
55 vmv
 
03.04.12
16:04
(54) период регистра можно легко запрограммировать на создание записей согласно произвольному расписанию, которое можно вычитать из самого расписания и из некоего своего классфикатора периодов

вне расписания - по кнопке с командой запуска обмена, это сложно для вас, сочувствую?)
56 Fish
 
03.04.12
16:08
(55) "период регистра можно легко запрограммировать на создание записей согласно произвольному расписанию" - поподробнее расскажешь, каким образом регистр будет записи по расписанию создавать? Или примерчик кода?
57 vmv
 
03.04.12
16:20
(56) сегодня у меня платный день на код, жди пятницы - я в этот день занимаюсь благотворительностью и раздаю технологии даром, но ведь ты можешь сам это сделать - стыдно быть ленивым и жадным!)
58 Maxus43
 
03.04.12
16:23
(55)(57) спрашивали как ЗАПУСТИТЬ обмен по расписанию без обработчика ожидания, а не как придумать аналог расписания на Регистер сведений + какие то ещё объекты новые и тыкать на кнопку выполнить обмен
59 Fish
 
03.04.12
16:30
(58) +1000. Похоже, vmv просто стрелки переводит :))
60 Liris
 
03.04.12
19:05
(48) Ясно. Сделаю на костылях. А как не хотелось.. :-)
Понятно, что платформа 1С не для красоты интерфейса делали. Но обещали настоящую модель, со всеми событиями и т.п.
Ладно, как есть, так есть.
Спасибо всем.
Тему можно закрыть (за неимением изящного решения).
61 Liris
 
04.04.12
08:04
Сделал так:

Процедура ПриОткрытии()

   ПодключитьОбработчикОжидания("ПосчитатьКоличествоСимволов", 3, Ложь);
   
КонецПроцедуры

Трех секунд оказалось вполне достаточно.
62 НЕА123
 
04.04.12
08:24
(0)
ТС, почему игнорируешь (4)?
для чего надо знать длину?
63 FIXXXL
 
04.04.12
11:00
(33) (62) жаль все ж, что "обработчик ожидания, раз в 0,1 секунды будет проверять содержимое твоего поля ввода" как в том анекдоте "но только один разик" :(
64 FIXXXL
 
04.04.12
11:03
(62) что бы при наборе текста сразу видеть длину сообщения и на ходу корректировать ее
стоимость и разбивка СМС зависит от ее длины

PS сам такую задачку решал, но сделал на ПриИзменении, вот решил переделать, но меньше 1сек не работает, а с 1сек не очень красиво выглядит...
65 mikecool
 
04.04.12
11:10
(0) пробовал решить, не вышло, плюнул
обработчик не работает, пока редактируется текст (
66 mikecool
 
04.04.12
11:11
(61) о, блин... а у меня обработчик не срабатывал (((
67 FIXXXL
 
04.04.12
11:31
(66) а ты его откуда вызывал?