Налаштування генерації та друку етикеток з 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування генерації та друку етикеток з 1С-Бітрікс
Проста
~1 робочий день
Часті питання

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

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування генерації і друку етикеток з 1С-Bitrix

Склад обробляє 200 замовлень на день, і кожну етикетку менеджер друкує вручну з Word-шаблону. Це 2–3 секунди на етикетку плюс помилки при копіюванні адреси. Автоматична генерація етикеток прямо з карточки замовлення у Bitrix скорочує цей час до нуля і виключає помилки.

Формати етикеток і бібліотеки

Етикетки генеруються в двох основних форматах:

PDF — для термопечаті та стандартних принтерів. Бібліотека TCPDF або mPDF. mPDF переважніше: краще підтримує кирилицю та CSS-стилізацію.

ZPL (Zebra Programming Language) — для промислових принтерів Zebra, TSC, Honeywell. Відправляється напряму на принтер без генерації PDF. Максимальна швидкість друку.

Установка mPDF через Composer:

composer require mpdf/mpdf

Шаблони етикеток

Етикетка — це HTML-шаблон з підстановкою даних. Зберігається в /local/templates/.default/labels/:

<!-- shipping_label.html -->
<div class="label" style="width:100mm; height:150mm; font-family: Arial;">
    <div class="sender">
        <strong>ТОО Магазин</strong><br>
        г. Алматы, вул. Ленина, 1
    </div>
    <div class="barcode">
        <img src="barcode_{ORDER_ID}.png" width="200">
    </div>
    <div class="recipient">
        <strong>{RECIPIENT_NAME}</strong><br>
        {RECIPIENT_ADDRESS}<br>
        {RECIPIENT_PHONE}
    </div>
    <div class="order-info">
        Замовлення #{ORDER_ID} | {ORDER_DATE}<br>
        Вага: {WEIGHT} кг | Мест: {ITEMS_COUNT}
    </div>
</div>

Генератор етикеток

namespace Custom\Warehouse;

class LabelGenerator {

    public function generateShippingLabel(int $orderId): string {
        $order = \Bitrix\Sale\Order::load($orderId);
        if (!$order) throw new \Exception("Order $orderId not found");

        $shipment = $this->getMainShipment($order);
        $propertyCollection = $order->getPropertyCollection();

        $data = [
            '{ORDER_ID}'        => $order->getId(),
            '{ORDER_DATE}'      => $order->getDateInsert()->format('d.m.Y'),
            '{RECIPIENT_NAME}'  => $propertyCollection->getPayerName()->getValue(),
            '{RECIPIENT_PHONE}' => $propertyCollection->getPhone()->getValue(),
            '{RECIPIENT_ADDRESS}' => $this->buildAddress($propertyCollection),
            '{WEIGHT}'          => $this->calculateWeight($order),
            '{ITEMS_COUNT}'     => $order->getBasket()->count(),
        ];

        $template = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/local/templates/.default/labels/shipping_label.html');
        $html = str_replace(array_keys($data), array_values($data), $template);

        return $this->htmlToPdf($html, $orderId);
    }

    private function htmlToPdf(string $html, int $orderId): string {
        $mpdf = new \Mpdf\Mpdf([
            'mode' => 'utf-8',
            'format' => [100, 150], // 100mm x 150mm
            'margin_top' => 5,
            'margin_bottom' => 5,
            'margin_left' => 5,
            'margin_right' => 5,
        ]);

        $mpdf->WriteHTML($html);

        $outputPath = '/upload/labels/label-' . $orderId . '.pdf';
        $mpdf->Output($_SERVER['DOCUMENT_ROOT'] . $outputPath, 'F');

        return $outputPath;
    }
}

Штрихкоди на етикетках

Для генерації штрихкодів (Code 128, QR) використовуйте бібліотеку picqer/php-barcode-generator:

composer require picqer/php-barcode-generator
$generator = new \Picqer\Barcode\BarcodeGeneratorPNG();
$barcode = $generator->getBarcode((string)$orderId, $generator::TYPE_CODE_128);
file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/upload/labels/barcode_' . $orderId . '.png', $barcode);

Інтеграція в адміністративну частину

Кнопка «Друк етикетки» додається в карточку замовлення через обробник OnAdminContextMenuShow або через кастомний action у sale/order_detail.php. При нажатті генерується PDF і відкривається в новій вкладці браузера.

Для пакетного друку (кілька замовлень зі списку) — action «Надрукувати етикетки» через checkbox-selection у sale/order_list.php. Генерується один багатосторінковий PDF.

Прямий друк без PDF (ZPL)

Для Zebra-принтерів етикетка формується в ZPL і відправляється напряму:

function printZebraLabel(int $orderId, string $printerIp, int $printerPort = 9100): void {
    $zpl = "^XA\n^FO50,50^A0N,30,30^FD Замовлення #$orderId ^FS\n^XZ";

    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    socket_connect($socket, $printerIp, $printerPort);
    socket_send($socket, $zpl, strlen($zpl), 0);
    socket_close($socket);
}

Сроки виконання

Обсяг робіт Строк
HTML-шаблон + PDF-генерація + кнопка 1–2 дні
Штрихкоди + пакетний друк +1 день
ZPL для Zebra + мережевий друк +1 день
Інтеграція з ярликами CDEK/Пошти окрема задача

Автоматизація друку етикеток — один з перших кроків до порядку на складі при зростанні обсягу замовлень.