Налаштування друку етикеток та штрих-кодів на 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С-Бітрикс

Склад отримує нову партію, кожен товар потрібно промаркувати. Працівник відкриває картку товара в Бітриксі, копіює назву, артикул, вставляє в Word, друкує. Помножте на 200 позицій. Це закінчується або помилками в етикетках, або перепечаткою половини партії.

Штрихкоди в каталозі

Штрихкоди зберігаються в таблиці b_catalog_product_barcode: PRODUCT_ID, BARCODE, TYPE (тип коду: EAN13, 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);
    // Розрахунок контрольної цифри EAN-13
    $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.

Генерація зображення штрихкода

Для генерації зображень штрихкодів використовуються PHP-бібліотеки. В екосистемі Бітрикс найчастіше зустрічається picqer/php-barcode-generator або кастомний клас на базі GD. Встановлення через 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-сторінка та відправляється на друк через браузер або конвертується в PDF. Мінімальний шаблон для друку через @media print:

<!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>

Розмір сторінки 58mm 40mm — стандарт для друкувача етикеток Zebra/Godex з шириною 58 мм.

Адміністративний інтерфейс друку

Інтерфейс вибору та друку етикеток вбудовується в адміністративну частину Бітрикс через кастомну сторінку в /bitrix/admin/. Сторінка приймає список PRODUCT_ID[] через GET-параметри (передається зі списку товарів через "Дії над вибраними"), рендерить етикетки, викликає window.print().

Для пакетного друку — кілька етикеток на одному листі A4 — використовується grid-розкладка з фіксованими розмірами комірок під формат етикетки. При друку CSS break-inside: avoid запобігає розриву етикетки між сторінками.

Інтеграція з принтером етикеток

Zebra та аналогічні принтери приймають команди ZPL (Zebra Programming Language) або EPL. Для прямої відправки на мережевий принтер з PHP:

$socket = fsockopen('192.168.1.100', 9100, $errno, $errstr, 5);
if ($socket) {
    $zpl = buildZplLabel($product, $barcode);
    fwrite($socket, $zpl);
    fclose($socket);
}

Це працює для пакетного друку без відкриття браузерного вікна та швидше для великих обсягів. При друку через браузер кожен лист потребує підтвердження — для 200 етикеток це неприйнятно.