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

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

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

1. Проблема масштабирования табличного документа при печати

Одной из наиболее частых причин, почему сканер не распознает штрихкод, является неверное масштабирование документа при отправке на печать. Если в настройках печати задан масштаб (например, 80% или «по ширине страницы»), программное обеспечение пересчитывает ширину линий штрихкода. В результате искажается соотношение узких и широких полос, что критично для стандарта CODE39.

Рассмотрим, как правильно настроить параметры печати табличного документа программно, чтобы избежать автоматического искажения размеров:


ТабДок = Новый ТабличныйДокумент;
// Формирование макета и заполнение данных
...
ТабДок.АвтоМасштаб = Ложь;
ТабДок.МасштабПечати = 100;
ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЭТИКЕТКИ";

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

2. Отсутствие обязательных символов старта и стопа (звёздочек)

Спецификация CODE39 строго требует наличия спецсимвола * (звёздочка) в начале и в конце кодируемой строки (например, *12345*). Звёздочка служит для оборудования сигналом о начале и завершении штрихкода.

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


ИсходныйКод = "123456789";
Если Не Лев(ИсходныйКод, 1) = "*" Тогда
    КодДляПечати = "*" + ИсходныйКод + "*";
Иначе
    КодДляПечати = ИсходныйКод;
КонецЕсли;

3. Проверка допустимых символов в кодируемой строке

Стандарт CODE39 поддерживает ограниченный набор из 43 символов: цифры от 0 до 9, заглавные латинские буквы (A–Z) и спецсимволы (-, ., $, /, +, %, пробел). Наличие кириллических букв, строчных символов или незарегистрированных знаков приводит к ошибкам формирования полос и делает штрихкод нечитаемым.

4. Соблюдение свободной зоны (Quiet Zone) и размеров в макете

Для успешного позиционирования луча сканера с обеих сторон штрихкода CODE39 обязательно должно быть белое поле без текста и рамок (шириной не менее 10 минимальных штрихов). Если ячейка в макете 1С имеет слишком узкие границы или рамку, сканер не сможет зафиксировать край кода.

Разберем рекомендации по настройке макета:

  1. Увеличьте ширину ячейки табличного документа, в которой расположен объект штрихкода.
  2. Уберите границы ячейки (установите тип линии «Нет линии»).
  3. Экспериментируйте с высотой и шириной рисунка штрихкода в макете, избегая слишком плотного расположения полос.

5. Искажения при рендеринге на мобильной платформе

При формировании печатной формы на мобильной платформе 1С и конвертации ее в графический формат или PDF может применяться сглаживание граней (anti-aliasing). Из-за этого размываются границы между черными и белыми полосами. Для решения этой проблемы рекомендуется формировать штрихкод в виде высокочеткого растрового изображения (PNG) с фиксированным разрешением без сглаживания и вставлять его в макет как рисунок.

6. Настройки декодера самого сканера

Если печатная форма сформирована корректно, причина может кроется в настройках сканирующего оборудования. В некоторых сканерах декодирование формата CODE39 отключено по умолчанию либо включена обязательная проверка контрольной суммы (Modulo 43).

Для устранения проблемы следует просканировать управляющие штрихкоды из инструкции к сканеру:

  1. Активировать распознавание формата CODE39 Enable.
  2. Отключить обязательную проверку контрольного символа (Check Digit Verification Disable).

7. Переход на более помехоустойчивый формат Code 128

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

← На главную