Налаштування друку етикеток та штрихкодів на 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 етикеток це неприйнятно.







