1С Предприятие 7.7. Работа со сканером штрих-кодов в 2-ух базах(запущены на 1 машине) #415847


#0 by skam
Имеется 2 одновременно запущенные базы 1С Предприятие 7.7 на одной машине. В панели задач соответственно 2 закладки. Как отловить момент перехода/переключения между 2-мя базами/1С. Для чего нужно: необходимо реализовать работу сканера штрих-кодов в 2-ух базах запущенных на одной машине. Сканер подключен в usb порт (емуляция COM порта). Программно можно включить и отключить устройство (сканер штрих-кодов). Соответственно когда переходим в другую базу необходимо отключить устройство в первой базе. Может существуют еще какие-то способы? Буду благодарен за советы!
#1 by ТелепатБот
#2 by у лю 427
с одним сканером - никак. ставь 2 сканера
#3 by АЛьФ
А зачем его отключать в "первой базе"? Насколько я понимаю, инфа от сканера будет падать в то окно, которое активно в данный момент. А сколько у тебя баз запущенно сканеру фиолетово.
#4 by Оболтус
Сколько раз сталкивался - работает только в первой запущенной программе. Если её свернуть и открыть вторую - работать не будет.
#5 by mishaPH
юзайте не ком портовые а в разрыв клавиатуры
#6 by у лю 427
не прав, если сканер ком или УСБ - драйвер орет, что порт занят другой программой. в разрыв клавы - может и будет работать, но я такие не рекомендую...
#7 by AcaGost
Подключай сканер только при открытии документа. При закрытии отключай.
#8 by skam
Это идея но в моем случае не подходит. У меня все документы создаются обработками. Тоесть например открыта база /Магазин 1/ и база /Магазин 2/. В 1-ой и во 2-ой базе открыта обработка /Продажа изделия/. Когда сканируют штрих код, изделие автоматически попадает в эту обработку/форму. Можно вручную перед переходом отключать устройство (сканер) в 1-ой базе и включать во 2-ой. Тогда работает. Но это не очень удобно. Нужно сделать что бы было автоматически. Может как-то можно отловить какая 1С сейчас активна из закладок на панели задач?
#9 by AcaGost
Используй ОбработкаОжидания и Олю
#10 by у лю 427
неудобно. Сканер используется не только для подбора в доках, но и поиска в справочнике и еще где то....
#11 by AcaGost
Там и подключай
#12 by skam
Что каждую секунду юзать ОбработкуОжидания, просто у меня уже каждый час работает ОбработкаОжидания и выйдет что та перекроет ету? Через Олю я и делаю. Вот только как посмотреть какая 1С активная в данный момент?
#13 by AcaGost
ПриПовторномОткрытии формы
#14 by AcaGost
Используй Форма.ОбработкаОжидания и Олю
#15 by у лю 427
в типовой ТиС щелкаешь сканером по товару при всех закрытых окнах - открывается какая то форма с ценой. Типа у кассира спросили почем - он ответил...
#16 by AcaGost
->
#17 by Timaaa
По-моему ПриПовторномОткрытии запускается, если форма уже открыта, а ты в еще раз ее открываешь (из журнала)... как можно олей посмотреть, "какая 1С" в данный момент активна? у меня похожая проблема :)
#18 by skam
Я использую ОЛЕ для отключение устройства в другой базе. А определить какая 1С активна в данный момент пока не получилось. Форма.ОбработкаОжидания Я сделал так:    Форма.ОбработкаОжидания(МетодДляВызова,1); дает возможность каждую сек. запускать определенную процедуру и при етом не перекрывает ОбрботкуОжидания в глоб. модуле. Это порадовало! 14 посту Спасибо! ;)
#19 by AcaGost
Добавь константу. Текстовик на форме - константа = 1, а по Оле в другой базе - 0
#20 by ValeriTim
Слушайте, а почему все включают ЮСБшный сканер как эмулятор СОМ ? У меня работает без всяких драйверов как в разрыв клавиатуры и ему глубоко фиолетово какая программа в данный момент активная - все передается в нее ... Зачем нужна эмуляция СОМ ? ну никак не пойму ...
#21 by skam
А как отлавливать событие от сканера? Если разрыв клав. то ОбработкаВнешнегоСобытия не видит событие от сканера. На сколько я помню если использовать разрыв клав. то считанные данные попадают только в поле ввода (элемент формы).
#22 by Serginio1
Наверное придется делать приложение читающее ком порт и предавать полученному через GetForegroundWindow (или еще как есть варианты), подключенным к нему через ОЛЕ клиентам, которые и предатут ему свои хэндлы. ВК клиентов подсоединяются в своем потоке к Серверу, получают данне вызывают ОбработкуВнешнегоСобытия. А проще купить второй сканер.
#23 by Serginio1
Либо передавать сообщения всем клиентам, а они уже сами определят кто активен.
#24 by Злопчинский
(20,21) если юзать в разрыв клавы - то действие на сканирование будет зависеть от того на каком элементе формы находится фокус в момент сканирования, а также и от суффикса сканнера (если это "энтер" - то может много чего произойти....)
#25 by Serginio1
Проще из ВК подключится к серверу чтения из ком порта, передать в него IAsyncEvent и хэндл окна, а в сервере получить активное приложение, и если оно есть в списке вызвать IAsyncEvent.ExternalEvent. Возможно ошибаюсь
#26 by ValeriTim
Ээээээ ... :) Вы кошек не любите ? Так вы не умеете их готовить ... :) Вы просто не хотите немного подумать - у меня стоит 8.1 Розница, там по нажатию клавиши F7 выскакивает окошко для ручного набора штрихкода. Я перепрограммировал сканер - добавил ему префикс. Т.е. сейчас со сканера приходит F7штрихкодEnter - Получается что сначала вызывается то самое окошко, туда попадает код и нажимается ввод. Соответственно мне _вообще_ не надо подключать сканер к 1С. Вот и все ... :)
#27 by ValeriTim
Скажите что я делаю не так ?
#28 by Timaaa
У тебя просто в частном случае все хорошо работает, а вот если тебе надо было ОБЯЗАТЕЛЬНО использовать ОбработкаВнешнегоСобытия? Например: распознавать штрихкод по префиксу (документ, товар, юзер и тд). Вот зачем эмуляция.
#29 by Timaaa
Что-то я не понял идею, можно поподробнее?
#30 by ValeriTim
И что мне мешает ? В программу сканер передает _полный_ штрихкод для EAN13 - соответственно все 13 цифр, по этому мне никто не мешает его потом разбирать, а префикс который использую я это немного другое - читайте описания сканера.
#31 by ValeriTim
+ причем префикс который использую я не зависит от считываемого штрихкода, соответственно будет работать на всех типах, поддерживаемых сканером.
#32 by Timaaa
Например: Библиотека. На форме документа есть 2 поля ввода: 1. читатель 2. книга Оба поля надо заполнять со сканера. ТЕ штрихкоды книг и читателей имеют разный префикс. Как ты определишь, куда совать считанный ШК, если (как сказано в ) не можешь использовать ОбработкуВнешнегоСобытия?
#33 by skam
. Например имеется обработка где нужно использовать сканер, при открытии этой обработки я прописал код в посте , после этого каждую секунду будет выполнятся процедура задана в Форма.ОбработкаОжидания(библиотека 1CPP.dll/FormEx.dll) и которая находится/прописана в модуле этой обработки. А вот в этой процедуре не плохо было бы определять какая 1С/форма сейчас активна и если сканер в этой базе отключен то мы его подключаем, если он подключен во второй базе мы его сначала отключаем во 2-ой базе, средствами ОЛЕ, а потом подключаем в 1-ой.
#34 by Timaaa
:) в опечатка, я не понял идею в
#35 by skam
+1. :)
#36 by ValeriTim
Все опять же очень просто - создаем на форме кнопку и назначаем ей клавишу F7. По этой кнопке выскакивает окошко с единственным полем для ввода штрихкода, по нажатию Enter - обработчик, который и проверяет префикс штрихкода. :) Я так и не могу понять необходимость COM эмуляции ...
#37 by Timaaa
Действительно, если не доп. настройку сканера + кнопку на форме, то получается чтьо-то типа ОбработкиВнешнегоСобытия. А с невидимой кнопкой будет работать? :)
#38 by Timaaa
если не считать*
#39 by АЛьФ
2 А именно чтоб окошки всякие не выскакивали. Эмуляция ввода с клавиатуры (о которой ты говоришь) - это тоже не фонтан.
#40 by Serginio1
Проверил для интереса GetAppMainFrame совпадает с GetForegroundWindow из любого приложения
#41 by ValeriTim
, Весь процесс происходит настолько быстро, что этого окошка и незаметно, к тому же посмотрите как сделано в Рознице 8.1 - окошка у меня и не видно. "не фонтан" обоснуй.
#42 by ValeriTim
С невидимой и работает. :)
#43 by Timaaa
Ну в рознице как я понял только 1 поле
#44 by ValeriTim
О каком поле идет речь ?
#45 by rs_trade
Способы есть. Избегать подобных схем работы....
#46 by Timaaa
Насколько я понял по твоим словам, в рознице у тебя только 1 поле, куда попадает ШК. Там окошко и не нужно
#47 by ValeriTim
Я не менял конфигурацию, а только подстроил сканер штрихкода под нее, так что окошко всеравно присутствует.
#48 by ValeriTim
+ там нету поля - там табличная часть, в которую заполняется номенклатура. Причем табличная часть не доступна для редактирования, так что ... :)
#49 by Timaaa
Не помню точно всех окошек, разговор вообще не об этом был:) Я понял, что ты можешь реализовать работу ЮСБ сканера, эмуляцией ввода с клавиатуры. Но получается все равно как-то кривовато ИМХО
#50 by Timaaa
Мы отошли от темы. Кто-нибудь понял, что именно предлагается в ?
#51 by ValeriTim
Он и так работает как эмуляция ввода с клавиатуры (по умолчанию) "кривовато" обоснуй.
#52 by ValeriTim
+ Зато включение/отключение устройств по ОЛЕ, левые константы на форме, ОбработчикиОжидания на форме это "прямовато" ? :)
#53 by the 13th
подключение сканера через разрыв клавиатуры (или эмуляцию разрыва) + драйвер от Атол и все прекрасно работает через обработку внешнего события
#54 by skam
Событие есть, вот только данные передаются не полностью. Например считал штрих код 00-02544Н, а получил только последний символ Н.
#55 by Timaaa
Кстати... около года назад автоматизировал библиотеку, там точно использовал ОбработкуВнешнегоСобытия, и смутно помню, что  сканер был клавиатурный. Точно ли в правда написана? :)
#56 by skam
Привожу скрипт которым можно отследить заголовок активного приложения, загнать его в Форма.ОбработкаОжидания и можем получать какое приложение активно в данный момент. Правда если открыто 2 базы с одинаковым заголовком, нужно смотреть еще хэндл, который получаем через GetForegroundWindow. ТекстСкрипта = "Function VBSFunction
#57 by skam
+ взято с
#58 by Serginio1
Можно повесить Хук и отлавливать ативацию приложения и вызывать обработку внешнего события. Но сделать чтение ком порьа и сообщить его значение активному окну.    case cwps.message of      WM_ACTIVATEAPP: end.
#59 by Serginio1
Ghb cwps.wParam=0 Неактивно case cwps.message of      WM_ACTIVATEAPP:
#60 by а лю 427
столько сложностей.... проще купить второй сканер и не трахаЦЦо
#61 by AcaGost
Поясняю. 1) Добавь константу - "ПриложениеАктивно" 2) На форму твоего документа, обработки, формы списка, в общем на ту форму ,которая всегда активна, добавь текстовик с функцией, отлавливающей изменения. Эта функция будет тебе устанавливать константу в "1", одновременно по Оле в другой базе эту же константу в "0" А далее Форма.ОбработкаОжидания
#62 by skam
Можно исключить использования ОЛЕ. Отключать сканер в 1С сразу если оно не активно, и подключать когда активно.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С