Інтеграція 1С-Бітрікс з принтерами етикеток Zebra

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

Інтеграція 1С-Бітрікс з принтерами етикеток Zebra

Інтеграція з 1ССередній~1-2 тижні
Часті запитання

Принтер етикеток Zebra — потужний пристрій, але без правильної інтеграції його потенціал не використовується. Оператори вручну копіюють дані з Бітрікс у Excel, потім друкують через ZDesigner. Це повільно та загрожує помилками: штрихкоди плутаються, ціни застарівають. Наша команда — сертифіковані розробники Бітрікс із 10+ роками досвіду та понад 40 реалізованими проєктами — автоматизує друк етикеток безпосередньо з вашого сайту. При зміні ціни, надходженні товару або відвантаженні етикетка формується та надсилається на принтер 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