1с addin scanner не подключается
Внешний компонент "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
Возвращаемые события
В случае успешного получения данных от устройства компонента кодирует их соответствующим образом (Строка, Base64) и передает в 1С:Предприятие в виде одного из следующих событий:
В свое время писал статью про подключение сканера к 1С БП 2.0. Тема оказалась очень актуальной. На сегодняшний день довелось мне подключаться к БП 3.0. Ситуация другая, поэтому делюсь опять же своим опытом.
Итак, управляемые формы, 1С 8.3. За основу брал конфигурации:
Бухгалтерия предприятия, редакция 3.0 (3.0.43.124)
Библиотека подключаемого оборудования, редакция 1.2 (1.2.3.4)
В бухгалтерии включаем возможность изменения у общих модулей МенеджерОборудованияКлиентПереопределяемый и МенеджерОборудованияВызовСервераПереопределяемый.
Объединяем с конфигурацией из библиотеки подключаемого оборудования. Я убрал все галки и проставлял нужные мне вручную. Надо поставить галку на объединении с модулями МенеджерОборудованияКлиентПереопределяемый, МенеджерОборудованияВызовСервераПереопределяемый и отфильтровать по нужной подсистеме. В данном случае я отфильтровал(правильнее будет отметил) по подсистеме СканерыШтрихкода. Правда почему-то в моей версии БПО при фильтрации по СканерамШтрихкода не отметился общий модуль ПодключаемоеОборудованиеСканкодСканерыШтрихкодаКлиент(при том что макет с соответствующим драйвером отметился). Пришлось отметить его вручную.
В итоге наша конфигурация дополняется несколькими общими модулями, формами, макетами и картинками, которые связаны с работой сканера штрих кода.
В модуле МенеджерОборудованияКлиентПереопределяемый подправляем функцию ПолучитьОбработчикДрайвера, чтобы убрать лишнее. Мне нужен был только сканер, поэтому я оставил лишь:
Кроме того оставляем строки касаемые фискальника, т.к. он заложен в бухгалтерии.
В модуле МенеджерОборудованияВызовСервераПереопределяемый при объединении я не стал заменять функцию ДоступноИспользованиеРазделенныхДанных.
Подчистил в этом модуле процедуру ОбновитьПоставляемыеДрайвера. Я оставил опять же только то, что касается сканера (плюс фискальник):
А так же функцию ПолучитьДоступныеТипыОборудования
Для того, чтобы в пользовательском режиме появились необходимые драйверы надо выполнить команду:
Это можно сделать, допустим, во внешней обработке.
После запуска этой команды можно будет в разделе Подключаемое оборудование подключить сканер.
Далее надо организовать работу сканера. Для этого в форму, в которой должен работать сканер помещаем процедуры:
Не забываем прописать процедуры ПриОткрытии и ПриЗакрытии в свойствах формы. После этого в данной форме можно ловить ВнешнееСобытие формы.
В типовых конфигурациях и в той же БПО ловится не ВнешнееСобытие, а процедура ОбработкаОповещения. Чтобы работать через ОбработкаОповещения надо в модуле управляемого приложения добавить процедуру из БПО:
При сканировании сначала вызывается процедура ВнешнееСобытие в форме, потом процедура ОбработкаВнешнегоСобытия в модуле приложения и после этого срабатывает ОбработкаОповещения.
Лично я не стал заморачиваться и трогать типовой модуль бухгалтерии и остановился просто на внешнем событии формы.
Решение проблем с регистрацией внешних компонент в терминале
При этом пользователи видят, например, картинку представленную в анонсе статьи.
В то время как при работе с локальных компьютеров никаких проблем с подключением внешних компонент нет.
С чем это связано? Это связано с тем, что, когда пользователи работают через сервер терминалов, они имеют меньше прав, чем при работе на локальном компьютере.
В этом легко убедиться, если зайти на сервер терминалов под учетной записью с административными правами.
Причина такой разницы заключается в том, что 1С не может зарегистрировать внешнюю компоненту в реестре, когда пользователь работает в терминале под обычными правами, т.к. у обычного пользователя нет прав на запись в ветку системного реестра HKEY_CLASSES_ROOT.
В публикациях на тему подключения внешних компонент в терминале предлагаются самые разные методы решения этой проблемы.
1. Запустить первый раз 1С под административными правами.
Этот вариант далеко не всегда срабатывает. Ниже объясню, почему.
2. Дать обычным пользователям терминала права на запись в ветку системного реестра HKEY_CLASSES_ROOT.
Недостаточно "продвинутым" пользователям лучше этого не делать, иначе могут быть проблемы.
3. С помощью различных "примочек" регистрировать ВК от имени пользователя с полными правами.
Тоже не есть хорошо.
Так как же все таки лучше выйти из этой ситуации?
Я предлагаю свой вариант решения этой проблемы. По моему мнению - простой и красивый, не предлагавшийся на лансере ранее.
Дело оказалось в том, что в типовых конфигурациях 1С (например "Управление Торговлей") используется такой синтаксис метода глобального контекста ПодключитьВнешнююКомпоненту():
ОбъектДрайвера = Новый ("AddIn.АТОЛСканер.Scaner45");
Как видим, ВК драйвера подключается из макета "ДрайверАТОЛСканерШтрихкода" справочника "ПодключаемоеОборудование".
Что же при этом происходит?
1С сохраняет компоненту во временной папке пользователя, например "C:\Documents and Settings\User\Local Settings\Temp\1032\v8_4_12.tmp"
и пытается зарегистрировать ее в ветке реестра HKEY_CLASSES_ROOT именно по этому пути.
На терминале у обычных пользователей нет прав на изменение этой ветки реестра, поэтому компонента у них не подключается.
Теперь о том, как выйти из этой ситуации.
Метод глобального контекста ПодключитьВнешнююКомпоненту() имеет несколько вариантов синтаксиса. Вот этим мы и воспользуемся.
Итак, по шагам:
1. Регистрируем внешнюю компоненту утилитой regsvr32.exe на сервере терминалов в папке C:\WINDOWS\SYSTEM32 для 32-разрядной ОС или в папке C:\WINDOWS\SYSWOW64 для 64-разрядной ОС.
2. Используем один из двух дополнительных вариантов синтаксиса метода ПодключитьВнешнююКомпоненту():
Вариант 1:
ОбъектДрайвера = Новый ("AddIn.АТОЛСканер.Scaner45");
Вариант 2:
ОбъектДрайвера = Новый (ProgID);
На мой взгляд, вариант № 2 предпочтительнее.
При этом 1С не пытается перерегистрировать ВК по новому пути в реестре и таким образом, все проблемы решаются.
Решение проблем с регистрацией внешних компонент в терминале
При этом пользователи видят, например, картинку представленную в анонсе статьи.
В то время как при работе с локальных компьютеров никаких проблем с подключением внешних компонент нет.
С чем это связано? Это связано с тем, что, когда пользователи работают через сервер терминалов, они имеют меньше прав, чем при работе на локальном компьютере.
В этом легко убедиться, если зайти на сервер терминалов под учетной записью с административными правами.
Причина такой разницы заключается в том, что 1С не может зарегистрировать внешнюю компоненту в реестре, когда пользователь работает в терминале под обычными правами, т.к. у обычного пользователя нет прав на запись в ветку системного реестра HKEY_CLASSES_ROOT.
В публикациях на тему подключения внешних компонент в терминале предлагаются самые разные методы решения этой проблемы.
1. Запустить первый раз 1С под административными правами.
Этот вариант далеко не всегда срабатывает. Ниже объясню, почему.
2. Дать обычным пользователям терминала права на запись в ветку системного реестра HKEY_CLASSES_ROOT.
Недостаточно "продвинутым" пользователям лучше этого не делать, иначе могут быть проблемы.
3. С помощью различных "примочек" регистрировать ВК от имени пользователя с полными правами.
Тоже не есть хорошо.
Так как же все таки лучше выйти из этой ситуации?
Я предлагаю свой вариант решения этой проблемы. По моему мнению - простой и красивый, не предлагавшийся ранее.
Дело оказалось в том, что в типовых конфигурациях 1С (например "Управление Торговлей") используется такой синтаксис метода глобального контекста ПодключитьВнешнююКомпоненту():
ОбъектДрайвера = Новый ("AddIn.АТОЛСканер.Scaner45");
Как видим, ВК драйвера подключается из макета "ДрайверАТОЛСканерШтрихкода" справочника "ПодключаемоеОборудование".
Что же при этом происходит?
1С сохраняет компоненту во временной папке пользователя, например "C:\Documents and Settings\User\Local Settings\Temp\1032\v8_4_12.tmp"
и пытается зарегистрировать ее в ветке реестра HKEY_CLASSES_ROOT именно по этому пути.
На терминале у обычных пользователей нет прав на изменение этой ветки реестра, поэтому компонента у них не подключается.
Теперь о том, как выйти из этой ситуации.
Метод глобального контекста ПодключитьВнешнююКомпоненту() имеет несколько вариантов синтаксиса. Вот этим мы и воспользуемся.
Итак, по шагам:
1. Регистрируем внешнюю компоненту утилитой regsvr32.exe на сервере терминалов в папке C:\WINDOWS\SYSTEM32 для 32-разрядной ОС или в папке C:\WINDOWS\SYSWOW64 для 64-разрядной ОС.
2. Используем один из двух дополнительных вариантов синтаксиса метода ПодключитьВнешнююКомпоненту():
Вариант 1:
ОбъектДрайвера = Новый ("AddIn.АТОЛСканер.Scaner45");
Вариант 2:
ОбъектДрайвера = Новый (ProgID);
На мой взгляд, вариант № 2 предпочтительнее.
При этом 1С не пытается перерегистрировать ВК по новому пути в реестре и таким образом, все проблемы решаются.
Читайте также: