При переходе на управляемые формы разработчики нередко сталкиваются с ситуацией, когда штрихкод визуально выводится на печать, но сканер категорически отказывается его считывать или компонента генерации выводит ошибку некорректного кода. Проанализируем основные причины возникновения этой проблемы и разберем по шагам способы их устранения.
Одной из наиболее частых причин некорректного поведения генератора штрихкодов является ошибка в последнем контрольном символе. В стандарте EAN последняя цифра не выбирается произвольно, а рассчитывается по строгому алгоритму на основе предыдущих цифр. Если сформировать штрихкод с некорректной контрольной цифрой, компонента либо откажется генерировать рисунок (выдав ошибку о некорректном коде), либо сгенерирует штрихкод другого типа, который сканер не сможет распознать.
Рассмотрим алгоритм расчета контрольной цифры EAN и программную функцию, которую можно использовать в 1С для проверки и формирования контрольного символа:
Функция глКонтрольныйСимволEAN(ШтрКод, Тип) Экспорт
Четн = 0;
Нечетн = 0;
Если Тип = 13 Тогда
КолвоИтераций = 6;
Иначе
КолвоИтераций = 4;
КонецЕсли;
Для Индекс = 1 По КолвоИтераций Цикл
Четн = Четн + Сред(ШтрКод, 2 * Индекс, 1);
Нечетн = Нечетн + Сред(ШтрКод, 2 * Индекс - 1, 1);
КонецЦикла;
Если Тип = 13 Тогда
Четн = Четн * 3;
Иначе
Нечетн = Нечетн * 3;
КонецЕсли;
КонтЦифра = 10 - (Четн + Нечетн) % 10;
Возврат ?(КонтЦифра = 10, "0", Строка(КонтЦифра));
КонецФункции
Перед передачей строки в компоненту печати необходимо убедиться, что 13-й (или 8-й) символ совпадает с результатом работы данной функции.
В управляемых формах печать штрихкодов часто выполняется путем генерации растрового изображения (PNG или BMP). При пропорциональном изменении размеров растрового рисунка ширина черных и белых полос деформируется. Если сканер получает штрихи некратной ширины или сглаженные границы пикселей, он не может считать код.
Выясним главные правила оформления табличного документа при выводе штрихкода:
ТабличныйДокумент должен быть строго равен 100%. Любое сжатие (например, 90% или подгонка по ширине страницы) сжимает картинку и делает штрихкод несчитываемым.РеальныйРазмер или Пропорционально, избегая значения Растянуть.Посмотрим на ещё одну распространенную ошибку при визуальном оформлении штрихкода в табличном документе. Не следует обводить область с рисунком штрихкода в рамку (устанавливать границы ячеек или самого рисунка).
При наличии рамки вокруг картинки считывающий луч сканера принимает внешнюю сплошную линию за первую полосу штрихкода. В результате структура кода нарушается, и сканер распознает его как некорректный. Штрихкод должен иметь свободные белые поля слева и справа (так называемые "тихие зоны").