Принтер этикеток Zebra — мощное устройство, но без правильной интеграции его потенциал не используется. Операторы вручную копируют данные из Битрикс в Excel, затем печатают через ZDesigner. Это медленно и чревато ошибками: штрихкоды путаются, цены устаревают. Наша команда — сертифицированные разработчики Битрикс с 7-летним опытом — автоматизирует печать этикеток напрямую из вашего сайта. При смене цены, поступлении товара или отгрузке этикетка формируется и отправляется на принтер Zebra без участия человека. Мы используем ZPL — промышленный язык управления принтерами Zebra. Передача идёт по протоколу TCP/IP RAW (порт 9100).
Как работает печать через ZPL
Принтеры Zebra работают в сети по протоколам TCP/IP (порт 9100 — RAW print) или через веб-интерфейс. ZPL-команды отправляются как текст в TCP-сокет.
function printZpl(string $printerIp, int $printerPort, string $zpl): bool { $socket = fsockopen($printerIp, $printerPort, $errno, $errstr, 5); if (!$socket) { \Bitrix\Main\Diag\Debug::writeToFile("Zebra: $errstr ($errno)", '', '/bitrix/zebra_errors.log'); return false; } fwrite($socket, $zpl); fclose($socket); return true; } Для Windows-сред с shared-принтером — альтернативный подход через локальный агент на Python или Node.js, который принимает задания от Битрикс по HTTP и отправляет на принтер через WinSpool.
Генерация ZPL-этикетки товара
Этикетка товара (цена + штрихкод + артикул) генерируется классом ZebraLabelGenerator:
class ZebraLabelGenerator { public function generatePriceLabel(array $product, string $priceType = 'BASE'): string { $price = \CCatalogProduct::GetOptimalPrice($product['ID'])['PRICE']['PRICE'] ?? 0; $barcode = $this->getBarcode($product['ID']); $name = mb_substr($product['NAME'], 0, 30); return implode("\n", [ '^XA', '^CI28', '^PW464', '^LL200', '^FO20,10^A0N,24,24^FD' . $name . '^FS', '^FO20,40^A0N,18,18^FD' . ($product['PROPERTY_ARTICLE_VALUE'] ?? '') . '^FS', '^FO20,65^A0N,36,36^FD' . number_format($price, 2, '.', ' ') . ' руб.^FS', '^FO20,110^BY2^BCN,50,Y,N,N^FD' . $barcode . '^FS', '^XZ', ]); } private function getBarcode(int $productId): string { $row = \Bitrix\Catalog\ProductBarcodeTable::getList([ 'filter' => ['PRODUCT_ID' => $productId], 'limit' => 1, ])->fetch(); return $row['BARCODE'] ?? str_pad($productId, 12, '0', STR_PAD_LEFT); } } Шаблоны этикеток в базе данных
Шаблоны ZPL хранятся в таблице bl_zebra_templates, а не в коде. Это позволяет менять макет без деплоя. Плейсхолдеры вроде {{NAME}}, {{PRICE}}, {{BARCODE}} заменяются на реальные данные классом ZebraTemplateEngine.
Как автоматизировать печать при смене цены?
При смене цены через событие OnProductUpdate запускается автоматическая печать:
AddEventHandler('catalog', 'OnProductUpdate', function($productId) { $needPrint = \Bitrix\Main\Config\Option::get('zebra_module', 'auto_print_price_change', 'N'); if ($needPrint !== 'Y') return; $product = \CIBlockElement::GetByID($productId)->GetNext(); $printerIp = \Bitrix\Main\Config\Option::get('zebra_module', 'default_printer_ip'); $zpl = (new ZebraLabelGenerator())->generatePriceLabel($product); ZebraPrinter::send($printerIp, 9100, $zpl); }); При приёмке товара — после обработки документа поступления формируется очередь заданий:
foreach ($receiptItems as $item) { for ($i = 0; $i < $item['qty']; $i++) { $jobs[] = [ 'product_id' => $item['product_id'], 'copies' => 1, 'template' => 'warehouse_label', 'printer_id' => $item['warehouse_printer_id'], ]; } } ZebraPrintQueue::push($jobs); Очередь и повторы
Очередь печати bl_zebra_print_queue обрабатывается агентом каждую минуту. Это надёжнее прямой печати в обработчике события — принтер может быть временно недоступен.
CREATE TABLE bl_zebra_print_queue ( id SERIAL PRIMARY KEY, printer_id INT NOT NULL, template_id INT NOT NULL, data_json JSONB NOT NULL, status VARCHAR(20) DEFAULT 'pending', attempts SMALLINT DEFAULT 0, scheduled_at TIMESTAMP DEFAULT NOW(), printed_at TIMESTAMP ); При ошибке печати статус меняется на retry, счётчик попыток увеличивается. После 5 неудачных попыток статус становится failed, администратор получает уведомление.
Почему Zebra — стандарт для склада?
Принтеры Zebra используют термопечать — не нужны картриджи, краска не смазывается. Протокол ZPL позволяет гибко формировать любые макеты: с логотипом, переменными полями, штрихкодами EAN-13, Code 128, QR. Встроенный механизм очереди печати гарантирует, что ни одна этикетка не потеряется при сбое сети.
Разработчик модуля: «ZPL-протокол настолько гибок, что позволяет печатать этикетки любого содержания без изменения кода».
Пошаговая настройка интеграции
- Установите модуль на сайт через marketplace или вручную.
- Настройте шаблоны этикеток в административной панели: задайте поля, шрифты, штрихкоды.
- Подключите принтеры по TCP/IP или через локальный агент.
- Назначьте принтеры для складов и событий (смена цены, приёмка).
- Настройте обмен с 1С через CommerceML, если требуется синхронизация.
- Проверьте печать тестовой этикетки.
Дополнительные настройки
Для принтеров на Windows-шаре используйте агент, который принимает HTTP-запросы и отправляет через WinSpool. Включите логирование ошибок в `/bitrix/zebra_errors.log`.Типичные проблемы и их решения
| Проблема | Решение |
|---|---|
| Принтер не отвечает по TCP | Проверить порт 9100, firewall, выделенный IP |
| Китайские символы на этикетке | Убедиться, что принтер поддерживает кириллицу (Zebra GC420t и выше) |
| Разрыв соединения при большой очереди | Включить повторные попытки (до 5) и уведомления |
Что входит в работу
| Компонент | Описание |
|---|---|
| Разработка модуля интеграции | Классы отправки ZPL, генерации этикеток, очередь печати |
| Настройка шаблонов этикеток | До 5 стандартных макетов (ценник, складская, отгрузочная) |
| Подключение принтеров | 1–5 устройств по TCP/IP или Windows-агенту |
| Интеграция с 1С | Автоматическая выгрузка данных в Битрикс через CommerceML |
| Обучение операторов | 2 часа онлайн-демонстрации |
| Документация | Полная техническая документация по интеграции |
| Гарантия | 6 месяцев на модуль, исправление ошибок |
Сроки
| Этап | Срок |
|---|---|
| Класс отправки ZPL на принтер | 1 день |
| Генератор шаблонов с плейсхолдерами | 2 дня |
| Очередь печати + агент | 1 день |
| Обработчики событий (смена цены, приёмка) | 2 дня |
| Административный интерфейс управления принтерами | 2 дня |
| Тестирование с реальным принтером | 1 день |
| Итого | 9–11 дней |
Как интеграция с 1С упрощает печать?
Связка 1С и Битрикс через CommerceML позволяет не дублировать данные. Товары, цены и остатки синхронизируются автоматически. Когда в 1С изменяется цена, данные обновляются в Битрикс, и тут же срабатывает печать новой этикетки. Оператору не нужно вручную запускать задание — всё происходит в фоне.
Получите консультацию по интеграции — оценим ваш проект за час. Напишите нам, и мы подготовим детальное коммерческое предложение с учётом ваших принтеров и задач.
Свяжитесь с нами, чтобы обсудить детали автоматизации склада.







