К статье
Практический материал

Торговля и Склад · 11 мин

Как определить тип штрихкода в 1С

Как определить тип штрихкода в 1С: EAN-13, Code128, QR. Настройка сканера, программное определение типа, типичные ошибки и способы проверки.

При подключении сканера штрихкодов к 1С одна из первых задач — понять, какой именно тип кода считывается с товара: EAN-13, EAN-8, Code128, DataMatrix или QR. От этого зависит, правильно ли система найдёт номенклатуру, корректно ли запишется код в регистр штрихкодов и не будет ли ошибок при печати ценников и этикеток.

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

Ниже разобраны способы определения типа штрихкода: визуальная идентификация по внешнему виду, настройка сканера, штатные средства типовых конфигураций и программное определение через встроенный язык 1С. Материал подходит для «1С:Управление торговлей», «1С:Розница», «1С:Комплексная автоматизация» и смежных решений.

Какие типы штрихкодов встречаются в 1С

Прежде чем определять тип, полезно знать, с чем вы столкнётесь на практике. В торговом и складском учёте чаще всего используются линейные (одномерные) коды: EAN-13 — стандарт розничной торговли, EAN-8 — укороченный вариант для мелкой упаковки, Code128 и Code39 — внутренние складские и транспортные коды, а также ITF-14 для коробов.

Отдельная группа — двумерные коды: DataMatrix применяется в системах маркировки («Честный ЗНАК»), QR-код — в чеках, платёжных документах и на рекламных материалах, PDF417 — на некоторых удостоверениях и транспортных документах. Двумерные коды требуют сканера с поддержкой 2D, обычный лазерный сканер их не прочитает.

В типовых конфигурациях 1С перечень поддерживаемых типов предопределён. Найти его можно через план видов характеристик «Типы штрихкодов» (в разных конфигурациях название может незначительно отличаться). Там уже заведены EAN-8, EAN-13, Code39, Code128, ITF-14, QR и другие — пользователю не нужно создавать их вручную.

Визуальное определение типа по внешнему виду

Самый быстрый способ понять тип кода без всякой настройки — посмотреть на него. EAN-13 состоит из 13 цифр, напечатанных под полосами, причём первая цифра стоит слева от штрихов. EAN-8 содержит 8 цифр и заметно короче. Code128 и Code39 могут включать буквы, поэтому под полосами часто виден буквенно-цифровой набор.

Двумерные коды отличить ещё проще: QR — квадрат с тремя крупными квадратами по углам, DataMatrix — квадрат или прямоугольник со сплошной L-образной рамкой по двум сторонам. Если на этикетке квадратный узор — это точно не EAN и не Code128.

ТипСоставВнешний признакТипичное применение
EAN-1313 цифрПервая цифра слева от полосРозничные товары
EAN-88 цифрКороткий код, только цифрыМелкая упаковка
Code128Цифры и буквыПлотные полосы, переменная длинаСклад, логистика
Code39Цифры, заглавные буквыШирокие промежутки, часто * по краямВнутренний учёт
QRЛюбые данныеКвадрат, три метки по угламЧеки, ссылки, оплата
DataMatrixЛюбые данныеКвадрат с L-образной рамкойМаркировка товаров

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

Определение типа через настройки сканера

Большинство сканеров умеют сообщать тип считанного кода. В режиме эмуляции COM-порта или при работе через драйвер «1С:Сканер штрихкода» тип передаётся в 1С вместе с данными, и конфигурация получает его автоматически при обработке события внешнего оборудования.

Если сканер работает в режиме эмуляции клавиатуры, тип по умолчанию не передаётся — 1С получает только строку символов. В этом случае производители предлагают настроить префикс AIM-идентификатора: специальную трёхсимвольную приставку, которая добавляется перед данными и указывает формат (например, ]E0 для EAN-13, ]C0 для Code128). Включается эта функция сканированием служебных кодов из руководства сканера.

Порядок настройки передачи типа
  1. 1
    Определите режим подключения сканера: USB-клавиатура, эмуляция COM-порта или драйвер 1С
  2. 2
    Для клавиатурного режима включите передачу AIM-префикса кодом из инструкции сканера
  3. 3
    Для COM-режима установите драйвер «1С:Сканер штрихкода» или драйвер производителя
  4. 4
    В 1С откройте настройки подключаемого оборудования и проверьте тестом устройства, что тип определяется
  5. 5
    Отсканируйте товар в документе и убедитесь, что поиск номенклатуры срабатывает

Признак правильной настройки: при сканировании в форме проверки оборудования отображается не только сам код, но и его тип. Если тип приходит как «неизвестный», а код читается — сканер просто не передаёт идентификатор, и нужно либо включить префикс, либо определять тип программно.

Как тип штрихкода определяется в типовых конфигурациях

В конфигурациях на базе Библиотеки подключаемого оборудования (БПО) за обработку отвечает общий модуль работы с оборудованием. Когда сканер передаёт событие, 1С получает структуру с данными штрихкода, где уже может быть заполнен тип. Если тип не передан, выполняется эвристический анализ строки.

Логика эвристики проста: строка из 13 цифр с корректной контрольной суммой трактуется как EAN-13, из 8 цифр — как EAN-8, 12 цифр — как UPC-A. Смешанные буквенно-цифровые строки обычно классифицируются как Code128. Контрольная сумма EAN проверяется по стандартному алгоритму: сумма цифр на нечётных позициях плюс утроенная сумма на чётных, дополнение до кратного десяти.

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

Программное определение типа на встроенном языке

В собственных доработках тип можно определить функцией анализа строки. Ниже упрощённый пример, который покрывает основные линейные форматы:

Функция ОпределитьТипШтрихкода(Код)

Длина = СтрДлина(Код);

ТолькоЦифры = СтрЧислоВхождений(

"0123456789", Лев(Код, 1)) > 0

И СтрДлина(СтрЗаменить(Код, " ", "")) = Длина;

Если Не СтрокаСостоитИзЦифр(Код) Тогда

Возврат "Code128"; // или анализ дальше

ИначеЕсли Длина = 13 И КонтрольнаяСуммаEANВерна(Код) Тогда

Возврат "EAN13";

ИначеЕсли Длина = 8 И КонтрольнаяСуммаEANВерна(Код) Тогда

Возврат "EAN8";

ИначеЕсли Длина = 12 Тогда

Возврат "UPCA";

Иначе

Возврат "Code128";

КонецЕсли;

КонецФункции

Для проверки контрольной суммы EAN-13 нужно сложить цифры на нечётных позициях (начиная с первой), прибавить утроенную сумму цифр на чётных позициях и убедиться, что результат вместе с последней (контрольной) цифрой кратен десяти. Если сумма не сходится, код либо считан с ошибкой, либо это не EAN.

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

Проверка результата и типичные ошибки

После настройки проверьте определение типа на реальных кодах из вашего ассортимента. Сканируйте код в тестовой форме оборудования, затем в документе поступления или чеке: товар должен находиться мгновенно, без диалогов выбора. Затем распечатайте этикетку с этим же типом и считайте её обратно — цикл «печать → сканирование» должен замыкаться.

Контрольные точки

Как проверить результат

Сканирование в документе
Норма

Номенклатура находится сразу, без ручного выбора

Тревожный признак

Появляется окно поиска или сообщение «Штрихкод не найден»

Тип в карточке штрихкода
Норма

Тип совпадает с фактическим форматом этикетки

Тревожный признак

Стоит «неизвестный» или неверный формат

Печать и обратное считывание
Норма

Напечатанная этикетка читается и находит тот же товар

Тревожный признак

Этикетка не читается или находит другую позицию

Типичные ошибки
01
Сканер добавляет суффикс (Enter, Tab) или префикс, и строка не проходит проверку контрольной суммы — тип определяется неверно. Решение: настроить суффиксы сканера
02
EAN-13 с ведущим нулём обрезается до 12 цифр и ошибочно принимается за UPC-A. Решение: хранить код как строку и не отсекать нули
03
Регистрация кода маркировки DataMatrix как обычного штрихкода товара — ломается поиск и отчётность. Коды маркировки обрабатываются отдельным механизмом
04
Ручной ввод типа «наугад» при регистрации — потом этикетки печатаются в неверном формате и не читаются

Отдельная ловушка — товары с маркировкой. DataMatrix с упаковки содержит GTIN, серийный номер и криптохвост; записывать всю эту строку как штрихкод номенклатуры нельзя. Для поиска товара из кода маркировки извлекается только GTIN (позиции после идентификатора 01), и типовые конфигурации делают это автоматически при включённой поддержке маркировки.

Частые вопросы

Сканер читает код, но 1С пишет «Штрихкод не найден». Это проблема типа?

Не всегда. Сначала проверьте, зарегистрирован ли код в базе: откройте регистр штрихкодов и поищите строку вручную. Если код есть, но не находится — сравните посимвольно то, что передаёт сканер (видно в тесте оборудования), с тем, что записано в базе. Чаще всего расхождение в лишних символах или обрезанных ведущих нулях, а не в типе.

Можно ли в 1С хранить штрихкод без указания типа?

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

Как отличить EAN-13 от Code128, если код состоит только из цифр?

По длине и контрольной сумме: EAN-13 всегда содержит ровно 13 цифр, и последняя является контрольной по алгоритму EAN. Строка из 13 цифр с несходящейся контрольной суммой — скорее всего Code128. Коды другой длины (например, 20 цифр) — практически всегда Code128.

Почему сканер не читает DataMatrix с маркированного товара?

Чаще всего сканер не поддерживает двумерные коды — лазерные модели читают только линейные штрихкоды. Нужен 2D-сканер (фотосканер). Вторая возможная причина — в настройках сканера отключено распознавание DataMatrix; включается служебным кодом из руководства.

Нужно ли определять тип для внутренних штрихкодов склада?

Да, но вы сами выбираете формат при генерации. Для внутренних кодов обычно используют EAN-13 с префиксом внутреннего диапазона (начинается с 2) или Code128 для буквенно-цифровых значений. Главное — использовать один формат единообразно и указать его при печати этикеток.

Что делать, если один товар имеет несколько штрихкодов разных типов?

Это нормальная ситуация: например, EAN-13 от производителя и внутренний Code128. Зарегистрируйте оба кода на одну номенклатуру с правильными типами — поиск будет срабатывать по любому из них. Удалять «лишние» коды не нужно.

Итог

Что важно запомнить

Тип штрихкода определяется визуально, передачей от сканера или программным анализом строки. Надёжнее всего настроить передачу типа от сканера и проверить результат полным циклом: сканирование — поиск товара — печать этикетки — повторное считывание. Коды маркировки не регистрируются как обычные штрихкоды.