Как реализовать автоматическое чтение штрихкода в самописной внешней обработке 1С?

Программист Управленческий учет Торговля и дистрибуция
← На главную

При разработке внешних обработок в среде 1С:Предприятие 8.3 (особенно в современных конфигурациях, таких как УТ 11, ERP 2.x или КА 2.x) разработчики часто сталкиваются с тем, что сканер штрихкода работает только в режиме эмуляции клавиатуры. Это заставляет пользователей совершать лишние действия: нажимать клавишу F7 или вручную активировать поле ввода. Наша задача — сделать работу со сканером «бесшовной», чтобы при «пиканье» данные сразу попадали в обработку без лишних диалоговых окон. Рассмотрим, как это реализовать с помощью механизмов Библиотеки Стандартных Подсистем (БСП).

Подготовительный этап: реквизиты формы

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

  1. ИспользоватьПодключаемоеОборудование — тип Булево. Этот флаг сообщает системе, что данная форма должна взаимодействовать с драйверами оборудования.
  2. ПоддерживаемыеТипыПодключаемогоОборудования — тип Строка. Здесь мы укажем системе, что нас интересует именно сканер штрихкода.

Без этих реквизитов стандартные функции БСП (например, из модуля МенеджерОборудованияКлиент) могут отработать некорректно или проигнорировать вызов.

Программная инициализация на стороне сервера

Разберем процедуру ПриСозданииНаСервере. Нам нужно подготовить форму к работе с торговым оборудованием сразу при её инициализации. Используем возможности общего модуля конфигурации.


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Устанавливаем фильтр по типам оборудования
    ЭтаФорма.ПоддерживаемыеТипыПодключаемогоОборудования = "СканерШтрихкода";
    
    // Инициализируем настройки оборудования для данной формы
    ОбщегоНазначенияУТ.НастроитьПодключаемоеОборудование(ЭтаФорма);
    
КонецПроцедуры

Обратите внимание, что вызов ОбщегоНазначенияУТ.НастроитьПодключаемоеОборудование подготавливает внутренние структуры БСП. Если вы используете конфигурацию, где нет такого модуля, посмотрите аналогичные вызовы в типовых документах, например, в ПоступлениеТоваровУслуг.

Подключение и отключение оборудования на клиенте

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

В модуле формы добавим следующие обработчики:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
    // Включаем сканер штрихкода
    МенеджерОборудованияКлиент.ПодключитьОборудованиеПриОткрытииФормы(ЭтаФорма, "СканерШтрихкода");
    
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
    
    // Освобождаем ресурсы и отключаем сканер
    МенеджерОборудованияКлиент.ОтключитьОборудованиеПриЗакрытииФормы(ЭтаФорма);
    
КонецПроцедуры

Важный момент: если вы забудете вызвать ОтключитьОборудованиеПриЗакрытииФормы, при следующем открытии обработки вы можете получить ошибку «Устройство заблокировано». Это происходит потому, что сеанс 1С продолжает удерживать соединение с драйвером.

Обработка события сканирования

Теперь выясним, куда попадают данные после физического сканирования. Когда сканер настроен правильно, он генерирует оповещение. Мы должны перехватить его в процедуре ОбработкаОповещения.


&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    
    // Проверяем, что событие пришло именно от торгового оборудования
    Если Источник = "ПодключаемоеОборудование" И ВводДоступен() Тогда
        
        Если ИмяСобытия = "ScanData" Тогда
            
            // Параметр содержит массив данных штрихкода
            // Обычно Параметр[0] - это считанный код, Параметр[1] - количество/тип
            ДанныеШК = Неопределено;
            
            Если ТипЗнч(Параметр) = Тип("Массив") Тогда
                ДанныеШК = Параметр[0]; // Штрихкод
            Иначе
                ДанныеШК = Параметр.Штрихкод;
            КонецЕсли;
            
            // Вызываем логику обработки полученного кода
            ОбработатьСчитанныйШтрихкод(ДанныеШК);
            
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьСчитанныйШтрихкод(Штрихкод)
    
    Сообщить("Считан штрихкод: " + Штрихкод);
    // Здесь ваша логика поиска товара, заполнения ТЧ и т.д.
    
КонецПроцедуры

Настройка самого сканера (железа)

Даже если программный код написан идеально, событие ScanData может не возникнуть, если сам сканер настроен некорректно. Разберем основные нюансы настройки оборудования.

Режимы подключения:

  1. Keyboard Emulation (HID): Сканер работает как клавиатура. В этом режиме 1С может «поймать» событие только в том случае, если в драйвере настроен Суффикс. Обычно это символ возврата каретки (CR или Enter, код 13). Без суффикса система не поймет, что ввод данных завершен.
  2. COM-порт (RS-232 / USB-COM): Считается наиболее стабильным для 1С. События приходят напрямую в ОбработкаОповещения независимо от того, где находится курсор.

Использование драйверов Native API:

Проанализируем рекомендации опытных разработчиков. Настоятельно рекомендуется использовать драйверы 1С:Сканер штрихкода (NativeApi). В отличие от старых библиотек ScanOPOS.dll, они не требуют регистрации в реестре Windows через regsvr32, корректно работают в терминальных сессиях (RDP) и не требуют прав администратора на локальном ПК пользователя.

Типичные ошибки и способы их решения

Рассмотрим ситуацию, когда ошибки возникают при открытии формы (например, «Порт занят»). Это часто случается, если сканер одновременно настроен в 1С под разными именами или используется в двух открытых сессиях под одним пользователем. Проверьте настройки в разделе Администрирование — РМК и оборудование.

Еще одна проблема — некорректные префиксы и суффиксы. Посмотрим, как проверить работу устройства: зайдите в карточку настройки оборудования и воспользуйтесь кнопкой Тест устройства. Если в окне теста вы видите штрихкод, за которым следует спецсимвол (например, #13), значит суффикс настроен верно. Если же в тесте отображается только код, необходимо взять инструкцию к сканеру и считать сервисный штрихкод Add Suffix CR.

Особенности работы через RDP

Если ваши пользователи работают в терминальном режиме, помните:

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

← На главную