Имя: Пароль:
1C
1С v8
Внешнее событие от сканера ШК
0 Игорь_МММ
 
25.11.19
17:04
конфа самописная, 8.3, УФ. Подключил сканер ШК через COM, тест устройства проходит, сканер пищит, код в тесте печатает. Не пойму теперь как словить событие считывания шк от сканера на форме. Во внешнем событии поставил останов - не заходит, то есть внешнее событие не срабатывает. Что еще нужно? Подключал эквайринговый терминал ранее - разобрался, а тут сканер не соображу ...
1 VKS
 
25.11.19
17:08
нужно сперва сканер подключить, только потом отлавливать внешнее событие
Посмотрите как в типовой сделано. По простому: открыли форму - подключили оборудование - можем отлавливать внешнее событие - перед закрытием формы отключили оборудование
2 Игорь_МММ
 
06.12.19
17:11
А как понять от какого сканера приходит ШК? Если подключен не один сканер , а несколько? Можно получить ИдентификаторПО?
3 Garykom
 
гуру
06.12.19
17:27
(0) БПО или сам вручную подрубаешь ВК для работы с сканером или иным ТО
4 Garykom
 
гуру
06.12.19
17:31
(3)+ Одну ВК проще в самописку, БПО более функционально хоть и задолбаешься интегрировать.
5 fisher
 
06.12.19
18:22
(4) Не, БПО лучше сразу впендюрить. Очень быстро себя окупает. И особых сложностей с интеграцией там вроде нету... Это не БСП.
Единственное, не знаю как в текущей версии, а какую-то прошлую мне пришлось перепиливать на привязку чисто к компу, а не на комбинацию комп/пользователь. Слишком муторно жить с такой привязкой, когда народу много и они текут. Обычно же нет необходимости, чтобы на одном и том же компе с торговым оборудованием люди с разными привязками работали. Не могу понять, зачем так сделали.
6 Fragster
 
гуру
06.12.19
18:24
(4) "задолбаешься" это "прочитаешь инструкцию и за 10 минут все выполнишь"?
7 Garykom
 
гуру
06.12.19
18:28
(6) ВК подрубить 2 минуты и все работает.
Насчет "10 минут на внедрение БПО" - не верю. Тем более человеком который про БПО впервые слышит как и интеграцию с ТО.
8 Aleksey
 
06.12.19
18:30
(5) Для терминальных юзверей?
9 fisher
 
06.12.19
18:31
(8) Об этом я как-то не подумал :) Ну, могли бы рубильник на это дело поцепить.
10 Fragster
 
гуру
06.12.19
18:36
(5) я себе сделал заляпуху, чтобы можно было пустое рабочее место указывать, поскольку везде используется клавиатурный сканер. ну и оставил тему, что если его указать - используется набор оборудования из указанного места. Тогда получается, что если рабочее место не получилось определить - то используется "общий" набор оборудования, а если получилось - индивидуальный.
11 fisher
 
06.12.19
18:39
(7) Может и не 10 минут. Документация по БПО скудновата. Но сложного точно ничего нет. А окупается сразу же, как только появляется больше одной модели ТО :)
(10) Не, в моем случае "общий" проблему не решал. На разных компах разные наборы ТО.
12 Fragster
 
гуру
06.12.19
18:53
(7) сравнить/объединить по инструкции, запустить обработчик заполнения драйверами из макетов, прописать обработчики по образцу из демо базы?
13 Garykom
 
гуру
06.12.19
18:56
(12) Полчаса (на все про все) для уже имеющего опыт или пара часов для нуля.
Когда ВК имхается уже лежит в папочке ExtCompT и достаточно ее подрубить правильно (несколько строчек) и события начнут сыпаться в обработчик.
14 Garykom
 
гуру
06.12.19
18:59
Блин я не против БПО - оно замечательно когда надо много разных штук юзать.
Но если не надо и не надо раздувать конфу то нахрена?
15 Игорь_МММ
 
06.12.19
19:56
БПО у меня внедрено. Таки как понять от какого устройства событие?
16 такт
 
06.12.19
20:19
в типовых нативный драйвер отрабатывает событие в модуле приложения и оповещает открытую форму
17 MWWRuza
 
гуру
06.12.19
20:46
Не знаю чего там в БПО и вообще в типовых накручено... Я в своей самописке вот так сделал:

В модуле формы документа:

&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
    Если ВводДоступен() Тогда
        Если Источник = "BarCodeScaner" Тогда
            ШтрихКод = Лев(ДрайверСканШК.Данные,13);
            НайденныйТов = ОбщиеПроцедурыФункции.НайтиТоварПоШК(ШтрихКод);
            ДрайверСканШК.УдалитьСообщение();
            ДрайверСканШК.DataEventEnabled = 1;
            Если НайденныйТов.Пустая() Тогда
                ПоказатьПредупреждение(,"Товар со ШтрихКодом " + СокрЛП(ШтрихКод) + " не найден!");
                Возврат;
            Иначе    
                ДобавитьТовИлиУвКоличество(НайденныйТов);
            КонецЕсли    
        ИначеЕсли Источник = "MagneticStripeCardReader" Тогда
            КодКарты = Лев(ДрайверСканШК.Данные,13);
            Если Не Объект.Проведен Тогда
                НайтиКлиента(КодКарты,"");
            КонецЕсли;
            ДрайверСканШК.УдалитьСообщение();
            ДрайверСканШК.DataEventEnabled = 1;
            Для каждого Стр Из Объект.ТЧ Цикл
                Пересчет(Стр,"ТЧ",Объект.Клиент);    
            КонецЦикла;
        КонецЕсли;
    Иначе    
        Возврат;
    КонецЕсли;
КонецПроцедуры

В общем модуле, "РаботаСТорговымОборудованием":

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

В модуле управляемого приложения:

Перем ДрайверСканШК Экспорт;            // Сканер штрихкодов

&НаКлиенте
Процедура ПриНачалеРаботыСистемы()
    Если ОбщиеПроцедурыФункции.ПроверитьРабСоСканером() Тогда
        Рез = РаботаСТорговымОборудованием.ПодключитьСканер();
        Если Рез = Ложь Тогда
            ПоказатьПредупреждение(Неопределено, "Не удалось подключить сканер и картридер, проверьте настройки!");
        КонецЕсли;
    КонецЕсли;
// Тут еще всякой лабуды куча, но, к нашей задаче это не относится...
КонецПроцедуры

Да, может это и "изобретение велосипеда", зато просто и понятно. И, главное - работает! :-)))
18 Игорь_МММ
 
06.12.19
21:24
(17) так когда у вас один сканерШК - тогда все понятно. Я-то о чем: допустим у вас подключено 10 сканеров: как определить с какого сканера пришел ШК?
19 MWWRuza
 
гуру
06.12.19
21:55
Ну, да, у меня один сканер и один картридер, различаются по имени внешнего события...

А можно чуть-точнее сформулировать задачу, для чего к одному рабочему месту десять сканеров подключать? Может как-то по другому это решается? Или Вы терминальные сессии считаете? Там этих проблем нет, для каждого терминального клиента свой проброс порта, и для каждого сеанса 1С будет свой сканер, хоть 100 клиентов со своими сканерами к серверу подключатся, все будет работать для каждого клиента, как будто он один работает...
20 Игорь_МММ
 
06.12.19
22:10
Задача такая: есть деталюшка с шк, едет она по участкам обработки: 1. сначала отрезали 2. потом просверлили 3. потом покрасили
4....   N. упаковали . На каждом участке сканер: пикнул - деталь прошла участок. Соответственно ШК везде один - нужно понять откуда пришел этот ШК, с какого участка.

Неужели нельзя отследить с какого порта пришел ШК? Я, пока сканер не подключил, смотрел на ВнешнееСобытие(Источник, Событие, Данные) - все вроде ок, и источник есть и данные. Ан нет) Источник, млин, строка "СканерыШтрихкода" и  ... опа)
21 Garykom
 
гуру
06.12.19
22:14
(20) Для вашей нестандартной задачи нужна не стандартная ВК, которая умеет передавать во внешнее событие номер порта сканера.
Короче имхается придется самому писать это или кому то заказывать.
22 Garykom
 
гуру
06.12.19
22:15
(21)+ Хотя все проще же! Настрой подставляемые префиксы в ШК, уникальные для каждого сканера.
Конечно это не на всех сканерах возможно, но вроде многие умеют.
23 такт
 
06.12.19
23:10
в типовых нативный драйвер в обработке события в модуле приложения показывает имя устройства
24 такт
 
06.12.19
23:12
+23 сканер клавиатурный, т.е. в конкретный компьютер их можно много натыкать
25 MWWRuza
 
гуру
06.12.19
23:32
Хм...
"Задача такая: есть деталюшка с шк, едет она по участкам обработки:"
А деталюшки одинаковые, или каждый раз разные, с разными ШК-? Если разные, то сколько разновидностей(порядок)-?
Может там вообще сканеры не нужны, достаточно кнопок?
Или каждый экземпляр "деталюшки" со своим, уникальным ШК-?
26 Злопчинский
 
07.12.19
05:06
(20) каждый сканер на участке работает под конкретным разным юзером на каждом рабочем месте.

я как-то малость туплю представить что 10 сканеров подключены под одним пользователем (и виндявым и 1Сным) к одному сеансу 1С...
???
27 Игорь_МММ
 
07.12.19
22:22
(26) думаю ваш вариант самый оптимальный
(22) ограничивать пользователей сканерами с назначаемым префиксом - это не феншуй
28 Сияющий в темноте
 
07.12.19
23:48
зачем пользователи и зачем 1с.
сканеры в usb порты миникомпьютера и писать программу читающую данные через RawInput,там в каждом пакете будет идентификатор устройства.
а уже из программы можно на web-сервис 1с данные передавать.