Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Баг Formex? (число прочтений - 4093 )
al_zzz
Senior Member
****
Отсутствует


1C++ ->

Сообщений: 361
Местоположение: Барнаул
Зарегистрирован: 05. Сентября 2009
Пол: Мужской
Баг Formex?
14. Декабря 2009 :: 07:44
Печать  
У меня версия стоит версия Formex 2.0.5.76 от 28.08.08 (В последнем релизе компаненты тот же баг). При долгом удерживании клавиш Alt, Ctrl, Shift, если обрабатываю событие ПриНажатииКлавиши... внешней обработкой, одинэска падает.
  

1_005.JPG ( 194 KB | Загрузки )
1_005.JPG

Каждая система проходит три стадии:&&1) Шумиха&&2) Неразбериха&&3) Поиск виновных (собственно, рабочий процесс)&&4) Наказание невиновных&&5) Награждение непричастных&& В.М. Глушков
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Баг Formex?
Ответ #1 - 14. Декабря 2009 :: 07:57
Печать  
И чего написано в самой проце ?
  
Наверх
 
IP записан
 
al_zzz
Senior Member
****
Отсутствует


1C++ ->

Сообщений: 361
Местоположение: Барнаул
Зарегистрирован: 05. Сентября 2009
Пол: Мужской
Re: Баг Formex?
Ответ #2 - 14. Декабря 2009 :: 08:03
Печать  
Eprst писал(а) 14. Декабря 2009 :: 07:57:
И чего написано в самой проце ?

Код
Выбрать все
//Вот это в гл модуле
Процедура ПриНажатииКнопкиКлавиатуры(Конт,КодКлавиши,Алт,Шифт,Контрол,ФСО)
	Если Константа.ДопВозможности = 1 Тогда
		Если ПустоеЗначение(Конт)= 1 Тогда
			Если  Контрол = 1 Тогда
				Кон	  = "";
				Если Буква(КодКлавиши) = "ж" Тогда
					ОткрытьФорму("Журнал.ЖурналОбщий");
				КонецЕсли;
				Если Буква(КодКлавиши) = "н" Тогда
					ОткрытьФорму("Справочник.Номенклатура.ФормаСписка",кон);
				КонецЕсли;
				Если Буква(КодКлавиши) = "к" Тогда
					ОткрытьФорму("Справочник.Контрагенты.ФормаСписка",кон);
				КонецЕсли;
				Если Буква(КодКлавиши) = "д" Тогда
					ОткрытьФорму("Справочник.Дисконт.ФормаСписка",кон);
				КонецЕсли;
				КодКлавиши = 27;
			КонецЕсли;
		Иначе
		ФСО = 1;
	  Если (((Контрол = 1)  или (Алт=1) или (Шифт=1)) и (Найти("16,17,18",КодКлавиши)<>0)) или (КодКлавиши=27)  Тогда
				СписокКлавишь = СоздатьОбъект("СписокЗначений");
				СписокКлавишь.ДобавитьЗначение(Конт,"Параметр");
				СписокКлавишь.ДобавитьЗначение(ВведСлово,"Слово");
				СписокКлавишь.ДобавитьЗначение(Алт,"Альт");
				СписокКлавишь.ДобавитьЗначение(Шифт,"Шифт");
				СписокКлавишь.ДобавитьЗначение(Контрол,"Контрол");
				СписокКлавишь.ДобавитьЗначение(ФСО,"Флаг");
				СписокКлавишь.ДобавитьЗначение(КодКлавиши,"КодКлавиши");

				ВведСлово = "";
		КонецЕсли;
			ВведСлово = ВведСлово + Буква(КодКлавиши);
			Состояние(ВведСлово);
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры
//А в обработке, хоть так напиши - эфект один - падает.
Процедура ПриОткрытии()
СтатусВозврата(0);
Возврат;
КонецПроцедуры; 

  

Каждая система проходит три стадии:&&1) Шумиха&&2) Неразбериха&&3) Поиск виновных (собственно, рабочий процесс)&&4) Наказание невиновных&&5) Награждение непричастных&& В.М. Глушков
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Баг Formex?
Ответ #3 - 14. Декабря 2009 :: 08:26
Печать  
Вестимо из-за этой строчки:

           ВведСлово = ВведСлово + Буква(КодКлавиши);
           Состояние(ВведСлово);

Видать есть Перем ВведСлово в начале глобальника и ВведСлово =""; еще где нить.. а далее. строка превышает допустимую длину..
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Баг Formex?
Ответ #4 - 14. Декабря 2009 :: 08:28
Печать  
Хотя... этим вряд ли уронишь..
Чего за функция Буква() ?
  
Наверх
 
IP записан
 
al_zzz
Senior Member
****
Отсутствует


1C++ ->

Сообщений: 361
Местоположение: Барнаул
Зарегистрирован: 05. Сентября 2009
Пол: Мужской
Re: Баг Formex?
Ответ #5 - 15. Декабря 2009 :: 12:16
Печать  
Eprst писал(а) 14. Декабря 2009 :: 08:28:
Хотя... этим вряд ли уронишь..
Чего за функция Буква() ?

Буква() возвращает символ по его коду
  

Каждая система проходит три стадии:&&1) Шумиха&&2) Неразбериха&&3) Поиск виновных (собственно, рабочий процесс)&&4) Наказание невиновных&&5) Награждение непричастных&& В.М. Глушков
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Баг Formex?
Ответ #6 - 15. Декабря 2009 :: 22:19
Печать  
al_zzz писал(а) 15. Декабря 2009 :: 12:16:
Eprst писал(а) 14. Декабря 2009 :: 08:28:
Хотя... этим вряд ли уронишь..
Чего за функция Буква() ?

Буква() возвращает символ по его коду

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

  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Баг Formex?
Ответ #7 - 16. Декабря 2009 :: 07:30
Печать  
Гы.. Т.е. автор букве всегда =1 делал ?
Улыбка
  
Наверх
 
IP записан
 
al_zzz
Senior Member
****
Отсутствует


1C++ ->

Сообщений: 361
Местоположение: Барнаул
Зарегистрирован: 05. Сентября 2009
Пол: Мужской
Re: Баг Formex?
Ответ #8 - 17. Декабря 2009 :: 03:12
Печать  
Eprst писал(а) 16. Декабря 2009 :: 07:30:
Гы.. Т.е. автор букве всегда =1 делал ?
Улыбка

Выходит, что так. Вот что бывает, когда пользуешься строй документацией к новой версии компоненты. А посуществу есть что-нибудь? У себя не пробовали смоделировать?
  

Каждая система проходит три стадии:&&1) Шумиха&&2) Неразбериха&&3) Поиск виновных (собственно, рабочий процесс)&&4) Наказание невиновных&&5) Награждение непричастных&& В.М. Глушков
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Баг Formex?
Ответ #9 - 17. Декабря 2009 :: 06:38
Печать  
Не падает.
Да и нам отсюда не видно, что в Функции Буква.. например, и как объявлена ВведСлово ...
И зачем всё время суммировать ВведСлово при любом нажатии...
  
Наверх
 
IP записан
 
al_zzz
Senior Member
****
Отсутствует


1C++ ->

Сообщений: 361
Местоположение: Барнаул
Зарегистрирован: 05. Сентября 2009
Пол: Мужской
Re: Баг Formex?
Ответ #10 - 21. Декабря 2009 :: 05:50
Печать  
Eprst писал(а) 17. Декабря 2009 :: 06:38:
Не падает.
Да и нам отсюда не видно, что в Функции Буква.. например, и как объявлена ВведСлово ...
И зачем всё время суммировать ВведСлово при любом нажатии...

Код
Выбрать все
Функция Буква(КодКлавиши)
		Если КодКлавиши = 70 Тогда
			Буква =  "а";
		ИначеЕсли КодКлавиши = 188 Тогда
			Буква =  "б";
		ИначеЕсли КодКлавиши = 68 Тогда
			Буква =  "в";
		ИначеЕсли КодКлавиши = 189 Тогда
			Буква =  "-";
		ИначеЕсли КодКлавиши = 85 Тогда
			Буква =  "г";
		ИначеЕсли КодКлавиши = 76 Тогда
			Буква =  "д";
		ИначеЕсли КодКлавиши = 84 Тогда
			Буква =  "е";
		ИначеЕсли КодКлавиши = 192 Тогда
			Буква =  "ё";
		ИначеЕсли КодКлавиши = 186 Тогда
			Буква =  "ж";
		ИначеЕсли КодКлавиши = 80 Тогда
			Буква =  "з";
		ИначеЕсли КодКлавиши = 66 Тогда
			Буква =  "и";
		ИначеЕсли КодКлавиши = 81 Тогда
			Буква =  "й";
		ИначеЕсли КодКлавиши = 82 Тогда
			Буква =  "к";
		ИначеЕсли КодКлавиши = 75 Тогда
			Буква =  "л";
		ИначеЕсли КодКлавиши = 86 Тогда
			Буква =  "м";
		ИначеЕсли КодКлавиши = 89 Тогда
			Буква =  "н";
		ИначеЕсли КодКлавиши = 74 Тогда
			Буква =  "о";
		ИначеЕсли КодКлавиши = 71 Тогда
			Буква =  "п";
		ИначеЕсли КодКлавиши = 72 Тогда
			Буква =  "р";
		ИначеЕсли КодКлавиши = 67 Тогда
			Буква =  "с";
		ИначеЕсли КодКлавиши = 78 Тогда
			Буква =  "т";
		ИначеЕсли КодКлавиши = 69 Тогда
			Буква =  "у";
		ИначеЕсли КодКлавиши = 65 Тогда
			Буква =  "ф";
		ИначеЕсли КодКлавиши = 219 Тогда
			Буква =  "х";
		ИначеЕсли КодКлавиши = 88 Тогда
			Буква =  "ч";
		ИначеЕсли КодКлавиши = 73 Тогда
			Буква =  "ш";
		ИначеЕсли КодКлавиши = 79 Тогда
			Буква =  "щ";
		ИначеЕсли КодКлавиши = 77 Тогда
			Буква =  "ь";
		ИначеЕсли КодКлавиши = 83 Тогда
			Буква =  "ы";
		ИначеЕсли КодКлавиши = 221 Тогда
			Буква =  "ъ";
		ИначеЕсли КодКлавиши = 222 Тогда
			Буква =  "э";
		ИначеЕсли КодКлавиши = 190 Тогда
			Буква =  "ю";
		ИначеЕсли КодКлавиши = 90 Тогда
			Буква =  "я";
		ИначеЕсли КодКлавиши = 191 Тогда
			Буква =  ".";
		ИначеЕсли КодКлавиши = 32 Тогда
			Буква =  " ";
		ИначеЕсли КодКлавиши = 8 Тогда
			ВведСлово = Лев(ВведСлово,СтрДлина(ВведСлово)-1);
		Иначе
			ВведСлово = "";
		КонецЕсли;
	Возврат Буква;
КонецФункции	// Алфавит 


А ВведСлово - просто глобальная переменная.
  

Каждая система проходит три стадии:&&1) Шумиха&&2) Неразбериха&&3) Поиск виновных (собственно, рабочий процесс)&&4) Наказание невиновных&&5) Награждение непричастных&& В.М. Глушков
Наверх
 
IP записан
 
al_zzz
Senior Member
****
Отсутствует


1C++ ->

Сообщений: 361
Местоположение: Барнаул
Зарегистрирован: 05. Сентября 2009
Пол: Мужской
Re: Баг Formex?
Ответ #11 - 21. Декабря 2009 :: 05:57
Печать  
Но мне кажется, дело не в функциях и переменных глобального модуля. Потому что, когда я удаляю Открыть.ert из каталога базы 1ска не вылетает при зажатии клавиш.
  

Каждая система проходит три стадии:&&1) Шумиха&&2) Неразбериха&&3) Поиск виновных (собственно, рабочий процесс)&&4) Наказание невиновных&&5) Награждение непричастных&& В.М. Глушков
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Баг Formex?
Ответ #12 - 21. Декабря 2009 :: 06:33
Печать  
Похоже что у тебя Открыть.ерт не успевала отработать, как приходило новое нажатие клавищи, таким образом открывалось огромное количество (что плохо) модальных окон (это тоже плохо). Но вот зачем открывать внешнюю обработку при каждом нажатии клавиши я придумать не могу. Скорее всего что-то в дизайне программы надо поправить.
  
Наверх
ICQ  
IP записан
 
al_zzz
Senior Member
****
Отсутствует


1C++ ->

Сообщений: 361
Местоположение: Барнаул
Зарегистрирован: 05. Сентября 2009
Пол: Мужской
Re: Баг Formex?
Ответ #13 - 22. Декабря 2009 :: 05:37
Печать  
Salimbek писал(а) 21. Декабря 2009 :: 06:33:
Похоже что у тебя Открыть.ерт не успевала отработать, как приходило новое нажатие клавищи, таким образом открывалось огромное количество (что плохо) модальных окон (это тоже плохо). Но вот зачем открывать внешнюю обработку при каждом нажатии клавиши я придумать не могу. Скорее всего что-то в дизайне программы надо поправить.

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

Каждая система проходит три стадии:&&1) Шумиха&&2) Неразбериха&&3) Поиск виновных (собственно, рабочий процесс)&&4) Наказание невиновных&&5) Награждение непричастных&& В.М. Глушков
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Баг Formex?
Ответ #14 - 22. Декабря 2009 :: 12:23
Печать  
Вынести все в класс. При необходимости обновления - положить туда новый класс и сбросить на клиентах кэш оптимизации:
Код
Выбрать все
	МетаИнфо = СоздатьОбъект("MetaInfoClasses");
	МетаИнфо.ОчиститьДанныеОптимизацииКлассов();
 

  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать