Как подключить сканер штрихкодов к нетиповому документу в 1С 8.3 (Обычные формы)

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При разработке собственных подсистем или расширении функционала типовых конфигураций, таких как «Управление производственным предприятием 1.3», часто возникает задача интеграции торгового оборудования. В частности, работа со сканером штрихкодов в самописных документах требует понимания механизмов взаимодействия формы с обработкой торгового оборудования (ТО). Рассмотрим подробно процесс подключения и разберем по шагам, что необходимо добавить в вашу форму для корректной работы устройства.

Шаг 1. Подготовка реквизитов формы

Для того чтобы механизмы 1С понимали, что форма готова принимать данные от сканера, нам необходимо добавить специальные реквизиты. Разберем ситуацию на примере обычных форм. В дереве метаданных вашего документа откройте нужную форму и добавьте следующие реквизиты (тип — Реквизит формы, а не реквизит объекта):

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

Эти реквизиты служат своего рода «флагами» для глобальных модулей системы, отвечающих за ТО.

Шаг 2. Инициализация и отключение клиента ТО

Чтобы форма «подписалась» на события сканера при открытии и «отписалась» при закрытии, проанализируем события ПриОткрытии и ПриЗакрытии. Нам необходимо вызвать методы глобального модуля ПолучитьСерверТО. Рассмотрим пример кода:


Процедура ПриОткрытии()
    // Регистрируем форму как потребителя событий торгового оборудования
    Попытка
        ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);
    Исключение
        Сообщить("Ошибка при подключении торгового оборудования: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Процедура ПриЗакрытии()
    // Обязательно отключаем клиента, чтобы не блокировать события для других форм
    Попытка
        ПолучитьСерверТО().ОтключитьКлиента(ЭтаФорма);
    Исключение
        // Ошибка при отключении обычно не критична для пользователя
    КонецПопытки;
КонецПроцедуры

Важный момент: если сканер работает в режиме эмуляции COM-порта, именно эти вызовы позволяют системе перенаправлять поток данных в активное окно.

Шаг 3. Обработка внешнего события

Основным «входом» для данных от сканера является предопределенная процедура формы ВнешнееСобытие. Выясним причину, почему она может не срабатывать: если в коде нет перенаправления данных обработчику ТО, система просто проигнорирует сигнал. Добавим следующий код:


Процедура ВнешнееСобытие(Источник, Событие, Данные)
    
    // Проверяем, доступен ли ввод в форму (не открыто ли модальное окно поверх)
    Если Не ВводДоступен() Тогда
        Возврат;
    КонецЕсли;

    // Передаем событие на обработку в сервер ТО
    // Сервер ТО сам определит, что это был штрихкод, и вызовет нужную экспортную функцию
    ПолучитьСерверТО().ОбработатьВнешнееСобытие(Источник, Событие, Данные, ЭтаФорма);
    
КонецПроцедуры

Шаг 4. Реализация экспортных функций-обработчиков

Механизм торгового оборудования в УПП и других типовых решениях на обычных формах устроен так, что после расшифровки данных из ВнешнегоСобытия он ищет в форме документа специфические экспортные функции. Если их не будет, данные «потеряются».

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


// Обязательная функция для инициализации поддержки типа оборудования
Функция ПоддерживаетсяВидТО(Вид) Экспорт
    Результат = Ложь;
    Если Вид = Перечисления.ВидыТорговогоОборудования.СканерШтрихКода Тогда
        Результат = Истина;
    КонецЕсли;
    Возврат Результат;
КонецФункции

// Процедура вызывается, когда штрихкод успешно распознан как номенклатура
Процедура СШКНоменклатура(Номенклатура, Характеристика, Серия, Качество, Единица, Количество, СШК) Экспорт
    // Здесь пишем логику добавления товара в таблицу
    НоваяСтрока = Товары.Добавить();
    НоваяСтрока.Номенклатура = Номенклатура;
    НоваяСтрока.Количество = 1;
    // ... заполнение остальных реквизитов
КонецПроцедуры

// Обработка ошибок сканирования
Процедура СШКОшибка(Ошибка, Штрихкод, ТипШК, СШК) Экспорт
    Предупреждение("Ошибка сканера: " + Ошибка);
КонецПроцедуры

Также рекомендуется добавить «пустышки» для других типов данных (информационные карты, серийные номера), чтобы избежать ошибок вызова:

Шаг 5. Технические нюансы настройки оборудования

Рассмотрим подробнее ситуации, когда программный код верен, но сканер все равно не работает в самописном документе. Проанализируем настройки самого устройства:

  1. Режимы работы: Сканер может работать в режиме эмуляции клавиатуры (HID) или COM-порта. Для работы через ВнешнееСобытие предпочтительнее COM-порт (или Virtual COM).
  2. Суффиксы: Если сканер работает как клавиатура, он просто «печатает» символы. Чтобы 1С понимала завершение ввода, в настройках драйвера в 1С должен быть указан суффикс (обычно это #13 — Enter).
  3. Регистр «Штрихкоды»: Помните, что процедура СШКНоменклатура сработает только в том случае, если сканируемый штрихкод зарегистрирован в системе. Если вы сканируете «произвольный» код, данные попадут в СШКНеизвестныйКод.

Шаг 6. Отладка и поиск неисправностей

Если данные не приходят в форму, выполним следующие действия:

Во-первых, проверим работоспособность сканера в любом типовом документе (например, «Поступление товаров и услуг»). Если там работает — проблема в коде вашей формы.

Во-вторых, установим точку останова внутри процедуры ВнешнееСобытие. Если при сканировании отладчик не «останавливается», значит, форма не зарегистрирована как клиент ТО (проверьте ПриОткрытии) или сканер настроен как клавиатура и просто вставляет текст в активное поле, не генерируя внешнее событие.

В-третьих, убедимся, что все добавленные процедуры имеют окончание Экспорт. Без этого глобальный модуль РаботаСТорговымОборудованием не сможет к ним обратиться, так как они будут «невидимы» снаружи модуля формы.

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

← На главную