Настройка выгрузки штрихкодов из 1С в 1С-Битрикс
Штрихкоды на сайте — не только эстетика карточки товара. Это ключ к быстрому поиску (покупатель сканирует упаковку), к интеграции с маркетплейсами (требуют EAN), к системам автоматической идентификации в B2B. В 1С штрихкоды хранятся в отдельном регистре, и их передача в Битрикс — отдельная задача, не покрытая стандартным CommerceML «из коробки».
Как штрихкоды хранятся в 1С
В 1С:УТ 11 и других конфигурациях штрихкоды хранятся в регистре сведений ШтрихкодыНоменклатуры. Структура:
- Номенклатура — ссылка на справочник
- Характеристика — если штрихкод привязан к конкретной характеристике (SKU)
- Единица измерения — EAN для штуки, коробки, поддона могут различаться
- Штрихкод — строка (EAN-8, EAN-13, Code128, QR, Datamatrix)
- Тип штрихкода — EAN13, EAN8, Code128 и т.д.
Один товар может иметь несколько штрихкодов:
- EAN-13 для единицы (штуки)
- EAN-13 для упаковки (6 штук)
- Code128 для поддона
- Дополнительный штрихкод поставщика
CommerceML и штрихкоды: стандартный способ
В CommerceML 2.08 есть тег Штрихкод — но поддержка его в стандартном модуле обмена Битрикс ограничена. Штрихкод передаётся как дополнительный реквизит или через специальный тег внутри <Товар>:
<Товар>
<Ид>товар-guid</Ид>
<Наименование>Пример товара</Наименование>
<Штрихкод>4607025491117</Штрихкод>
</Товар>
Некоторые версии модуля обмена Битрикс читают этот тег и записывают в свойство инфоблока CML2_BAR_CODE. Проверьте: если свойство CML2_BAR_CODE существует после первого импорта — штрихкод передаётся стандартно.
Если нет — нужен обработчик события импорта.
Кастомный обработчик для множественных штрихкодов
Для передачи нескольких штрихкодов (по единицам измерения) стандартного тега недостаточно. Используем ДополнительныеРеквизиты:
<ДополнительныеРеквизиты>
<ЗначениеРеквизита>
<Наименование>ШтрихкодШтука</Наименование>
<Значение>4607025491117</Значение>
</ЗначениеРеквизита>
<ЗначениеРеквизита>
<Наименование>ШтрихкодКоробка</Наименование>
<Значение>4607025491124</Значение>
</ЗначениеРеквизита>
</ДополнительныеРеквизиты>
В Битрикс создаём свойства инфоблока BARCODE_UNIT и BARCODE_BOX с типом «Строка». Обработчик события OnIBlockCMLImport2ElementAdd заполняет эти свойства:
AddEventHandler('catalog', 'OnIBlockCMLImport2ElementAdd',
'fillBarcodeProperties');
function fillBarcodeProperties(&$arFields, &$arProps, $arXML) {
if (isset($arXML['BARCODE_UNIT'])) {
$arProps['BARCODE_UNIT'] = $arXML['BARCODE_UNIT'];
}
if (isset($arXML['BARCODE_BOX'])) {
$arProps['BARCODE_BOX'] = $arXML['BARCODE_BOX'];
}
}
Штрихкоды у торговых предложений (SKU)
Если штрихкод привязан к характеристике (например, разные EAN у красной и синей футболки), нужно передавать его на уровне предложения, а не товара. В XML предложения:
<Предложение>
<Ид>товар-guid#характеристика-guid</Ид>
<Штрихкод>4607025491131</Штрихкод>
</Предложение>
В инфоблоке предложений Битрикс создаём свойство BARCODE и заполняем его аналогичным обработчиком, но уже для события OnIBlockCMLImport2OfferAdd.
Поиск по штрихкоду на сайте
После заполнения свойства BARCODE поиск по штрихкоду реализуется через стандартный компонент поиска Битрикс или кастомно:
$result = CIBlockElement::GetList(
[],
[
'IBLOCK_ID' => CATALOG_IBLOCK_ID,
'PROPERTY_BARCODE' => $scannedCode,
],
false,
false,
['ID', 'NAME', 'DETAIL_PAGE_URL']
);
Для мобильного сайта — подключить библиотеку для сканирования штрихкода через камеру (ZXing или QuaggaJS). Пользователь сканирует штрихкод упаковки — сайт мгновенно открывает карточку товара.
Кейс: B2B-площадка с EDI
Производитель продуктов питания с EDI-интеграцией: ритейлеры требуют EAN-13 на каждую позицию прайс-листа. Штрихкоды ведутся в 1С, но исторически не выгружались на B2B-портал.
Задача: добавить EAN-13 к каждой позиции в каталоге B2B-портала, чтобы ритейлеры могли копировать их при загрузке в свои системы.
Сделали единовременную выгрузку всех штрихкодов из 1С (внешняя обработка → CSV), загрузили в Битрикс через скрипт массового обновления свойства BARCODE. Время: 4 часа на 12 тыс. позиций.
Настроили последующую синхронизацию при обмене: новые товары приходят со штрихкодом в ДополнительныеРеквизиты, обработчик заполняет свойство. Изменение штрихкода существующей позиции — через тот же механизм.







