Настройка печати этикеток и штрихкодов на 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка печати этикеток и штрихкодов на 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1181
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    813
  • 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 Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка печати этикеток и штрихкодов на 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 этикеток это неприемлемо.