Настройка кодов маркировки Data Matrix на 1С-Битрикс
Код Data Matrix для маркировки — это двумерный штрихкод, который кодирует идентификатор товарной единицы (GTIN), серийный номер и криптозащитный элемент. На уровне Битрикса задача сводится к: принять коды от поставщика или системы маркировки, сохранить в БД, отобразить на этикетке при необходимости и списать при продаже.
Структура кода Data Matrix в системе маркировки
Полный код маркировки имеет вид: 01 + GTIN (14 знаков) + 21 + серийный номер (до 20 знаков) + криптохвост. Пример:
0104607086000058215t2&/u+K<K)O
Расшифровка: 01 — идентификатор применения (Application Identifier) для GTIN, 21 — AI для серийного номера. Разбор кода в PHP:
function parseMarkingCode(string $code): array {
// GS1 DataMatrix формат
preg_match('/^01(\d{14})21(.{1,20})(.*)$/u', $code, $matches);
return [
'gtin' => $matches[1] ?? null,
'serial' => $matches[2] ?? null,
'crypto' => $matches[3] ?? null,
];
}
Крипто-хвост содержит нечитаемые символы группового разделителя (GS, ASCII 29). При хранении в MySQL убедитесь, что колонка utf8mb4 и тип данных позволяет хранить такие символы — используйте VARBINARY(200) или VARCHAR(200) с utf8mb4_bin collation.
Генерация и печать этикеток
Иногда требуется генерировать изображение Data Matrix для печати этикеток. PHP-библиотека tecnickcom/tcpdf умеет рендерить Data Matrix. Через Composer:
composer require tecnickcom/tcpdf
Генерация изображения:
$pdf = new \TCPDF();
$pdf->write2DBarcode(
$markingCode,
'DATAMATRIX',
$x, $y, $width, $height,
['border' => false, 'padding' => 1]
);
В Битриксе интегрируете в административный раздел: на странице просмотра заказа добавляете кнопку «Печать этикеток», которая генерирует PDF с кодами для всех маркированных товаров в заказе. PDF-генерацию выполняет AJAX-обработчик в /local/ajax/print_labels.php.
Сканирование кодов при приёмке
Если товары принимаются на складе и нужно сканировать Data Matrix при приёмке в Битриксе — создаёте административный интерфейс с полем для ввода кода (фокус на поле, сканер отправляет код и Enter). После ввода кода:
- Парсите код, извлекаете GTIN и серийный номер
- Ищете товар в каталоге по GTIN (свойство
GTINвb_iblock_element_prop_s*) - Создаёте запись в
b_local_marking_codeсо статусомreceived - Опционально — отправляете подтверждение приёмки в ГИС МТ
Для быстрой работы с большим количеством кодов — батчевая запись через INSERT INTO ... VALUES (...), (...), (...) или через ORM D7 addMulti().
Проверка кода при продаже
Перед оформлением заказа покупателя или при сборке заказа — проверяете статус кода. Код должен быть в статусе received (есть на складе) и не должен быть уже продан или аннулирован.
При обработке заказа на сборку — кладовщик сканирует коды маркировки товаров из заказа. Если код совпадает с ожидаемым товаром и статус корректный — позиция отмечается как собранная.
При отгрузке — все коды из заказа переводятся в статус sold и ставятся в очередь на отправку уведомления в ГИС МТ.
Возвраты и повторная активация кодов
При возврате товара код маркировки нужно «вернуть в оборот». В ГИС МТ есть операция возврата — статус кода меняется с sold на active. В Битриксе при обработке возврата (событие OnSaleOrderReturn или ручная обработка менеджером) переводите код в статус returned и отправляете уведомление о возврате в ГИС МТ.







