Имя: Пароль:
1C
1C 7.7
v7: ПриНажатииКнопкиКлавиатуры
,
0 Junior1s
 
19.01.12
08:22
Доброе Утро.
Прошу совета. Вставил на форме текст, нужно что бы в него возвращался набранный номер товара. Попробовал сделать это с помощью FormEx

Процедура ПриНажатииКнопкиКлавиатуры(_Кнопка,_АЛТ,_ШИФТ,_КОНТРЛ,_Символ,_ФСО)
   Сервис.ВнешнееСобытие("Formex","ВводСимвола",_Кнопка);
КонецПроцедуры

Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)
...
   ИначеЕсли Событие = "ВводСимвола" Тогда
       Список.ДобавитьЗначение(Симв(Данные));    
   КонецЕсли;
КонецПроцедуры

Функция НомерТовара(Ном)
   ш=0;  
   Символ="";
   Если Список.РазмерСписка()<>0 Тогда
       Для ш=1 по Список.РазмерСписка() Цикл
           Символ = Символ+Список.ПолучитьЗначение(ш);
           Продолжить;
       КонецЦикла;
       Возврат Символ;
   КонецЕсли;
КонецФункции


задуманное получилось в текст возвращается набранный номер. Но теперь какой то глюк с ТЧ т.е. не получается ничего забить... сразу идет прерывание поле нажатие Кнопки клв. как я понял. Может кто подскажет как решаются подобные задачи :( ?
1 Rie
 
19.01.12
08:24
(0)
а) Параметр ФСО там ведь не зря стоит.
б) Реагируй только на те клавиши, которые тебе нужны. Прочие же - пусть стандартно обрабатываются.
в) Зачем изврат с внешним событием? Уже поймал - ну и обработай тут же.
2 Junior1s
 
19.01.12
08:26
(1) точно про ФСО забыл :(
+(0) Клавиатура (NumLock) почему то не цифры вводит. Это так и должно быть ?
3 Rie
 
19.01.12
08:33
(2) По умолчанию ФСО = 1
Код клавиши и символ - разные вещи (это насчёт NumPad). Анализируй коды клавиш - не ошибёшься.
4 Junior1s
 
19.01.12
08:34
Спасибо.
5 Junior1s
 
19.01.12
09:03
кхм,
(1) Исправил ошибки, но теперь текст пуст.

Функция НомерТовара(Ном)
   ш=0;  
   Символ="";
   Список.ДобавитьЗначение(Ном);
   Сообщить(Список.РазмерСписка());
   Если Список.РазмерСписка()<>0 Тогда
       Для ш=1 по Список.РазмерСписка() Цикл
           Символ = Символ+Список.ПолучитьЗначение(ш);
           Продолжить;
       КонецЦикла;
       Возврат Символ;
   КонецЕсли;
   //Форма.Обновить(0);
КонецФункции

Процедура ПриНажатииКнопкиКлавиатуры(_Кнопка,_АЛТ,_ШИФТ,_КОНТРЛ,_Символ,_ФСО)
   Сообщить(_Кнопка);
   Сообщить(_Символ);
   Если (_Кнопка = 49) Тогда
       НомерТовара(Симв(_Кнопка));    
   ИначеЕсли (_Кнопка = 97) Тогда        
       НомерТовара(_Символ);
   КонецЕсли;
   //Сервис.ВнешнееСобытие("Formex","ВводСимвола",_Символ);
КонецПроцедуры

Добавлял Форму.Обновить() тогда первый символ разглядеть можно. Не пойму :( через отладчик все путем идет все как нужно... из за чего может быть что Поле Текст пусто ?
6 Rie
 
19.01.12
09:06
(5) Так а Список-то у тебя никто не меняет? А НомерТовара доблестно пытается именно из этого списка получать данные.
7 Junior1s
 
19.01.12
09:09
меняет... я решил сразу добавлять в список в функции... хотя сейчас перекинул, непомогло :( Самое главное что Размер его постоянно растет при нужном нажатии клавиш, и в отладчики все путем идет... :(
8 Junior1s
 
19.01.12
09:09
+(7) а Поле ТЕКСТ пустое...
9 Junior1s
 
19.01.12
09:25
Решил. Перенес Форму Обновить из функции в Процедуру ПриНажатииКнопкиКлавиатуры(..) сработало.
10 Junior1s
 
20.01.12
09:53
Елки =(
никак не получается запретить вызов процедуры.

Процедура ПриНажатииКнопкиКлавиатуры(_Кнопка,_АЛТ,_ШИФТ,_КОНТРЛ,_Символ,_ФСО)  
   //Сообщить(_Кнопка);
   Если (_Кнопка = 48) Тогда
       НомерТовара(Симв(_Кнопка));    
   ИначеЕсли (_Кнопка = 49) Тогда
       НомерТовара(Симв(_Кнопка));
   ИначеЕсли (_Кнопка = 50) Тогда
       НомерТовара(Симв(_Кнопка));    
   ИначеЕсли (_Кнопка = 51) Тогда
       НомерТовара(Симв(_Кнопка));    
   ИначеЕсли (_Кнопка = 52) Тогда
       НомерТовара(Симв(_Кнопка));    
   ИначеЕсли (_Кнопка = 53) Тогда
       НомерТовара(Симв(_Кнопка));    
   ИначеЕсли (_Кнопка = 54) Тогда
       НомерТовара(Симв(_Кнопка));    
   ИначеЕсли (_Кнопка = 55) Тогда
       НомерТовара(Симв(_Кнопка));    
   ИначеЕсли (_Кнопка = 56) Тогда
       НомерТовара(Симв(_Кнопка));            
   ИначеЕсли (_Кнопка = 57) Тогда        
       НомерТовара(Симв(_Кнопка));
   ИначеЕсли (_Кнопка = 96) Тогда
       НомерТовара(_Символ);        
   ИначеЕсли (_Кнопка = 97) Тогда
       НомерТовара(_Символ);                  
   ИначеЕсли (_Кнопка = 98) Тогда
       НомерТовара(_Символ);
   ИначеЕсли (_Кнопка = 99) Тогда
       НомерТовара(_Символ);
   ИначеЕсли (_Кнопка = 100) Тогда
       НомерТовара(_Символ);
   ИначеЕсли (_Кнопка = 101) Тогда
       НомерТовара(_Символ);
   ИначеЕсли (_Кнопка = 102) Тогда
       НомерТовара(_Символ);
   ИначеЕсли (_Кнопка = 103) Тогда
       НомерТовара(_Символ);
   ИначеЕсли (_Кнопка = 104) Тогда
       НомерТовара(_Символ);
   ИначеЕсли (_Кнопка = 105) Тогда
       НомерТовара(_Символ);
   Иначе
       _ФСО = 0;        
   КонецЕсли;
КонецПроцедуры

По идеи ведь если _Кнопка не равна не одному из Условий то _ФОС = 0. но Клавиатура совсем не работает... :( Как правильно использовать "Ключ" ФСО в этой пр. процедуре...
11 1Сергей
 
20.01.12
09:55
_ФСО = 0; // отменить стандартный ффод
12 Junior1s
 
20.01.12
09:58
не понял, где не так ?
13 antoneus
 
20.01.12
09:58
(10) давно не видел вживую китайского кода...
14 Ёпрст
 
20.01.12
10:00
(12) везде, фсо=0 воткни ДО всех условий и фсо=1 в ветку иначе:

   фсо=0;
   Если (_Кнопка = 48) Тогда
       НомерТовара(Симв(_Кнопка));    
.....  
    Иначе фсо =1;
   КонецЕсли;

ЗЫ : и есть еще ПриОтжатииКнопкиКлавиатуры, если че
15 Junior1s
 
20.01.12
10:23
(13) конечно моно и в одно условие, а моно и в списке искать. сделал как сделал. как правило потом все равно переписывать, я ж студент...
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.