| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Обработка событий в Аксапте
			 
			
			Может кто-нибудь имеет опты по обработке системных событий в Аксапте!! Был-бы рад услышать советы на данную тему! 
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Боюсь, что это не возможно. 
		
		
		
		
		
		
		
	Обработать системные события можно либо подменив оконную процедуру Аксапты, либо субклассингом. Я не видел в X++ возможностей не для того, ни для другого. Хотя, технически, если бы разработчики Аксапты хотели бы дать такую экзотическую возможность - думаю это можно было бы реализовать. Например создав callback функции для каждого из событий. Если не секрет, какое из событий Вы хотите обработать и зачем Вам это нужно ?  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Если не секрет, какое из событий Вы хотите обработать и зачем Вам это нужно ?
		
	 
 | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Не фига не стало ясно. 
		
		
		
		
		
		
		
	Цитата: 
	
		
			 Рассказываю!!  Есть некое оборудование, которое подключается к ПК!) Это оборудование генерит некое событие (прерывание)! Мне нужно его в Аксапте обработать!!
		
	 
Какие события оно генерит ? И вообще - события это или прерывания ? Хотя могу предложить универсальное решение   - можно реализовать промежуточный слой на одном из системных языков программирования (C++, Delphi и.т.д.)  Суть этого слоя - перехват "события" от Вашего оборудования и в ответ на это событие вызов метода Аксапты через COM интерфейс. В принципе, этот промежуточный слой можно реализовать в виде dll или activeX и использовать прямо в Аксапте. Останется только проблема с развертыванием.  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Хотя могу предложить универсальное решение  - можно реализовать промежуточный слой на одном из системных языков программирования (C++, Delphi и.т.д.)
		
	 
  Но хотелось бы без "прослоек"!   Потому что за этими "прослойками" нужно дополнительно следить: что они стояли у пользователя, чтобы были запущены в нужное время и в нужном месте. А оборудование до боли просто: сканер штрих-кода!!  
		 | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Еще раз - как подключается оборудование ? 
		
		
		
		
		
		
		
	Через COM порт ? Со сканерами штрих-кодов не работал, но с кассовыми аппаратами идет такая вещь, как драйвер - хотя это тоже промежуточное звено, за которым нужно следить, чтобы он был установлен у пользователя. Пока Вы не скажете более подробную информацию о том, какие события(прерывания) генерит Ваше оборудование - вам вряд ли кто-то поможет. p.s. Вообще под системными событиями в Windows понимаются константы WM_*, которые определены в файле windows.h. Но как я понял, у Вас все-таки нечто иное  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Сканер подключается через COM-порт. И мне необходимо при сканировании штрих-кода на упаковке получить этот код в поле формы Аксапты! 
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Dll однозначно. Хотя Axapta, по идее, могла бы понимать такую штуку и сама. Handle'ров нет, напрямую порт хоть и откроешь, но нет доступа к более специфическим функциям (SetCommSpeed, SetCommTimeOut,..) так привычных в C++... Кстати, у меня есть утилита для трансляции из COM в разрыв клавиатуры, но это не выход  - криво уж очень... 
		
		
		
		
		
		
		
	А чей сканер-то? Metrologic, Symbol, CipherLab, HPP?  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сканер подключается через COM-порт.
		
	 
   Долго же мне пришлось Вас пытать.ОК. Шансов не много, но попробовать можно. Дело в том, что в Windows с COM портом можно работать так же, как и с обычным файлом - через api функцию CreateFile. Однако есть несколько неприятных моментов: 1) CreateFile реализованная в классе WinApi Вам не подходит. Вот ее обертка в Аксапте: PHP код: 
	
			
	Цитата: 
	
		
			hCom = CreateFile( pcCommPort,                       
GENERIC_READ | GENERIC_WRITE, 0, // must be opened with exclusive-access NULL, // no security attributes OPEN_EXISTING, // must use OPEN_EXISTING 0, // not overlapped I/O NULL // hTemplate must be NULL for comm devices ); Так что нужно будет реализовать свою версию WinAPI::CreateFile 2. Нужно будет создать свои обертки вокруг API функций GetCommState и SetCommState. 3. Может еще что-то забыл. p.s. Сам бы я поставил драйвер (или любое другое промежуточное ПО и не мучался).  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			 Handle'ров нет, напрямую порт хоть и откроешь, но нет доступа к более специфическим функциям (SetCommSpeed, SetCommTimeOut,..) так привычных в C++...
		
	 
CreateFile как раз handle и возвращает. А параметры устройства, как я понимаю можно не определять - Vasilenko Alexsandr их должен знать. Достаточно будет задать их как константы: PHP код: 
	
			
	 | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 PHP код: 
	
			
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да, дело в том, что, когда я писал компоненты для работы с подобного рода аппаратурой, (Сканеры, принтеры шк, теминалы), мне приходилось использовать OVERLAPPED.. Хм... что-то вроде.. 
		
		
		
		
		
		
		
	PHP код: 
	
			
	Все это в отдельном потоке крутилось, разумеется..  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Просто сечас под рукой ничего более приличного нет... Это что-то из старого.. Но, надеюсь, принцип понятен. В Axapte есть, в принципе, потоки... TutorialThread и все такое... но реально не работал, так что не скажу. 
		
		
		
		
		
		
		
	В документации - только 1 упоминание о сканере (в торговле и логистике). И то, судя по всему, клавиатурного  
		 | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Уважаемые господа!! Это все хорошо и понятно!! Работать с COM-портом Аксапта может, ура!! 
		
		
		
		
		
		
		
	  Но здесь вожен еще один момент, в Аксапте нужно организовать механизм беспрерывного опроса СOM-порта, чтобы пользователь не сидел и не ждал пока информация из СOM-порта соблаговолит попасть к нему в окно. Здесь важно, что Аксапта среагировала именно в тот момент, кода код считался с помощью сканера! 
		 | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Думаю мы убедили Vasilenko Alexsandr - использовать промежуточное ПО  
		
		
		
		
		
		
		
	![]() Хотя, если есть куча свободного времени - почему бы и не попробовать  
		 | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Александр! Так о том и речь, что невозможно открыть СОМ-порт, используя 
		
		
		
		
		
		
		
	OVERLAPPED!! т.е, что бы предыдущий пример заработал, надо, кроме того, что бы поместить его в отдельный поток, еще и открыть порт примерно таким образом: PHP код: 
	
			
	Я, в принципе, знаю, что куда надо записать.... UART он во всем мире одинаков ![]() т.е. как в регистрах UART выставить соответствующие значения? 0011001   (то, что, в принципе и делает SetCommState)
		 | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Все это в отдельном потоке крутилось, разумеется..
		
	 
![]() Как можно рабоать с несколькими потоками в Аксапте, как организвать работу в разных потоках??!  
		 | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			 Работать с COM-портом Аксапта может, ура!!
		
	 
![]() Цитата: 
	
		
			Как можно рабоать с несколькими потоками в Аксапте, как организвать работу в разных потоках??!
		
	 
 | 
| 
	
 | 
| 
			
			 | 
		#19 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			2 George Nordic: Вы опережаете мои вопросы, спасибо!! 
		
		
		
		
		
		
		
	  Я за Вами не успеваю!! 
		 | 
| 
	
 | 
| 
			
			 | 
		#20 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано Андре  
Думаю мы убедили Vasilenko Alexsandr - использовать промежуточное ПО ![]() Хотя, если есть куча свободного времени - почему бы и не попробовать   
		
	  Андрей, скорость Ваших ответов просто поражает ![]() Полностью с Вами согласен! Александр, эксперементируйте! Только не забудьте поделиться с общественностью   Я могу дать пример кода... Хотя, я думаю, на всяких OpenSource'ax их тоже хватает. В любом случае, инструмент для работы с СОМ-портом из Axapta - хорошая штука. Кстати, всякие коммерческие Dll - редкая дрянь (по крайней мере 2 года назад так оно и было).. Черт! Да у меня же своя где-то есть!!! Как раз для работы с торговым оборудованием всяким.. Ох.. надо дома в архивах порыться... а, может, и выложена где на www.CihperLab.ruУдачи! С Уважением, Георгий.  | 
| 
	
 | 
| 
	
	 | 
	
		
| Опции темы | Поиск в этой теме | 
| Опции просмотра | |
		
  |