|
v7: Подключение сканера ШК в разрыв клавиатуры. | ☑ | ||
---|---|---|---|---|
0
Козаностра
06.07.15
✎
12:52
|
Есть сканеры Motorola LS1203 которые работают в режиме эмуляции КОМ порта. Но юзеры открывают по 2-3 копии 1С на раб месте ( им так нужно ) под разными пользователями. Соответственно дает сканировать только в копии которую открыли первой, а в остальных нет.
Пришел к выводу, что проблему можно решить подключением сканера в режиме разрыва клавиатуры, так как клавиатуру монопольно занять как КОМ порт не получится. Долбился я день, у меня уже начинает подгорать, директор чувствую с дня на день, пристроится с сзади. Прошу помощи. 7.70.009 ( Бух-Торг-Скл-Зарпл-Кадры-для Украины.) |
|||
1
Dmitrith
06.07.15
✎
12:55
|
А в чем проблема то? Сканер "на разрыв клавиатуры" работает как клавиатура. Просто тупо передает цифры/буквы считанные им, как если бы с клавиатуры набрали. Просто позиционируетесь в нужное поле ввода и считываете ШК
|
|||
2
Козаностра
06.07.15
✎
13:04
|
Проблема в том что он читает в поле расходной накладной только если сделать активным окно ввода на месте ШК - и то, вводятся цифры и все не подхватывает карточку товара.
|
|||
3
Dmitrith
06.07.15
✎
13:07
|
Пусть операторы или вы программно делайте окно активным и сканируете. Чтоб "подхватывало" скорее всего нужно настроить преффикс сканера - чтобы сканер после сканирование еще символ энтер вбивал
|
|||
4
Builder
06.07.15
✎
13:14
|
Искать в яндексе последние бесплатные драйвера от АТОЛ. (версия 6.х вроде)
Установить, настроить порт, добавить суффикс #13, наслаждаться. |
|||
5
Dmitrith
06.07.15
✎
13:16
|
>Установить, настроить порт, добавить суффикс #13, наслаждаться.
И будет та же проблема с портом, от которой пытаются избавиться? |
|||
6
Козаностра
06.07.15
✎
13:16
|
||||
7
Builder
06.07.15
✎
13:18
|
(5) С чего бы вдруг?
(6) Неправильно настроено на картинке. Указан префикс, а нужен суффикс. |
|||
8
Garykom
гуру
06.07.15
✎
13:20
|
ваш вариант с 3 открытыми копиями 1с и 1 сканером не взлетит никак стандартно
точнее надо смотреть драйвер клавиатурного сканера чистит ли буфер или могут 3 драйвера по очереди отработать - но такой вариант вам 100% тоже не нужен ибо тогда во всех 2-3 1С произойдет считывание ШК |
|||
9
Козаностра
06.07.15
✎
13:21
|
Результат тот же, сейчас все заскриню.
10 мин. |
|||
10
Garykom
гуру
06.07.15
✎
13:21
|
(8)+ нужна кнопка в интерфейсе 1С которая "переинициализирует" драйвер сканера для нужной текущей "копии 1С"
|
|||
11
Козаностра
06.07.15
✎
13:21
|
Garykom думаю считыванию будет в активном окне
|
|||
12
Dmitrith
06.07.15
✎
13:22
|
Без всякого драйвера 100% работать будет во всех программах если позиционироваться прямо в поле ввода. у нас так на 7ке работали - после сканирования и обработки ШК я программно курсор возвращал в поле ввода.
|
|||
13
Garykom
гуру
06.07.15
✎
13:23
|
(10)+ еще вариант это выкинуть нафик драйвер сканера (клавиатурного) и наваять свой "драйвер" на основе "обработки нажатий кнопок" и FormEx
|
|||
14
Garykom
гуру
06.07.15
✎
13:23
|
(11) советую передумать... не верите то проверьте :)
|
|||
15
Garykom
гуру
06.07.15
✎
13:24
|
(12) да самый простейший вариант отказаться от "драйверов" сканера нафик и использовать "поле ввода"
|
|||
16
Козаностра
06.07.15
✎
13:26
|
Товарищи, давайте я попробую, если нет то будем действовать по вашим советам далее, благодарю за ответы : )
|
|||
17
Builder
06.07.15
✎
13:27
|
(16) Ты хоть сообщи о результатах потом :)
|
|||
18
Козаностра
06.07.15
✎
13:35
|
http://s019.radikal.ru/i640/1507/c2/7325528b1a0e.jpg
http://s014.radikal.ru/i329/1507/0b/77bd0e4dc3b7.jpg http://i056.radikal.ru/1507/78/bc87d7cf8743.jpg http://s017.radikal.ru/i402/1507/11/21ff9ec28659.jpg В общем у меня ощущение что я что-то делаю не так, причем кардинально. В самой 1 с нет настоек клавы или выбора порта, все настройки которые доступны есть только здесь http://s009.radikal.ru/i310/1507/56/634ccaf7dd29.jpg ДУмаю я в корне лох. |
|||
19
Builder
06.07.15
✎
13:46
|
(18) Типовые давно не подключал. Тем более такую вообще не видел.
Надо смотреть что в этой обработке загружается, какой драйвер. Может проще вручную добавить загрузку нужного драйвера. Изучай конфу с примером. |
|||
20
Козаностра
06.07.15
✎
13:49
|
Как на счет этого http://catalog.mista.ru/public/271279/ ?
|
|||
21
palpetrovich
06.07.15
✎
13:53
|
(18) сканер настрен как ЭмуляцияКлавиатуры верно? в блокнот сканирует? ..а в текст в 1с? если да - тогда нужно всего-то настроить АвтоПозиционирование курсора в нужном поле на форме используя недокументированную фичу использования предопределенных процедур
|
|||
22
Козаностра
06.07.15
✎
14:00
|
В блокнот сканирует нормально с переносом на новую строку.
В 1 с тоже только нужно выбирать активное поле для ввода ( те выделять его ) http://s013.radikal.ru/i322/1507/de/541eecdf2291.jpg |
|||
23
Козаностра
06.07.15
✎
14:03
|
В расходной накладной только вот так
http://s015.radikal.ru/i331/1507/7d/3ad0eeddaa23.jpg без подхвата товара. |
|||
24
Козаностра
06.07.15
✎
14:04
|
Те я так понимаю оно работает, но последующие шаги за программистом?
|
|||
25
palpetrovich
06.07.15
✎
14:12
|
(23) дык, надо-ж функцию вызвать по событию, получить товар по ШК и вывать, что там в поле Товар - что-то типа ИзмТовар()
|
|||
26
Козаностра
06.07.15
✎
14:21
|
Скажу сразу, я нуб в 1с, поэтому если вам не лень тыкайте носом где смотреть, заодно и мне поможете ))
|
|||
27
Козаностра
06.07.15
✎
14:28
|
// ===============================
Процедура ПриОткрытии() Форма.ПанельИнструментов(0); КонецПроцедуры // =============================== Процедура ИзмШтрихКод() Тов = 0; Данные = ШтрихКод; Если ШтрихКодИмеетПрефикс=1 Тогда Если Найти("MPJS",Лев(Данные,1))<>0 Тогда // Штрих-код определяет товар Данные=Сред(Данные,2,СтрДлина(Данные)-1); Иначе глКомментарий("Формат считанного штрих-кода не предназначен для товаров"); КонецЕсли; КонецЕсли; Тов=СоздатьОбъект("Справочник.ТМЦ"); Упак=СоздатьОбъект("Справочник.Единицы"); Лев2 = Лев(Данные,2); Если Лев2 = "22" Тогда // Используется свой внутренний штрих-код товара // Штрих-код построен по коду товара и весу ЗначДлинаКодаТМЦ = ?(глДлинаКодаТМЦ > 10, 10, глДлинаКодаТМЦ); Если Тов.НайтиПоКоду(Сред(Данные,3,ЗначДлинаКодаТМЦ))=0 Тогда Сообщить("Товар с кодом "+Сред(Данные,3,ЗначДлинаКодаТМЦ)+" не найден"); Возврат; КонецЕсли; Если ЗначДлинаКодаТМЦ < 10 Тогда ТекКоличество=Число(Сред(Данные,3+ЗначДлинаКодаТМЦ,10-ЗначДлинаКодаТМЦ))/1000; Иначе ТекКоличество=1; КонецЕсли; Товар = Тов.ТекущийЭлемент(); Упаковка=""; Иначе // Используется основной штрих-код товара // или свой внутренний штрих-код товара с префиксом "20,21" Если Упак.НайтиПоРеквизиту("ШтрихКод",Данные,1)=0 Тогда глКомментарий("Товар со штрих кодом "+Данные+" не найден",0); Возврат; КонецЕсли; Упаковка=Упак.ТекущийЭлемент(); Товар=Упаковка.Владелец; ТекКоличество=1; Если Константа.ЗапрашиватьКоличество=Да Тогда Если ВвестиЧисло(ТекКоличество,"Количество товара '"+Товар+"'",10,3)=0 Тогда Возврат; КонецЕсли; КонецЕсли; Если ТекКоличество<=0 Тогда Возврат; КонецЕсли; КонецЕсли; Инфо = СоздатьОбъект("СписокЗначений"); Инфо.Установить("ТМЦ",Товар); Инфо.Установить("Единица",Упаковка); Инфо.Установить("Количество",ТекКоличество); Форма.ВыполнитьВыбор(Инфо); ШтрихКод = ""; КонецПроцедуры Есть вот это - ПодборПоШтрихКоду.Форма |
|||
28
Garykom
гуру
06.07.15
✎
14:29
|
(27) и? че хотим то?
|
|||
29
Злопчинский
06.07.15
✎
17:04
|
||||
30
Garykom
гуру
06.07.15
✎
17:12
|
(29) к сожалению там тема си... нескольких одновременно работающих сеансов 1С на одном раб.месте не раскрыта
|
|||
31
Злопчинский
06.07.15
✎
17:22
|
(30) извращения - это вы уже в персональном порядке... ;-)
|
|||
32
FN
07.07.15
✎
00:44
|
Вот тебе без всяких драйверов - вставляешь в нужную форму следующий код:
//переменные перехвата клавиатурного ШК Перем ВСХ, спНажатыхКлавиш, ПропустиьСимвол,БуферШК; Процедура ПриНажатииКнопкиКлавиатуры(КодКлавиши, Alt, Shift, Ctrl, Символ, ФСО) Если ФСО=0 тогда Возврат; КонецЕсли; //легкий антидубль - формекс иногда подглючивает //самопальный драйвер клавиатурного сканера Если Форма.АктивныйЭлемент()="ШКод" тогда Возврат; КонецЕсли; //тут фильтр по реквизитам формы, где ловить штриход ненужно Если Форма.Закладки.ТекущаяСтрока()<>1 тогда Возврат; КонецЕсли; //тут фильтр по закладкам Если (КодСимв(Символ)>47) и (КодСимв(Символ)<58) Тогда //нажатие цифры Если ПропустиьСимвол=Символ Тогда ПропустиьСимвол=""; Возврат; КонецЕсли; БылаНажата=спНажатыхКлавиш.Получить(""+КодКлавиши); Если ПустоеЗначение(БылаНажата)=1 тогда //'это первое нажатие - обрабатываем ФСО=0; //отменяем нажатие, ждем отжатия спНажатыхКлавиш.Установить(""+КодКлавиши,_GetPerformanceCounter()); Иначе спНажатыхКлавиш.Установить(""+КодКлавиши,""); //обнулим нажатие КонецЕсли; ИначеЕсли (КодСимв(Символ)=13) и (ПустоеЗначение(БуферШК)=0) Тогда ФСО=0; Возврат; КонецЕсли; КонецПроцедуры Процедура ПриОтжатииКнопкиКлавиатуры(КодКлавиши,Alt,Shift,Ctrl,Символ,ФСО) Если ФСО=0 тогда Возврат; КонецЕсли; //легкий антидубль - формекс иногда подглючивает //самопальный драйвер клавиатурного сканера Если Форма.Закладки.ТекущаяСтрока()<>1 тогда Возврат; КонецЕсли; //тут фильтр по закладкам Если Форма.АктивныйЭлемент()="ШКод" тогда Возврат; КонецЕсли; //тут фильтр по реквизитам формы, где ловить штриход ненужно Если (КодСимв(Символ)>47) и (КодСимв(Символ)<58) Тогда //нажатие цифры Если ПропустиьСимвол=Символ Тогда Возврат; КонецЕсли; БылаНажата=спНажатыхКлавиш.Получить(""+КодКлавиши); Если ПустоеЗначение(БылаНажата)=1 тогда //отжатие клавиши, которую мы не мониторим Возврат; КонецЕсли; ТаймАут=?(ПустоеЗначение(БуферШК)=1,30,3000); ТекВремяМеждуКлавишами=(_GetPerformanceCounter()-БылаНажата); Если ТекВремяМеждуКлавишами<ТаймАут Тогда // это сканер БуферШК=БуферШК+Символ; спНажатыхКлавиш.Установить(""+КодКлавиши,""); //обнулим факт нажатия ФСО=0; Возврат; Иначе Если ПустоеЗначение(БуферШК)=0 Тогда БуферШК=""; КонецЕсли; ПропустиьСимвол=Символ; ВСХ.SendKeys(Символ,1); КонецЕсли; ИначеЕсли (КодСимв(Символ)=13) и (ПустоеЗначение(БуферШК)=0) Тогда ОбработатьШтрихкод(БуферШК); БуферШК=""; Иначе БуферШК=""; КонецЕсли; КонецПроцедуры спНажатыхКлавиш=СоздатьОбъект("СписокЗначений"); ПропустиьСимвол=""; ВСХ=СоздатьОбъект("WScript.Shell"); БуферШК=""; Нужен загруженный формекс. Чуствительность задается в строке ТаймАут=?(ПустоеЗначение(БуферШК)=1,30,3000); Где 30 - время между нажатием и отжатием клавиши (практический тест показал что человек не может выполнить эту операцию быстрее 50мс, а сканер может) - на этом и основан метод перехвата 3000 - время между нажатиями клавиш. Для локального использования 500 мс с головой, для удаленки через rdp - можно увеличить. ОбработатьШтрихкод(БуферШК); - вызов обработчика. Тут можно применить формекс и сгенерировать внешнее событие, которое автоматом обработается в стандартных конфигурациях. Этот код заточен под ситуацию, когда в сканере настроен суффикс "ентер" и нет возможности настроить префикс (таких сканеров много в китае). При наличии префикса - код можно упростить. |
|||
33
Злопчинский
07.07.15
✎
00:55
|
(0) "Долбился я день, у меня уже начинает подгорать, директор чувствую с дня на день, пристроится с сзади"
. директора гони нафиг ;-) объясни популярно, что песни по заказу партии и правительства пишутся только у тех, кто обласкан квартирами в париже, дачами на мальдивах и багаттями под окном - которые охраняет личный привратник... |
|||
34
Козаностра
07.07.15
✎
09:36
|
Злопчинский, большего я пока не достоин, оклад 10610 RUB
FN - Благодарю, попробую И благодарю всех отписавшихся |
|||
35
Garykom
гуру
07.07.15
✎
09:53
|
(34) ага попробуй через formex (32) это нормальная варианта типа (13)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |