Как настроить считывание нестандартного штрихкода длиной 24 символа в 1С

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

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

Причины возникновения ошибки и зависания сканера

Проанализируем основные факторы, вызывающие подобное поведение оборудования и конфигурации:

  1. Типовые ограничения алгоритмов 1С: Большинство стандартных конфигураций и типовых библиотек подключаемого оборудования рассчитаны на фиксированные форматы штрихкодов (например, EAN-8, EAN-13, Code 128 фиксированной длины). Если длина кода или его внутренняя структура не соответствуют ожидаемой маске, встроенный валидатор возвращает ошибку формата.
  2. Разрыв пакета данных в режиме эмуляции клавиатуры (HID): При передаче 24 символов подряд через буфер клавиатуры драйвер 1С или операционная система может не успевать обрабатывать поток ввода, разделяя штрихкод на две части или вызывая зависание порта ввода.
  3. Служебные префиксы символик (AIM ID / Code ID): Сканер может передавать скрытые служебные символы идентификатора штрихкода в начале строки (например, ]C1), что увеличивает длину кода сверх 24 знаков и нарушает логику проверки.
  4. Несоответствие позиционной маски: В специализированных подсистемах (например, в модулях ЖКХ или биллинга) штрихкод лицевого счета разбирается строго по позициям (номер счета, период, услуга, сумма, контрольный разряд). Несовпадение контрольной суммы или разрядности блокирует обработку.

Шаг 1. Перевод сканера в режим виртуального COM-порта (VCOM)

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

  1. Отсканируем из сервисного руководства к сканеру (например, Honeywell/Metrologic Eclipse MS5145) настроечный штрихкод активации USB Serial Emulation (VCOM).
  2. Установим в операционную систему драйвер виртуального COM-порта от производителя сканера.
  3. Проверим в «Диспетчере устройств» Windows появление нового COM-порта и запомним его номер (например, COM3).
  4. В настройках торгового оборудования 1С переподключим сканер, указав драйвер с поддержкой COM-подключения и выбрав соответствующий номер порта.

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

Шаг 2. Отключение префиксов и настройка тайм-аутов

Если перевод в COM-режим невозможен и сканер остается в режиме клавиатурного ввода, выполним следующие корректировки:

  1. Отключение AIM ID: Отсканируем настроечный штрихкод отключения передачи идентификаторов символик (Disable AIM ID / Prefix), чтобы в 1С поступали только значащие 24 цифры.
  2. Регулировка чувствительности в 1С: В параметрах драйвера сканера в 1С увеличим параметр «Чувствительность» (тайм-аут между символами), чтобы система не разрывала длинную строку на отдельные части.
  3. Межсимвольная задержка: В самом сканере с помощью настроечной таблицы включим минимальную межсимвольную задержку (Intercharacter Delay), гарантирующую корректную регистрацию каждого знака операционной системой.
  4. Энергосбережение USB: В «Диспетчере устройств» Windows в свойствах корневых USB-концентраторов на вкладке «Управление электропитанием» снимем флажок «Разрешить отключение этого устройства для экономии энергии», чтобы исключить зависания лазерного модуля.

Шаг 3. Программный перехват и разбор штрихкода в 1С

Выясним, как обработать нестандартную длину кода в коде конфигурации. Если типовая функция возвращает ошибку формата, переопределим логику в обработчике внешнего события формы регистрации оплат или документа.

Посмотрим на пример перехвата и разбора 24-значного штрихкода в процедуре обработки внешнего события:


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

&НаСервере
Процедура ОбработатьНестандартныйШтрихкод(Знач ШтрихкодСтрокой)
    
    // Разбираем строку по позициям согласно структуре лицевого счета
    // Например: первые 10 знаков - лицевой счет, далее 4 знака - период, остальное - сумма и услуга
    НомерЛицевогоСчета = Сред(ШтрихкодСтрокой, 1, 10);
    ПериодОплаты       = Сред(ШтрихкодСтрокой, 11, 4);
    КодУслуги          = Сред(ШтрихкодСтрокой, 15, 3);
    СуммаКПлате        = Число(Сред(ШтрихкодСтрокой, 18, 7)) / 100;
    
    // Выполняем поиск лицевого счета и заполнение табличной части
    СсылкаНаЛицевойСчет = Справочники.ЛицевыеСчета.НайтиПоРеквизиту("НомерЛицевогоСчета", НомерЛицевогоСчета);
    
    Если ЗначениеЗаполнено(СсылкаНаЛицевойСчет) Тогда
        ЗаполнитьСтрокуОплаты(СсылкаНаЛицевойСчет, ПериодОплаты, КодУслуги, СуммаКПлате);
    Иначе
        ВызватьИсключение "Лицевой счет с номером " + НомерЛицевогоСчета + " не найден в базе!";
    КонецЕсли;
    
КонецПроцедуры

Шаг 4. Настройка шаблонов штрихкода в пользовательском режиме

В ряде отраслевых решений (ЖКХ, расчетные центры) доработка кода не требуется: разбор настраивается через справочник «Шаблоны штрихкодов» или «Настройки форматов штрихкодов». Разберем порядок настройки:

  1. Откроем справочник форматов/шаблонов штрихкодов в разделе администрирования или настроек расчетов.
  2. Создадим новую запись формата с указанием общей длины 24 символа.
  3. Зададим границы диапазонов для реквизитов: начальные и конечные позиции для номера лицевого счета, кода поставщика, периода начисления и суммы платежа.
  4. Если в коде не используется алгоритм контрольного числа (Modulo 10 / Modulo 11), отключим флаг проверки контрольного разряда.
  5. Сохраним шаблон и выберем его в качестве основного в настройках параметров регистрации оплат.

Комплексный перевод сканера в COM-режим в сочетании с корректной настройкой маски позиционирования или перехватом события в коде полностью устраняет ошибку неверного формата и обеспечивает безошибочное считывание 24-значных штрихкодов.

← На главную