Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема ПриНажатииКнопкиКлавиатуры или не при нажатии? (число прочтений - 4173 )
Leierkastenmann
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 114
Зарегистрирован: 30. Марта 2007
ПриНажатииКнопкиКлавиатуры или не при нажатии?
31. Марта 2009 :: 14:03
Печать  
Такая ситуация. Есть обработка, в которой производится сканирование всяких разных штрихкодов и последующая их обработка. Сама обработка не содержит полей ввода, информация от сканера обрабатывается при помощи процедуры ПриНажатииКнопкиКлавиатуры(). Сканеры настроены так, что после ввода ШК следует одиночный Enter. Используется FormEx в составе 1CPP.dll (версия 2.0.3.3).
Вопрос - почему в одной и той же базе, но на разных компьютерах обработка происходит по разному? Объясню разность поведения на примере кода (форма абсолютно пустая):
Код
Выбрать все
Перем лФлагОбработкиСобытийКлавиатуры, лЗначениеПоляВвода;




Процедура ВывестиСписок()

	Список = СоздатьОбъект("СписокЗначений");
	Список.ДобавитьЗначение(Сред(лЗначениеПоляВвода, 3));
	Список.ДобавитьЗначение(лЗначениеПоляВвода);

	ВыбранноеЗначение = "";

	Если Список.ВыбратьЗначение(ВыбранноеЗначение,,,, 1) < 1 Тогда

		Сообщить("Ничего не выбрали");

	Иначе

		Сообщить("Выбрали " + ВыбранноеЗначение);

	КонецЕсли;

	лЗначениеПоляВвода = "";

КонецПроцедуры	// ВывестиСписок




Процедура ПриНажатииКнопкиКлавиатуры(пКодКлавиши, пАльт, пШифт, пКонтрол, пСимвол, пФСО)
	// Описание:
	//	обработка нажатия кнопки клавиатуры

	пФСО = 0;

	// начинаем обработку нажатия кнопок клавиатуры только если не стоит флаг обработки
	Если лФлагОбработкиСобытийКлавиатуры = 0 Тогда

		лФлагОбработкиСобытийКлавиатуры = 1;

		Если ((пКодКлавиши >= 48) И (пКодКлавиши <= 57)) или (пКодКлавиши = 189) ИЛИ ((пКодКлавиши >= 65) И (пКодКлавиши <= 90))
		ИЛИ ((пКодКлавиши >= 96) И (пКодКлавиши <= 105)) Тогда

			лЗначениеПоляВвода = лЗначениеПоляВвода + пСимвол;

		КонецЕсли;

		Сообщить("Сканирование. Символ " +  пСимвол + ", код клавиши " + пКодКлавиши + ", альт " + пАльт + ", ктрл " + пКонтрол + ", шифт " + пШифт);

		Если пКодКлавиши = 13 Тогда

			Если ПустоеЗначение(лЗначениеПоляВвода) = 0 Тогда

				ВывестиСписок();

			КонецЕсли;

		КонецЕсли;

		// пришли в конец, сбросим флаг обработки событий
		лФлагОбработкиСобытийКлавиатуры = 0;

	Иначе

		Сообщить("Сканирование при обработке. Символ " +  пСимвол + ", код клавиши " + пКодКлавиши + ", альт " + пАльт + ", ктрл " + пКонтрол + ", шифт " + пШифт);

	КонецЕсли;

КонецПроцедуры	// ПриНажатииКнопкиКлавиатуры



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

	лФлагОбработкиСобытийКлавиатуры = 0;

	лЗначениеПоляВвода = "";

КонецПроцедуры	// ПриОткрытии
 


Разница в поведении заключается в том, что на одних компах судя по сообщениям обработчика клавиатуры после выхода списка для выбора появляется еще один Enter, который самостоятельно выбирает значение из списка, тогда как на других компах этот дополнительный энтер не появляется.
Сталкивался кто-нибудь с подобной ситуацией? Может подскажете в какую сторону копать? Все условия на компах вроде бы одинаковые.
  
Наверх
 
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: ПриНажатииКнопкиКлавиатуры или не при нажатии?
Ответ #1 - 09. Апреля 2009 :: 07:20
Печать  
Я правильно понял ситуацию - ПК разные и сканеры тоже разные?

И еще:
- 1С знает, что это сканеры? Префикс, суффикс в ней настроены? В самих сканерах запрограммированы?
- Если перебираешь данные от сканера в "ПриНажатииКнопкиКлавиатуры", тип сканера - в разрыв клавиатуры?
- Почему так сложно, чем не устраивает "ОбработкаВнешнегоСобытия(Источник,Событие,Данные)"?
  
Наверх
IP записан
 
Leierkastenmann
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 114
Зарегистрирован: 30. Марта 2007
Re: ПриНажатииКнопкиКлавиатуры или не при нажатии?
Ответ #2 - 09. Апреля 2009 :: 08:22
Печать  
Цитата:
Я правильно понял ситуацию - ПК разные и сканеры тоже разные?


В общем случае да, разные ПК и сканеры разные. Но в общем-то сканеры переносились на другие ПК, на которых все работает как надо и там все работало.

Цитата:
1С знает, что это сканеры? Префикс, суффикс в ней настроены? В самих сканерах запрограммированы?

Нет, сканер все читает без префиксов, постфиксов. 1ска не знает, что это сканер.

Цитата:
Если перебираешь данные от сканера в "ПриНажатииКнопкиКлавиатуры", тип сканера - в разрыв клавиатуры?


Да, сканер в разрыв клавиатуры.

Цитата:
Почему так сложно, чем не устраивает "ОбработкаВнешнегоСобытия(Источник,Событие,Данные)"


От недостатка знаний. Может быть обработка внешнего события и устроила бы, если бы я знал как ею пользоваться.
  
Наверх
 
IP записан
 
Leierkastenmann
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 114
Зарегистрирован: 30. Марта 2007
Re: ПриНажатииКнопкиКлавиатуры или не при нажатии?
Ответ #3 - 09. Апреля 2009 :: 08:58
Печать  
Что-то я почитал немного про внешние события и честно говоря, не очень представляю себе как обрабатывать события от сканера, подключенного в разрыв клавиатуры.
  
Наверх
 
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: ПриНажатииКнопкиКлавиатуры или не при нажатии?
Ответ #4 - 09. Апреля 2009 :: 09:18
Печать  
Какую конфигурацию используешь? ТиС или Рарус?
Для ТиСа подключение и настройка клавиатурного сканера мне не известна. Знаю только что комоский подключать и настраивать легче, чем клавиатурный. И делать это лучше через Атоловский драйвер.
Скачать можно с сайта atol.ru, там же подробные инструкции и даже пример конфигурации. Разобраться можно, если сильно захотеть.
Для Раруса - подскажу с удовольствием.

ОбработкаВнешнегоСобытия(Источник,Событие,Данные) - на самом деле очень проста.
Если в 1С подключен и настроен сканер, то он автоматически попадает в эту обработку. В "Источник" написано "сканер" или что-то  этом роде, а в данных - твой штрихкод.
Проверив это - делай дальше что хочешь с этим штрихкодом.
« Последняя редакция: 09. Апреля 2009 :: 12:15 - simply »  
Наверх
IP записан
 
Leierkastenmann
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 114
Зарегистрирован: 30. Марта 2007
Re: ПриНажатииКнопкиКлавиатуры или не при нажатии?
Ответ #5 - 09. Апреля 2009 :: 13:24
Печать  
Конфигурация полностью самописная. Так что тут полная самостоятельность Улыбка

Только чтобы сканер дал событие я так понимаю надо именно через драйвер это событие принимать? Без всяких драйверов, как это есть сейчас в конфигурации, события от него не получить.
  
Наверх
 
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: ПриНажатииКнопкиКлавиатуры или не при нажатии?
Ответ #6 - 17. Апреля 2009 :: 08:33
Печать  
Leierkastenmann писал(а) 09. Апреля 2009 :: 13:24:
Конфигурация полностью самописная. Так что тут полная самостоятельность Улыбка

Только чтобы сканер дал событие я так понимаю надо именно через драйвер это событие принимать? Без всяких драйверов, как это есть сейчас в конфигурации, события от него не получить.

Правильно понимаешь.

А для решения проблемы без драйвера могу посоветовать только через Отладчик прямо на тех ПК отлавливать.
  
Наверх
IP записан
 
Leierkastenmann
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 114
Зарегистрирован: 30. Марта 2007
Re: ПриНажатииКнопкиКлавиатуры или не при нажатии?
Ответ #7 - 05. Мая 2009 :: 10:18
Печать  
simply писал(а) 17. Апреля 2009 :: 08:33:
Leierkastenmann писал(а) 09. Апреля 2009 :: 13:24:
Конфигурация полностью самописная. Так что тут полная самостоятельность Улыбка

Только чтобы сканер дал событие я так понимаю надо именно через драйвер это событие принимать? Без всяких драйверов, как это есть сейчас в конфигурации, события от него не получить.

Правильно понимаешь.

А для решения проблемы без драйвера могу посоветовать только через Отладчик прямо на тех ПК отлавливать.



Да а что отлавливать-то? Предельно простая обработка. Могу даже сканирование оттуда убрать, проблема все равно не в нем. В том коде, что приведен в начале темы добавляем различные обработки для кнопок. Одна кнопка ввод числа, вторая ввод значения из справочника. И та, и другая на некоторых компах после выбора энтером кнопки ОК посылает Энтер в процедуру ПриНажатииКнопкиКлавиатуры.
Может есть какие-то противопоказания использования таких модальных окошек в процедуре ПриНажатииКнопкиКлавиатуры? Главное непонятно в какую сторону копать...

Вот собственно работа одной и той же обработки на двух разных компах.
Этот шлет энтер.
Код
Выбрать все
Символ +, код клавиши 107, алът 0, ктрл 0, шифт 0
Введено число 98
Символ , код клавиши 13, алът 0, ктрл 0, шифт 0
Символ -, код клавиши 109, алът 0, ктрл 0, шифт 0
Введено значение Цветнои булъвар
Символ , код клавиши 13, алът 0, ктрл 0, шифт 0
 


Этот не шлет.
Код
Выбрать все
Символ +, код клавиши 107, алът 0, ктрл 0, шифт 0
Введено число 98
Символ -, код клавиши 109, алът 0, ктрл 0, шифт 0
Введено значение Цветнои булъвар
 


Может наоборот, неправильно то, что он не шлет энтера?  Улыбка
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать