При автоматизации приема платежей, работы с лицевыми счетами или специализированной маркировкой пользователи часто сталкиваются с ситуацией, когда сканер штрихкодов считывает 24-значный код в обычный текстовый редактор («Блокнот»), но при попытке сканирования в 1С система выдает ошибку «Неверный формат штрихкода» либо оборудование полностью зависает. Разберем детально, почему это происходит и как правильно настроить сканер и учетную систему для стабильной обработки длинных кодов.
Проанализируем основные факторы, вызывающие подобное поведение оборудования и конфигурации:
]C1), что увеличивает длину кода сверх 24 знаков и нарушает логику проверки.Рассмотрим первоочередное техническое решение для устранения зависаний и потери символов. Работа через разрыв клавиатуры крайне нестабильна для длинных последовательностей, поэтому сканер необходимо перевести в режим эмуляции COM-порта:
В таком режиме сканер отправляет данные монолитным пакетом через процедуру ВнешнееСобытие, полностью исключая ошибки переполнения буфера клавиатуры.
Если перевод в COM-режим невозможен и сканер остается в режиме клавиатурного ввода, выполним следующие корректировки:
Выясним, как обработать нестандартную длину кода в коде конфигурации. Если типовая функция возвращает ошибку формата, переопределим логику в обработчике внешнего события формы регистрации оплат или документа.
Посмотрим на пример перехвата и разбора 24-значного штрихкода в процедуре обработки внешнего события:
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Если Событие = "BarCodeValue" Или Событие = "Штрихкод" Тогда
// Очищаем полученную строку от возможных служебных символов и пробелов
СчитанныйШтрихкод = СокрЛП(Данные);
// Проверяем длину полученных данных
Если СтрДлина(СчитанныйШтрихкод) = 24 Тогда
// Отключаем стандартный разбор и обрабатываем штрихкод по собственной структуре
ОбработатьНестандартныйШтрихкод(СчитанныйШтрихкод);
Иначе
// Передаем стандартному механизму конфигурации
ОбработатьШтрихкодСтандартно(СчитанныйШтрихкод);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработатьНестандартныйШтрихкод(Знач ШтрихкодСтрокой)
// Разбираем строку по позициям согласно структуре лицевого счета
// Например: первые 10 знаков - лицевой счет, далее 4 знака - период, остальное - сумма и услуга
НомерЛицевогоСчета = Сред(ШтрихкодСтрокой, 1, 10);
ПериодОплаты = Сред(ШтрихкодСтрокой, 11, 4);
КодУслуги = Сред(ШтрихкодСтрокой, 15, 3);
СуммаКПлате = Число(Сред(ШтрихкодСтрокой, 18, 7)) / 100;
// Выполняем поиск лицевого счета и заполнение табличной части
СсылкаНаЛицевойСчет = Справочники.ЛицевыеСчета.НайтиПоРеквизиту("НомерЛицевогоСчета", НомерЛицевогоСчета);
Если ЗначениеЗаполнено(СсылкаНаЛицевойСчет) Тогда
ЗаполнитьСтрокуОплаты(СсылкаНаЛицевойСчет, ПериодОплаты, КодУслуги, СуммаКПлате);
Иначе
ВызватьИсключение "Лицевой счет с номером " + НомерЛицевогоСчета + " не найден в базе!";
КонецЕсли;
КонецПроцедуры
В ряде отраслевых решений (ЖКХ, расчетные центры) доработка кода не требуется: разбор настраивается через справочник «Шаблоны штрихкодов» или «Настройки форматов штрихкодов». Разберем порядок настройки:
Комплексный перевод сканера в COM-режим в сочетании с корректной настройкой маски позиционирования или перехватом события в коде полностью устраняет ошибку неверного формата и обеспечивает безошибочное считывание 24-значных штрихкодов.