1с не срабатывает обработка оповещения сканер штрих кода

Обновлено: 08.05.2024

В свое время писал статью про подключение сканера к 1С БП 2.0. Тема оказалась очень актуальной. На сегодняшний день довелось мне подключаться к БП 3.0. Ситуация другая, поэтому делюсь опять же своим опытом.

Итак, управляемые формы, 1С 8.3. За основу брал конфигурации:
Бухгалтерия предприятия, редакция 3.0 (3.0.43.124)
Библиотека подключаемого оборудования, редакция 1.2 (1.2.3.4)

В бухгалтерии включаем возможность изменения у общих модулей МенеджерОборудованияКлиентПереопределяемый и МенеджерОборудованияВызовСервераПереопределяемый.

Объединяем с конфигурацией из библиотеки подключаемого оборудования. Я убрал все галки и проставлял нужные мне вручную. Надо поставить галку на объединении с модулями МенеджерОборудованияКлиентПереопределяемый, МенеджерОборудованияВызовСервераПереопределяемый и отфильтровать по нужной подсистеме. В данном случае я отфильтровал(правильнее будет отметил) по подсистеме СканерыШтрихкода. Правда почему-то в моей версии БПО при фильтрации по СканерамШтрихкода не отметился общий модуль ПодключаемоеОборудованиеСканкодСканерыШтрихкодаКлиент(при том что макет с соответствующим драйвером отметился). Пришлось отметить его вручную.
В итоге наша конфигурация дополняется несколькими общими модулями, формами, макетами и картинками, которые связаны с работой сканера штрих кода.

В модуле МенеджерОборудованияКлиентПереопределяемый подправляем функцию ПолучитьОбработчикДрайвера, чтобы убрать лишнее. Мне нужен был только сканер, поэтому я оставил лишь:


Кроме того оставляем строки касаемые фискальника, т.к. он заложен в бухгалтерии.

В модуле МенеджерОборудованияВызовСервераПереопределяемый при объединении я не стал заменять функцию ДоступноИспользованиеРазделенныхДанных.
Подчистил в этом модуле процедуру ОбновитьПоставляемыеДрайвера. Я оставил опять же только то, что касается сканера (плюс фискальник):

А так же функцию ПолучитьДоступныеТипыОборудования

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


Это можно сделать, допустим, во внешней обработке.
После запуска этой команды можно будет в разделе Подключаемое оборудование подключить сканер.
Далее надо организовать работу сканера. Для этого в форму, в которой должен работать сканер помещаем процедуры:

Не забываем прописать процедуры ПриОткрытии и ПриЗакрытии в свойствах формы. После этого в данной форме можно ловить ВнешнееСобытие формы.

В типовых конфигурациях и в той же БПО ловится не ВнешнееСобытие, а процедура ОбработкаОповещения. Чтобы работать через ОбработкаОповещения надо в модуле управляемого приложения добавить процедуру из БПО:

При сканировании сначала вызывается процедура ВнешнееСобытие в форме, потом процедура ОбработкаВнешнегоСобытия в модуле приложения и после этого срабатывает ОбработкаОповещения.
Лично я не стал заморачиваться и трогать типовой модуль бухгалтерии и остановился просто на внешнем событии формы.

Leschyu --> Leschyu



Просмотр профиля Vidocq05 --> Vidocq05



Просмотр профиля для того, что бы ОбработкаВнешнегоСобытия сработала нужно нажать любую клавишу либо кликнуть мышкой
Она точно не срабатывает? В отладчике проверяли? Возможно она сработала и нужно просто обновить форму, или еще что то. Leschyu --> Leschyu



Просмотр профиля Vidocq05 @ Сегодня, 13:28 ,
Проверял в отладчике. Срабатывает только после клика или нажатие какой либо клавиши. Vidocq05 --> Vidocq05



Просмотр профиля Leschyu @ Сегодня, 14:03 ,
Что находится в "Источник", "Событие", "Данные"? Leschyu --> Leschyu



Просмотр профиля sava1 --> sava1



Просмотр профиля batlcat --> batlcat



Просмотр профиля

Версия библиотеки какая (версия драйвера) .

Вроде как в ноябрьской что то исправляли касаемо работы в Linux

Leschyu --> Leschyu



Просмотр профиля batlcat --> batlcat



Просмотр профиля

Leschyu @ Сегодня, 16:07 ,
lsusb

И посмотреть что он отдает

sudo tail -f /dev/[порт на который он зацепился]

Vidocq05 --> Vidocq05



Просмотр профиля Leschyu @ Сегодня, 16:07 ,
По видимому с драйвером косяк. По драйверу ничего не подскажу. Leschyu --> Leschyu



Просмотр профиля batlcat @ Сегодня, 16:27 ,
Там он все нормально отдает.
Vidocq05 --> Vidocq05



Просмотр профиля

Leschyu @ Сегодня, 16:57 ,
Из просторов интернета:

Сам сканер ШК при сканировании генерит КОД, который может состоять собственно из самого ШК и префикса с суффиксом. Для того, чтобы сработало "внешнее событие" и ОбработкаВнешнегоСобытия() - должен быть в настройках программы(драйвера) корректно описан СУФФИКС ШК - т.е. спец.символ(последовательность спец.символов), которые "говорят" что ШК "закончился". можно его "обрабатывать". т.е.
- со сканера идет: <Префикс><ОтсканированныйШК><Суффикс>;
- <Префикс> и <Суффикс> настраиваются по книжке с настройками сканера;
- если правильно В ДРОВАХ настроены <Префикс> и <Суффикс> (т.е. такие же, как у сканера), то дрова их отбрасывают, оставляя <ОтсканированныйШК> для 1С-ны.
- если правильно В ДРОВАХ настроен <Суффикс>, то по его приходу и генерится "Внешнее событие". Иначе - ждем это событие до второго пришествия.
- <Суффикс> - это символ(спец.код), который говорит компу о том, что переданная от железа последовательность закончилась;
- <Префикс> - символ, позволяющий отличать "нашу" последовательность (со сканера) от "не нашей" (с фиг знает еще какого устройства) или, например, <префикс> можно использовать чтобы отличать наши "внутренние" ШК от ШК производителей/поставщиков.

Leschyu --> Leschyu



Просмотр профиля Vidocq05 @ Сегодня, 17:05 ,
В настройках оборудования выставлен суффикс 13 (CR). Такой же я при помощи штрих кодов забил в сканер.
Пытался заставить работать с другим суффиксом (выставлял и в настройках, и забивал в сканер) - безрезультатно. Либо не работает вообще, либо так же ждет нажатия клавиши или клика. twilight_dream --> twilight_dream



Просмотр профиля

Привет, мемберы. Работаю админом в одной небольшой компании и столкнулся с такой бедой: с каждым днём у пользователей начинает переставать работать сканер штрих кода, и это число увеличивается в арифметической прогрессии, словно чума.

Ошибка в 1с: «Не удалось подключить устройство 1с, сканеры штрихкода. Проверье устройство. (999)»

«Снова приехал супервайзер и открыл вторую 1с, я же говорил этого не делать!» - подумал я. И очень расстроился, когда после закрытия всех клиентов проблема не устранилась. Стоит ли говорить, что после всех танцев с переподключением и ребутами ничего не решается. Пользователи готовы меня разорвать,а я начинаю сомневаться в своих интеллектуальных способностях!

Я уже даже всех клиентов с сервера 1с покидал, не помогает.

Судя по коду ошибки, что-то захватывает порт и не даёт 1с-ки его использовать.

В блокнот, кстати, тоже не сканится. Пикает штрих 1 раз и сканер отключается, а включается только после переподключения.

Сканер компьютером определяется.

Сканер: атоловский, 1с: Предприятие розница 2.2, Дистр: убунту

В оборудование 1с выставлено: клавиатура, суффикс 13, драйвера установлены нативные.

Призываю всех гуру 1с и убунту на пленум, не хотелось бы в кризис потерять работу :)

З.Ы. перелопатил гугл и яндекс, но решения не нашёл


Ты бы модели оборудования хоть указал.


Судя по коду ошибки, что-то захватывает порт и не даёт 1с-ки его использовать.

Так поищи кто, если tcp то netstat если ком то lsof, ну или по /proc погрепать.

Ты б хоть версию ОС написал

Спасибо, что ответил. Прописал эти команды: что тут нужно искать?

Смотри, в линуксе всё есть файл. Поэтому устройство - тоже файл. В директории /dev находится список файлов-утройств, которые подключены к данной машине.

Утилита lsof показывает список открытых файлов и кто его открыл. Com-порты открываются монопольно, поэтому кто-то открывший не даст открыть твоей жопе-Одина его второй раз.

Пишешь в терминал lsof или lsof | grep имяфайла и смотришь кто.

Ага, понял.Спасибо за подробное объяснение, кажется, я близок. А как здесь должен называться мой сканер ?


В блокнот, кстати, тоже не сканится.

В оборудование 1с выставлено: клавиатура

Убедись, что сканер не в режиме эмуляции ком порта работает. Вдруг по-дефолту он в rs232 настроен, и где-то у тебя штрихкод совпал с кодом сброса на заводские настройки.

Если в режиме клавиатуры - он в любом случае тебе будет «в блокнот» сканировать. Это не проблемы 1С.

Если только какой-то из процессов перехватывает весь ввод с клавиатуры, но тогда и с клавиатуры ты ничего не введёшь.

Вот, скорее всего его что-то перехватывает. Сейчас ищу что

Выставлена клавиатура, подключаю по ЮСБ



Можно проверить что это не удев с MM :)

udevadm info –query all /dev/ttyЧТОТАМУТЕБЯ

Если там есть что-то начинающееся с ID_MM_ (например ID_MM_CANDIDATE) эт значит, что udev при регистрации девайса запускает на нем пробер модема :) Может так совпадает, что в это время его пытается поюзать что-там-у-тебя. Есть еще похожая хрень с gprs, MTP и прочим..

Нет, эту статью я не находил. Вот что там нашёл, похоже на мою проблему: 7.10 видит устройство как USB HID v1.00 Keyboard, включает его, но когда вы сканируете действительный штрих-код, он выключается и не выводит штрих-код. usbkbd.ko был загружен, но все еще не работал.

Old Fix (ломает USB клавиатуры и мыши)

Если вы измените файл черного списка modprobe (/etc/modprobe.d/blacklist) и измените строки драйвера USB-ввода, чтобы они выглядели так:

Идеальное исправление для конечного пользователя не должно мешать другим устройствам использовать драйвер usbhid. Debian фактически создал скрипт с именем check_driver специально для этой цели. Добавление следующей строки решило проблему в моей системе, не отказываясь от моих продвинутых устройств USB HID:

KERNEL == «event 3 *», SYSFS == «04b4», SYSFS == «bca1», ACTION == «add», RUN + = "/ lib / udev / check_driver usbkbd $ devpath $ env "

Первый способ ломает мышку и клаву, хочу попробовать второй. Но немного не понял, куда нужно вписать эти строчки. Есть мысли ?

Внешний компонент "1С:Сканер штрихкода" (Native) версия для платформы "1С Предприятие 8.3".

Внешний компонент "1С:Сканер штрихкода" (Native) для платформы "1С Предприятие 8.3" поставляется в составе "Библиотеки подключаемого оборудования" (далее - БПО). "1С:Библиотека подключаемого оборудования для мобильных приложений" (далее - МБПО) и предназначен для использования ТОЛЬКО в их составе. Самостоятельное использование внешнего компонента не предусмотрено. Компонент предназначен для получения данных от оборудования – сканеров штрихкодов (далее – ШК) и передаче их в платформу "1С: Предприятие".

Основные возможности

Внешний компонент "1С:Сканер штрихкода" (Native) (далее – ВК или "1С:Сканер штрихкода") позволяет получать данные от подключенных сканеров штрихкодов и передавать их в платформу "1С:Предприятие". Компонент поддерживает следующие операционные системы (далее – ОС): Windows x32/x64, Linux (x32/x64), Android (arm, arm64, x86, x86_64), MacOS(x64). Компонент поддерживает следующие режимы подключения к сканирующему оборудованию: клавиатурный (все ОС), virtual COM (все ОС), Bluetooth (Android, Mac), Broadcast (Android).

Схема взаимодействия с оборудованием


Клавиатурный режим



Ограничения клавиатурного режима

Преимуществами клавиатурного режима является его доступность. Он является умолчанием практически для всех моделей сканеров и доступен на всех ОС. Также его легко проверить, подключив сканер и считав какой-нибудь ШК в текстовый редактор. Однако у этого режима есть и ограничения. На большинстве современных клавиатур от

80 до 110 клавиш, тем не менее, ШК может кодировать последовательность байт каждый из которых может принимать значения от 0 до 255. Т.е., в общем случае, количества клавиш на клавиатуре недостаточно для того чтобы передать данные любого ШК. Для того чтобы обойти это ограничение некоторые сканеры используют Ctrl+X или Alt+X нотацию, которые поддержаны в ВК "1С:Сканер штрихкода". Однако не все модели сканеров предоставляют такие возможности и в случае "нестандартных" значений байт данных в ШК (как правило, значения байт <32 и >127) либо не передают никаких данных, либо передают их не стандартизованной последовательностью клавиатурных событий. Поэтому, если необходимо работать со штрихкодами, содержащими не латинские символы или каким-либо образом кодированные данные (больничные листы и т.д.), то лучше воспользоваться подключением по COM, если сканер это позволяет.

"Auto CRLF"

Как правило "по умолчанию" сканеры в клавиатурном режиме настроены с суффиксом ‘CR’ (клавиша Enter), но не для всех моделей сканеров это так. Иногда суффиксом может быть ‘LF’ или ‘CRLF’. Для обобщения всех этих случаев в ВК, кроме обычных односимвольных суффиксов, предусмотрен специальный суффикс "Auto CRLF", который обозначает, что последовательность, состоящая из CRLF в любом сочетании считается суффиксом. Это может облегчить работу с настройками для некоторых моделей сканеров.

Окно "Тест"

Для проверки работы со сканером на Windows и Linux, есть возможность воспользоваться встроенным в ВК окном "Тест". Для этого нужно нажать кнопку "Тест устройства" в форме настроек компонента. Внешний вид окна представлен на следующем рисунке.


Окно тест делает попытку подключения всего доступного оборудования с заданными в форме настроек параметрами. После чего можно сканировать различные ШК, данные полученные с них будут отображаться в поле данных. Получаемая от оборудования информация может быть представлена в окне "Тест" в 3-х режимах: "Тестовом", "Рабочем" и "Отладка клавиатуры". "Тестовый" режим показывает данные от оборудования с заменой непечатаемых символов на их названия, а также названия специальных клавиш, если данные получены от клавиатуры.

Также для проверки правильности настроек сканера на форме Тест расположен проверочный ШК, отсканировав который можно понять правильность настройки сканера. В случае если настройки сканера и ВК "1С:Сканер штрихкода" настроены одинаково (совпадают настройки суффикса, префикса и специальных клавиш на сканере и в ВК), то в поле данных будет выведено "Ваш сканер настроен правильно" ("Your scaner configured correctly"). В случае, когда неправильно настроен суффикс и/или префикс будет выведено соответственно "Данные соответствуют проверочным частично."("The data correspond to the verification partly."), "Неверно настроен суффикс"("Suffix configured wrong"), "Неверно настроен префикс"("Prefix configured wrong").

Android Braodcast

Установленные настройки ВК в МБПО на ТСД Атол Smart.Lite



Настройки ТСД Атол Smart.Lite на Broadcast



Свойства

Компонента не содержит свойств.

Методы

Название (алиас) Параметры Возвращаемое значение Описание
ПолучитьНомерВерсии(GetVersion - - Метод возвращает строку текущей версии компоненты
ПолучитьОписание (GetDescription) - - Метод возвращает описание компоненты
ПолучитьОшибку (GetLastError) - - Метод возвращает последнюю ошибку при работе компоненты
ПолучитьПараметры (GetParameters) - - Метод возвращает XML документ с описанием настроечных параметров компоненты, передаваемых через метод УстановитьПараметр (SetParameter)
УстановитьПараметр (SetParameter) - - Метод устанавливает значение одного из параметров, список которых может быть получен методом ПолучитьПараметры (GetParameters)
Подключить (Open) - - Метод подключает устройство
Отключить (Close) - - Метод отключает устройство
ТестУстройства (DeviceTest) - - Метод запускает тест устройства

Настройки ВК

Начиная с 10-ой редакции драйвера "1С: Сканер штрихкодов" большинство настроек драйвера унифицировано и может быть представлено следующей таблицей. Различия составляют только специфические моменты, связанные с особенностями конкретной ОС.

Название параметра
RU/EN

Standard Intent Extra NONE Стандартный ключ intent.extraПользовательсктй Intent Extra/User Intent Extra Пользовательский ключ intent.extra (из настроек ТСД)Пользовательское Intent Action/User Intent Action Пользовательский intent.action (из настроек ТСД)Пользовательская Intent Category/User Intent Category Пользовательский intent.category (из настроек ТСД)Тип данных/Extra data type

String Тип данных используемого ключа intent.extra

Возвращаемые события

В случае успешного получения данных от устройства компонента кодирует их соответствующим образом (Строка, Base64) и передает в 1С:Предприятие в виде одного из следующих событий:


У управляемой формы есть событие ОбработкаОповещения:


Обработчик данного события находится на клиенте и выглядит следующим образом:

Процедура ОбработкаОповещения ( ИмяСобытия , Параметр , Источник )


А также обработку. На форму обработки добавим реквизит Контрагент с типом СправочникСсылка.Контрагенты и реквизит Адрес с типом Строка, доступный только для чтения. При изменении контрагента сделаем заполнение реквизита Адрес адресом из контрагента:


Создадим нового контрагента:


И выберем его на форме обработки:


Адрес заполнился автоматически. Однако, если сейчас изменить адрес контрагента, то на форме по прежнему останется старый адрес:



Вот здесь как раз можно использовать событие ОбработкаОповещения и метод Оповестить().

В модуле формы обработки добавляем событие ОбработкаОповещения:

Процедура ОбработкаОповещения ( ИмяСобытия , Параметр , Источник ) Если ИмяСобытия = "Запись_Контрагент" И Источник = Контрагент Тогда

В модуль формы контрагента, в событие ПослеЗаписи добавим следующий код:

Здесь после каждой записи выполняется оповещение всех форм об изменении контрагента. Третьим параметром передается ссылка на записанного контрагента.

Если сейчас выбрать контрагента на форме обработки, а потом изменить его адрес, то адрес автоматически обновится на форме обработки.

Нужно учитывать, что при вызове метода Оповестить() выполнение кода продолжится только после выполнения обработчика события ОбработкаОповещения во всех открытых формах. Поэтому не стоит в данном обработчике добавлять код, который может долго выполняться.

Также можно в модуле управляемого приложения или в глобальном клиентском модуле подключить процедуру, которая будет выполняться при каждом вызове метода Оповестить(). Для этого в модуле приложения добавим следующую процедуру:

Читайте также: