Имя: Пароль:
1C
1С v8
Подключение сканера в разрыв клавиатуры
0 кассир
 
21.08.25
14:47
Добрый день.
Есть сканер который работает в режиме клавиатуры. Необходимо его подключить к форме 1с 8.
Есть следующий код(нашел в интернете), но не получается получить штрих код
Процедура ПриОткрытии()
    ПодключитьОбработчикОжидания("ОбработатьНажатиеКлавиши", 0.1, Ложь); // Периодичность - 0.1 секунды
КонецПроцедуры

Процедура ПриЗакрытии()
    ОтключитьОбработчикОжидания("ОбработатьНажатиеКлавиши");
КонецПроцедуры

Процедура ОбработатьНажатиеКлавиши()
    // Как получить здесь нажатые клавиши( при сканировании будет штрих)?
КонецПроцедуры
1 Fragster
 
гуру
21.08.25
14:51
продолжайте наблюдение
2 Волшебник
 
21.08.25
14:51
(0) Не надо врать. Многократный обработчик ожидания с периодичностью менее 1 сек не подключится!

Если указано значение меньше 1, то значение третьего параметра должно быть равно Истина.
3 Fragster
 
гуру
21.08.25
14:55
(2) а кто сказал, что найденный в интернете код будет работать?
4 Fragster
 
гуру
21.08.25
14:57
нет бы инструкцию поискать, документацию к конфигурации или библиотеке подключаемого оборудования поизучать.

на крайняк - подумать, как сделать так, чтобы оно работало просто так. например через установку у сканера префикса типа F7 и кнопки в 1с, с этим сочетанием клавиш, которая открывает ввод строки (как в ТиС было сделано когда-то)
5 кассир
 
21.08.25
14:58
Да для 0.1 устанавливается только однократный вызов поэтому ложь. Переправил на 1 и поставил истина. Выполняется многократно. Подскажите тогда без драйверов можно ли подключить сканер в режиме клавиатуры к форме?
6 Fragster
 
гуру
21.08.25
15:00
(5) > Подскажите тогда без драйверов можно ли подключить сканер в режиме клавиатуры к форме?

да
7 кассир
 
21.08.25
15:01
Есть документация по работе со сканером 1CScanOPOSScan_v2.epf. Но интересно поянять можно ли это сделать по простому. Я 1с 7.7 я делал через formex.dll Там можно было настроить сканер в режиме STX ... ETX  и потом как нажатые клавиши это прочитать. В 1с 8 не нахожу эту возможность.
8 кассир
 
21.08.25
15:03
(6) Подстажите ссылку плиз где почитать как это сделать?
9 Злопчинский
 
21.08.25
15:08
(7) "Я 1с 7.7 я делал через formex.dll Там можно было настроить сканер в режиме STX ... ETX  и потом как нажатые клавиши это прочитать. "
- а поподробнее можно про упомянутое..?
10 Злопчинский
 
21.08.25
15:09
(8) только учесть, что скорее всего сканирование будет отрабатывать в зависимости от того, на каком элементе формы стоит фокус...
?
11 Fragster
 
гуру
21.08.25
15:16
(8)(10) см (4)
12 Fragster
 
гуру
21.08.25
15:17
(7) какой формекс, нафига? в клюшках использовался либо драйвер либо подход из (4)
13 Злопчинский
 
21.08.25
15:26
(11) это надо 8-ую конфигу править, а если без правок...?
14 Злопчинский
 
21.08.25
15:26
(12) или держать на форме только одно активное поле для ввода и фокус постоянно на нем...
15 кассир
 
21.08.25
17:12
(9) Ответ:

// Настраиваем сканер префикс STX суфикс ETX
// Подключаем formex.dll 
ЗагрузитьВнешнююКомпоненту("FormEx.dll")

// предопределенная процедура из formex.dll используется для считывания штрих-кодов USB-сканером
Процедура ПриНажатииКнопкиКлавиатуры(Конт,КодКлавиши,Alt,Shift,Ctrl,Символ,ФСО) 
		МояОбработкаКлавиши(Конт,КодКлавиши,Alt,Shift,Ctrl,Символ,ФСО);
КонецПроцедуры
//
Функция МояОбработкаКлавиши(Конт,КодКлавиши,Alt,Shift,Ctrl,Символ,ФСО) Экспорт 
	Если Символ =Симв(2) Тогда // это перфикс STX
			Сообщить("Начало ШК");
		КонецЕсли;		
		считываемШтрихКод = 1;
		глШтрихКод = "";
		Возврат 0;
	КонецЕсли;			

	Если Символ =Симв(3) Тогда //это суфикс ETX   
		Сообщить("Конец ШК"); 
		считываемШтрихКод = 0;
		ОбработатьШрихкод();//это Ваша процедура которая возьмет переменную глШрихКод и сделает что нужно)))
	КонецЕсли; 
	 
	Если считываемШтрихКод = 1 тогда 
		глШрихКод = глШтрихКод + Символ;//это глобальная   
	КонецЕсли;

КонецФункции
16 кассир
 
21.08.25
15:33
Нужно при создании документа приходная накладная при сканировании товара автоматом добавлять его в документ. Это только через OPOSscan в 1с 8 реализуемо?
17 Злопчинский
 
21.08.25
16:15
(15) ETX STX - это само оборудование отдает, или это символы считанного ШК (какого формата)..?
18 кассир
 
21.08.25
16:18
(17) это сам сканер добавляет( в штрих коде их нет). Это называется суфикс и префикс настраивается в самом сканере
19 кассир
 
21.08.25
16:21
https://help.mertech.ru/barcode_scanners/SUPERLEAD/suffix_ETX.html  ссылка на пример сканера mertech
20 Fragster
 
гуру
21.08.25
17:04
(13) если у тебя типовая - то там есть БПО. если нетиповая - то что мешает править?
21 Fragster
 
гуру
21.08.25
17:05
(16) нет
22 Fragster
 
гуру
21.08.25
17:06
Волшебник почему в (15) нет подсветки у ссылки на (9)?
23 Волшебник
 
21.08.25
17:13
(22) Не знаю. Надо дебажить

Upd. В коде была фраза: Симв(02), почему-то из-за неё ломалось
После замены на Симв(2) цифра стала синей
24 Builder
 
21.08.25
17:17
Я один не понимаю нахрена эти извраты, когда уже давно (и даже в клюшках) драйвера умеют генерить событие для клавиатурных сканеров?
25 MWWRuza
 
гуру
21.08.25
20:58
+(24) Именно так.

И вообще, что мешает использовать сканер в режиме эмуляции com-порта? Не умеет? Где вы такие сканеры берете. Все современные сканеры переключаются и в КБ и в ком... Зато сразу отпадает куча вопросов по сканированию ШК маркировки. А то, то язык не тот, то регистр, то управляющие символы не передаются, то сжирает часть кода. С COM-портовыми сканерами таких проблем нет.
Единственное оправдание использования КБ сканеров - если их нужно в нескольких программах, запущенных одновременно использовать. А так, работает везде, в том числе и по RDP.
26 H A D G E H O G s
 
21.08.25
22:29
(25) "если их нужно в нескольких программах, запущенных одновременно использовать."

Ставим VSPE, добавляем Splitter и расшариваем COMпорт на множество программ
27 Fragster
 
гуру
22.08.25
09:41
(23) лол )))
28 Fragster
 
гуру
22.08.25
09:49
(24) может самописька без БПО
29 Builder
 
22.08.25
09:52
(28) И что? Загрузить драйвер без БПО никак?
30 Fragster
 
гуру
22.08.25
09:59
(29) как. но много обеспечивающего кода. кажется, внедрить БПО не сильно дольше.
а вот вариант с кнопкой и префиксом вообще за 1 минуту делается.
31 MWWRuza
 
гуру
22.08.25
10:04
(26) Ставим VSPE, добавляем Splitter и расшариваем COMпорт на множество программ

Да. Все верно. Если всем программам нужен именно ком-порт. Но, на практике, встречаются программы, которые изначально не умеют работать с ком-портом, и ждут сканер в режиме КБ... Например, веб-морды каких-то сайтов...
Да, можно и тут выкрутиться - есть какие-то программы-прокладки, преобразующие данные с ком в КБ... Но, это все сложно и не нажежно, и иногда и не бесплатно.
Поэтому, для таких случаев, проще второй сканер купить, и голову не морочить. Один - для программ, в том числе и 1С, в режиме эмуляции COM-порта, а второй, в КБ, по умолчанию "из коробки" для сайтов и т.п... Тем более, стоят они сейчас копейки - на том-же ОЗОНе, можно вполне сносную модельку найти рубля за полтора-два.
32 MWWRuza
 
гуру
22.08.25
11:32
(30) но много обеспечивающего кода

Это много?

Функция ПодключитьСканер() Экспорт
    Попытка
        #Если ВебКлиент Тогда
            ПодключитьВнешнююКомпоненту("ОбщийМакет.СканерАТОЛ","АТОЛСканер");
            ДрайверСканШК = Новый("AddIn.АТОЛСканер.Scaner45");
        #Иначе
            ПодключитьВнешнююКомпоненту("AddIn.Scaner45");
            ДрайверСканШК = Новый("AddIn.Scaner45");
        #КонецЕсли    
        ДрайверСканШК.OldVersion = 0;
        ДрайверСканШК.AutoDisable = 1;
        ДрайверСканШК.DataEventEnabled = 1;
    Исключение
        Сообщить("Драйвер сканера ШК не найден");
    КонецПопытки;
КонецФункции

Потом, в формах, где нужно, одна предопределенная процедура "ОбработкаВнешнегоСобытия(Источник, Событие, Данные)".
Где в параметре "Данные" будет ШтрихКод. И все.

PS Обычно, я АТОЛовские дрова не использую, обхожусь стандартной 1Совской ScanOpos, но, тут писалось давно, под пос-терминал, где кроме сканера был еще и картридер, тоже в режиме эмуляции ком, и мне показалось проще его использовать для ловли события с разных портов от разных устройств...
Просто первое, что попалось под руку. В 7.7 примерно так-же.
33 Fragster
 
гуру
22.08.25
10:32
(32)  а всякие настройки, привязанные к пользователю и вот это всё?
34 MWWRuza
 
гуру
22.08.25
10:58
(33) Ну, тут зависит от "может самописька без БПО"...
Смотря как она написана. Этот мой пример для конфы, где этого  всего нет. Это у меня просто примитивный АРМ кассира "АвтоМойки", где всего этого я не делал - ни к чему было. Там есть то один пользователь, ну максимум два, если бух подключится...
35 кассир
 
22.08.25
12:33
Хорошо, буду интегрировать через COМ
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn