При приёмке товара на склад часто возникает проблема: каждый товар нужно промаркировать этикеткой со штрихкодом. Вручную это делает ошибки: перепутанный артикул, неверный штрихкод, разный формат. При объёме 200 позиций в день ошибки неизбежны. Мы автоматизируем печать этикеток и штрихкодов прямо из 1С-Битрикс: от хранения кодов до отправки на принтер. В этой статье расскажем, как настроить такую систему, какие инструменты используем и как это ускоряет работу склада. Средняя экономия на материалах и времени составляет до $4.5k–6.5k. в год (по данным наших проектов). Кроме того, автоматизация исключает перепечатку и снижает количество возвратов.
Почему автоматизация печати этикеток критична для склада?
Ручная подготовка этикеток ведёт к ошибкам: перепутанный артикул, неверный штрихкод, разный формат. При объёмах от 100 товаров в день это критично. Автоматизация исключает человеческий фактор и ускоряет процесс в 5–10 раз. Кроме того, маркировка товаров — требование многих розничных сетей и маркетплейсов. Без штрихкода товар не примут на реализацию. Поэтому автоматизация — не прихоть, а необходимость.
Как мы храним и генерируем штрихкоды в Битриксе
Штрихкоды хранятся в таблице b_catalog_product_barcode: PRODUCT_ID, BARCODE, TYPE (EAN-13, Code128, QR и т.д.). Одному товару может соответствовать несколько штрихкодов.
Получение штрихкодов товара:
$barcodes = \Bitrix\Catalog\ProductBarcodeTable::getList([ 'filter' => ['PRODUCT_ID' => $productId], 'select' => ['BARCODE', 'TYPE'], ])->fetchAll(); Если штрихкод отсутствует, генерируем его алгоритмически. Например, EAN-13 на основе ID товара с контрольной цифрой:
function generateEan13FromId(int $productId): string { $code = str_pad($productId, 12, '0', STR_PAD_LEFT); $sum = 0; for ($i = 0; $i < 12; $i++) { $sum += (int)$code[$i] * ($i % 2 === 0 ? 1 : 3); } $checkDigit = (10 - ($sum % 10)) % 10; return $code . $checkDigit; } После генерации штрихкод сохраняется в b_catalog_product_barcode. Также можно использовать HL-блоки для кастомных полей, если нужно хранить дополнительные данные, например срок годности или вес.
Генерация изображения штрихкода
Для генерации изображений используем проверенные PHP-библиотеки. Чаще всего берём php-barcode-generator. Установка через Composer — composer require picqer/php-barcode-generator.
Генерация EAN-13 в SVG для печати:
$generator = new \Picqer\Barcode\BarcodeGeneratorSVG(); $svg = $generator->getBarcode('4607134392015', $generator::TYPE_EAN_13, 3, 60); SVG предпочтительнее PNG — масштабируется без потери качества при любом DPI.
Шаблон этикетки
Этикетка собирается как HTML-страница с @media print и отправляется на печать через браузер или конвертируется в PDF. Минимальный шаблон 58×40 мм:
<!DOCTYPE html> <html> <head> <style> @page { size: 58mm 40mm; margin: 2mm; } body { font-family: Arial; font-size: 8pt; } .label { width: 54mm; height: 36mm; display: flex; flex-direction: column; } .barcode { text-align: center; } .name { font-size: 7pt; overflow: hidden; max-height: 12mm; } .price { font-size: 14pt; font-weight: bold; text-align: right; } </style> </head> <body> <div class="label"> <div class="name"><?= htmlspecialchars($product['NAME']) ?></div> <div class="price"><?= $price ?> руб.</div> <div class="barcode"><?= $svg ?></div> <div style="text-align:center; font-size:7pt"><?= $barcode ?></div> </div> </body> </html> Размер 58×40 мм — стандарт для этикеточных принтеров Zebra/Godex.
Сравнение способов печати: HTML vs ZPL
| Параметр | HTML + @media print | Прямая отправка ZPL |
|---|---|---|
| Качество печати | Зависит от драйвера принтера | Оптимизировано для термопринтеров |
| Скорость пакетной печати | Низкая (каждый лист OK) | Высокая (пакет команд) |
| Гибкость дизайна | Высокая (CSS) | Средняя (ZPL команды) |
| Поддержка принтеров | Любые (с драйвером) | Только ZPL-совместимые |
Для 1–10 этикеток подойдёт HTML-печать через браузер. Для 100+ этикеток прямая отправка ZPL на принтер (сокет на порт 9100) сокращает время в разы.
Как настроить пакетную печать через административный интерфейс?
В административном интерфейсе Битрикса можно вывести список товаров, отметить нужные и запустить пакетную печать. Мы реализуем кнопку, которая собирает все этикетки в один PDF или отправляет ZPL-пакет на принтер. Для A4 делаем grid-раскладку с break-inside: avoid. Встраиваем кастомную страницу в /bitrix/admin/. Она принимает PRODUCT_ID[] через GET (из списка товаров через массовые действия), рендерит этикетки и вызывает window.print().
Как организовать прямую отправку на принтер
Для Zebra и аналогов:
$socket = fsockopen('192.168.1.100', 9100, $errno, $errstr, 5); if ($socket) { $zpl = buildZplLabel($product, $barcode); fwrite($socket, $zpl); fclose($socket); } Это работает без браузерного окна и быстрее для больших объёмов.
Пример конфигурации для Zebra GK420d
^XA ^FO50,50^A0N,30,30^FDMyLabel^FS ^FO50,100^BY2^B3N,N,100,Y,N^FD1234567890128^FS ^XZ Сравнение типов штрихкодов
| Тип | Применение | Длина | Особенности |
|---|---|---|---|
| EAN-13 | Розничная торговля | 13 цифр | Стандарт для большинства сетей |
| Code128 | Логистика, маркировка коробов | Переменная | Высокая плотность кодирования |
| QR | Маркировка, ссылки на доп. информацию | До 177×177 | Может содержать URL |
Что входит в нашу работу
- Анализ текущего процесса маркировки и требований к этикеткам.
- Проектирование структуры хранения штрихкодов в инфоблоках и HL-блоках.
- Разработка компонента генерации штрихкодов (EAN-13, Code128, QR).
- Создание шаблонов этикеток под ваше оборудование (Zebra, Godex, Citizen).
- Настройка административного интерфейса печати (по одной или пакетом).
- Интеграция с типовыми принтерами (через ZPL/EPL или браузер).
- Тестирование и отладка на вашем тестовом складе.
- Документация и обучение сотрудников (2 часа онлайн-созвона).
- Гарантия 6 месяцев на разработанный модуль.
Наша команда — опытные битрикс-разработчики с 10+ годами опыта и более 50 проектов по автоматизации складов. Свяжитесь с нами, чтобы обсудить вашу задачу. Получите консультацию по автоматизации печати на вашем складе. Наши инженеры оценят текущие процессы и предложат решение под ваш бюджет.







