Как избежать проблем с маркировкой на 1С-Битрикс
Интернет-магазин одежды с 50 000 товаров. Каждый заказ требует проверки кода маркировки. Без автоматизации менеджеры тратят часы, а каждый десятый код оказывается уже проданным — возвраты, штрафы до $2.7k–3.9k. С момента введения обязательной маркировки большинство товарных групп подпадает под систему Честный знак. Без автоматизации вы рискуете не только выручкой, но и репутацией. Наши инженеры настраивают маркировку товаров на 1С-Битрикс так, чтобы коды резервировались при добавлении в корзину, передавались в кассовый чек по 54-ФЗ и корректно выбывали из оборота. Ошибки в маркировке — одна из главных причин штрафов при проверках, а средний штраф достигает $2.7k–3.9k. Автоматизация исключает человеческий фактор и гарантирует соответствие законодательству. Работаем под ключ с гарантией результата.
Какие сложности возникают при интеграции с Честным знаком?
Основные проблемы:
- Некорректное хранение кодов. Если коды хранятся в обычном свойстве инфоблока, при больших объёмах (10 000+ кодов) выборка замедляется, а транзакционная целостность не гарантируется. Это ведёт к дублям и продаже уже выбывших кодов.
- Ошибки при передаче в чек. Код маркировки должен передаваться в теге 1163 (DataMatrix). Не все кассовые модули умеют это из коробки — нужна доработка.
- Отсутствие резервирования. Без механизма резервирования один код может быть продан дважды, что грозит отказом в фискализации и штрафом.
- Некорректное выбывание. После продажи код должен выбыть из оборота в ГИС МТ. Если этого не сделать — расхождение данных и блокировка остатков.
Как хранить коды маркировки в Битрикс?
Мы используем два подхода — выбор зависит от объёмов. Сравним их:
| Критерий | Свойство инфоблока | Отдельная таблица |
|---|---|---|
| Скорость выборки | Медленнее при >10 000 кодов | Быстро с индексами |
| Сложность реализации | Просто (добавить свойство) | Требует создания таблицы и обработчиков |
| Занимаемое место | В таблице свойств инфоблока | Отдельная таблица |
| Поддержка транзакций | Нет | Да (InnoDB) |
| Подходит для | До 10 000 кодов | Любые объёмы |
Для большинства проектов с оборотом от 20 000 кодов в год мы рекомендуем отдельную таблицу. Она работает в 10 раз быстрее при больших объёмах. Вот как её создать:
CREATE TABLE b_marking_codes ( ID INT AUTO_INCREMENT PRIMARY KEY, PRODUCT_ID INT NOT NULL, CODE VARCHAR(255) NOT NULL UNIQUE, STATUS ENUM('available', 'reserved', 'sold', 'returned') DEFAULT 'available', ORDER_ID INT NULL, DATE_SOLD DATETIME NULL, INDEX idx_product_status (PRODUCT_ID, STATUS), INDEX idx_code (CODE) ); Пример резервирования кода при добавлении в корзину
Резервирование выполняется на событии `OnSaleBasketBeforeSaved`. Используем блокировку `SELECT ... FOR UPDATE`, чтобы избежать race condition. После успешной блокировки статус меняется на 'reserved', и код связывается с ID заказа. Если код уже зарезервирован, подбирается следующий свободный.Как передать код маркировки в кассовый чек по 54-ФЗ?
Согласно 54-ФЗ, код маркировки должен передаваться в кассовый чек. Мы дорабатываем обработчик кассового модуля таким образом, чтобы код подтягивался из свойств позиции корзины. Пример для АТОЛ Онлайн:
AddEventHandler('sale', 'OnCashboxBuildCheck', function($checkData) { foreach ($checkData['ITEMS'] as &$item) { $basketItemId = $item['BASKET_ID'] ?? null; if ($basketItemId) { $res = \Bitrix\Sale\Internals\BasketPropertiesTable::getList([ 'filter' => ['BASKET_ID' => $basketItemId, 'CODE' => 'MARKING_CODE'], 'select' => ['VALUE'] ]); if ($prop = $res->fetch()) { $item['MARKING_CODE'] = $prop['VALUE']; } } } return $checkData; }); Аналогично обрабатывается резервирование кода при добавлении в корзину (событие OnSaleBasketBeforeSaved) и списание после оплаты (OnSalePaymentEntitySaved).
Как мы решаем эти задачи: разбор кейса из нашей практики
Недавно настроили маркировку для клиента — интернет-магазина одежды с 50 000 товаров и 300 000 кодов в год. Исходно коды хранились в свойстве инфоблока — выборка занимала до 2 секунд, часто возникали конфликты резервирования. Мы перенесли данные в отдельную таблицу, добавили механизм блокировок SELECT ... FOR UPDATE и переработали обработчики корзины. Результат: скорость обработки заказа сократилась на 40%, а ошибки продажи без кода ушли в ноль. Экономия клиента от исключения штрафов и возвратов составила более $4.5k–6.5k в год.
Процесс работы
- Аналитика — изучаем структуру каталога, нагрузку, текущую кассу и обмен с 1С.
- Проектирование — выбираем архитектуру хранения, проектируем резервирование и выбывание.
- Реализация — пишем код хранения, обработчики корзины и кассы, импорт кодов.
- Тестирование — проверяем все сценарии: резервирование, отмена, возврат, многопоточные продажи.
- Деплой — накатываем на боевой сервер, настраиваем мониторинг.
- Обучение — передаём документацию, обучаем менеджеров и бухгалтерию.
Сроки и что входит в работу
Ориентировочные сроки: базовая настройка (до 10 000 кодов) — 5-7 рабочих дней, комплексная (от 100 000 кодов) — до 3 недель.
| Этап | Длительность |
|---|---|
| Реализация хранения кодов (свойство или таблица) | 1-2 дня |
| Обработчики резервирования и списания | 2-3 дня |
| Доработка кассового модуля для передачи кода в чек | 1-2 дня |
| Настройка импорта кодов из файлов поставщика | 1 день |
| Интеграция с 1С (по необходимости) | 2-5 дней |
| Документация и обучение сотрудников | 1 день |
| Гарантийная поддержка 3 месяца | включена |
Наши инженеры имеют сертификаты 1С-Битрикс и 10+ лет опыта в разработке. На счету более 50 проектов по интеграции маркировки. Свяжитесь с нами — оценим ваш проект бесплатно. Для консультации и аудита вашего каталога оставьте заявку — мы проанализируем структуру и предложим оптимальное решение.
Типичные ошибки при настройке маркировки
- Хранение кодов в общих свойствах без индексов — приводит к тормозам при росте каталога.
- Отсутствие резервирования до оплаты — риск продажи одного кода дважды.
- Неправильное заполнение тега 1163 — касса отказывается фискализировать чек.
- Игнорирование возвратов — если код не возвращается в оборот, остаток расходится с ГИС МТ.
Мы гарантируем, что после нашей настройки все эти проблемы будут устранены. Получите бесплатную консультацию инженера.







