Интеграция 1С-Битрикс с принтерами этикеток Zebra

Ручная печать этикеток Zebra через Excel и ZDesigner замедляет работу и приводит к ошибкам в штрихкодах и ценах. Мы автоматизируем этот процесс, интегрируя 1С-Битрикс с принтерами Zebra: этикетки формируются и печатаются автоматически при изменении цены или поступлении товара. Наша команда реализует проект под ключ — от настройки очереди печати до поддержки после внедрения.

Интеграция 1С-Битрикс с принтерами этикеток Zebra

Интеграция с 1ССредний~1-2 недели
Часто задаваемые вопросы

Принтер этикеток 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-протокол настолько гибок, что позволяет печатать этикетки любого содержания без изменения кода».

Пошаговая настройка интеграции

  1. Установите модуль на сайт через marketplace или вручную.
  2. Настройте шаблоны этикеток в административной панели: задайте поля, шрифты, штрихкоды.
  3. Подключите принтеры по TCP/IP или через локальный агент.
  4. Назначьте принтеры для складов и событий (смена цены, приёмка).
  5. Настройте обмен с 1С через CommerceML, если требуется синхронизация.
  6. Проверьте печать тестовой этикетки.
Дополнительные настройки Для принтеров на 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С изменяется цена, данные обновляются в Битрикс, и тут же срабатывает печать новой этикетки. Оператору не нужно вручную запускать задание — всё происходит в фоне.

Получите консультацию по интеграции — оценим ваш проект за час. Напишите нам, и мы подготовим детальное коммерческое предложение с учётом ваших принтеров и задач.

Свяжитесь с нами, чтобы обсудить детали автоматизации склада.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1543
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1060
  • Разработка виджета онлайн-записи на прием для медицинского центра
    Разработка виджета онлайн-записи на прием для медицинского центра
    837
  • Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    928
  • Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    865
  • Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1223