Главная » Интернет-магазин » Каталог » Штрихкоды и артикулы товаров в Битрикс

Штрихкоды и артикулы товаров в Битрикс

Схема раздельного хранения штрихкода и артикула товара в 1С-Битрикс

Штрихкод и артикул — два разных идентификатора товара с разным назначением, которые легко перепутать при проектировании структуры каталога. Разберём разницу между ними и как правильно организовать их хранение и использование в 1С-Битрикс.

Артикул — идентификатор для людей и учёта

Артикул — буквенно-цифровой код, присваиваемый товару магазином или производителем для внутреннего учёта, часто читаемый и осмысленный для человека (например, содержащий сокращение категории и порядковый номер). Артикул уникален в рамках каталога конкретного магазина, но не является универсальным стандартом — разные магазины могут использовать разные артикулы для одного и того же физического товара.

Штрихкод — универсальный идентификатор товара

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

Нужна помощь с Битрикс?





    Хранение обоих идентификаторов как отдельных свойств

    <?php
    
    $el->Update($productId, [
        'PROPERTY_VALUES' => [
            'ARTICLE' => 'TS-2024-0142',
            'BARCODE' => '4607123456789',
        ],
    ]);

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

    Валидация формата штрихкода

    <?php
    
    function isValidEan13(string $barcode): bool
    {
        if (!preg_match('/^\d{13}$/', $barcode)) {
            return false;
        }
    
        $sum = 0;
        for ($i = 0; $i < 12; $i++) {
            $sum += (int)$barcode[$i] * ($i % 2 === 0 ? 1 : 3);
        }
    
        $checkDigit = (10 - ($sum % 10)) % 10;
    
        return $checkDigit === (int)$barcode[12];
    }

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

    Штрихкод для торговых предложений

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

    Поиск товара по штрихкоду

    <?php
    
    $element = CIBlockElement::GetList(
        [], ['IBLOCK_ID' => $offersIblockId, 'PROPERTY_BARCODE' => $scannedCode],
        false, false, ['ID', 'NAME']
    )->Fetch();

    Для сценария сканирования штрихкода (например, на складе или в приёмке товара) поиск элемента по значению свойства штрихкода — типовая операция, для которой на большом каталоге стоит убедиться в наличии индекса на соответствующее поле, если используется прямой SQL, или полагаться на штатную оптимизацию API инфоблоков для фильтрации по свойству.

    Генерация штрихкода для собственного производства

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

    Частые ошибки

    • Артикул и штрихкод хранятся в одном поле. Проблемы там, где внешняя система ожидает конкретно один из форматов.
    • Нет валидации формата штрихкода при вводе или импорте. Повреждённые значения попадают в базу и создают проблемы при синхронизации.
    • Штрихкод хранится на уровне товара, а не торгового предложения. Разные физические варианты товара с разными штрихкодами не различаются в структуре данных.

    Итог

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

    Нужна помощь с Битрикс?

    Исправим ошибку, доработаем сайт, ускорим Битрикс или поможем разобраться с проблемой.

    Услуги
    База знаний