Имя: Пароль:
1C
1С v8
Два сканера штрих-кода на локальном компьютере - с какого COM-порта событие?
0 Vladal
 
28.09.11
13:07
Локально (не в терминале) на компьютере подключены 2 считывателя магнитных карт (вход - COM4 и выход - COM5).

Работают они как сканеры ШК, компонента стандартная 1С - scanopos.

Для каждого сканера создал отдельный объект - ДрайверВхода и ДрайверВыхода, соответственно для каждого определил его параметры:

   ДрайверВхода.БитДанных  = 8;
   ДрайверВхода.Порт       = НомерПорта;
   ДрайверВхода.Скорость   = 9600;
   ДрайверВхода.СтопБит    = 0;
   ДрайверВхода.СтопСимвол = 13;
   ДрайверВхода.ИмяСобытия = "ПолученШтрихкод";

...

   ДрайверВыхода.БитДанных  = 8;
   ДрайверВыхода.Порт       = НомерПорта;
   ДрайверВыхода.Скорость   = 9600;
   ДрайверВыхода.СтопБит    = 0;
   ДрайверВыхода.СтопСимвол = 13;
   ДрайверВыхода.ИмяСобытия = "ПолученШтрихкод";

Процедура ВнешнееСобытие(Источник, Событие, Данные) имеет такие параметры н6езависимо, с какого устройства они получены:

Источник = "Сканер штрихкода", Строка
Событие = "ПолученШтрихкод", Строка
Данные = "0003020848", Строка

В Предприятии Сервис-Параметры компонента показывает, что всё ОК, по кнопке ТестУстройства в окне видно, с какого порта пришли данные. А как отловить порт в 1С?

http://i074.radikal.ru/1109/d1/86c3bad17aa4.png
1 Vladal
 
28.09.11
13:10
НомерПорта для каждого драйвера свой. Да не смущает это светлые умы мистян )))

Процедура ПодключитьДрайверВхода(НомерПорта)
...
   ДрайверВхода.БитДанных  = 8;
   ДрайверВхода.Порт       = НомерПорта;
   ДрайверВхода.Скорость   = 9600;
   ДрайверВхода.СтопБит    = 0;
   ДрайверВхода.СтопСимвол = 13;
   ДрайверВхода.ИмяСобытия = "ПолученШтрихкод";
...
КонецПроцедуры

Процедура ПодключитьДрайверВыхода(НомерПорта)
...
   ДрайверВыхода.БитДанных  = 8;
   ДрайверВыхода.Порт       = НомерПорта;
   ДрайверВыхода.Скорость   = 9600;
   ДрайверВыхода.СтопБит    = 0;
   ДрайверВыхода.СтопСимвол = 13;
   ДрайверВыхода.ИмяСобытия = "ПолученШтрихкод";
...
КонецПроцедуры
2 Serginio1
 
28.09.11
13:15
ДрайверВхода.ИмяСобытия = "ПолученШтрихкод"+НомерПорта;
3 Vladal
 
28.09.11
13:19
Оп! Ща...
4 Vladal
 
28.09.11
13:24
Сэр! Заработало!

Процедура ВнешнееСобытие(Источник, Событие, Данные)
   
   Если Событие = "ПолученШтрихкод"+НормеПортаВхода Тогда
       
       Сообщить("Вход");
       Штрихкод = СерверТО.ОбработатьСобытие(Данные);
       
   ИначеЕсли Событие = "ПолученШтрихкод"+НормеПортаВыхода Тогда
       
       Сообщить("Выход");
       Штрихкод = СерверТО.ОбработатьСобытие(Данные);
       
   Иначе
       Сообщить("Загрушка");
   КонецЕсли;
5 Vladal
 
28.09.11
13:33
(2) упростил немного (4). Пишу для интересующихся:

Процедура ПодключитьДрайверВхода(НомерПорта)
...
   ДрайверВхода.БитДанных  = 8;
   ДрайверВхода.Порт       = НомерПорта;
   ДрайверВхода.Скорость   = 9600;
   ДрайверВхода.СтопБит    = 0;
   ДрайверВхода.СтопСимвол = 13;
   ДрайверВхода.ИмяСобытия = "Вход";
...
КонецПроцедуры

Процедура ПодключитьДрайверВыхода(НомерПорта)
...
   ДрайверВыхода.БитДанных  = 8;
   ДрайверВыхода.Порт       = НомерПорта;
   ДрайверВыхода.Скорость   = 9600;
   ДрайверВыхода.СтопБит    = 0;
   ДрайверВыхода.СтопСимвол = 13;
   ДрайверВыхода.ИмяСобытия = "Выход";
...
КонецПроцедуры

...

Процедура ВнешнееСобытие(Источник, Событие, Данные)
   
   Если Событие = "Вход" Тогда

       ...
       
   ИначеЕсли Событие = "Выход" Тогда
       
       ...
       
   Иначе
       Сообщить("Загрушка");
   КонецЕсли;

   КодКарточки = Данные;

КонецПроцедуры
6 Vladal
 
28.09.11
13:37
На рисунке видны события: 2 стандартных и 2 моих "Вход" и "Выход".
http://i063.radikal.ru/1109/47/75941ccb322c.png
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс