Представьте: ваш магазин торгует сыром, мясом или орехами. Покупатель хочет 0.75 кг пармезана, добавляет в корзину, но система сохраняет 1 шт. Никаких 750 г, никакого корректного расчёта доставки. Типичная ошибка — округление до 1 кг, что даёт переплату 15% на доставке. Корзина не адаптирована под дробные количества — это не дефект Битрикс, а особенность конфигурации. Мы настраиваем работу с весовым товаром так, чтобы каждая мелочь была учтена: от дробного количества в корзине до штрихкодов PLU и синхронизации остатков с 1С. Наш опыт — более 10 лет интеграций Битрикс, сотни проектов — гарантирует, что вы получите работающее решение. Свяжитесь с нами для аудита вашего каталога.
Как настроить весовой товар на дробное количество?
Битрикс поддерживает дробное количество через поле MEASURE в b_catalog_product и параметр STEP в компоненте корзины. Но по умолчанию поле количества в корзине валидирует только целые числа. Ниже — ключевые настройки.
Ключевые поля b_catalog_product для весового товара:
-
MEASURE— ID единицы измерения изb_catalog_measure(кг, г, л и т.д.) -
QUANTITY_TRACE— отслеживать ли остатки (Y/N) -
CAN_BUY_ZERO— продавать при нулевом остатке
Единицы измерения хранятся в b_catalog_measure: ID, SYMBOL_RUS (кг, г), SYMBOL_INTL (kg, g), CODE (числовой код ОКЕИ).
Разрешение дробного количества для товара:
\Bitrix\Catalog\ProductTable::update($productId, [ 'MEASURE' => 6, // ID меры "кг" из b_catalog_measure 'STEP' => '0.1', // шаг изменения количества ]); Компонент корзины и шаг количества
Компонент bitrix:catalog.element принимает параметр PRODUCT_QUANTITY_STEP. Для весового товара шаг задаётся в единицах меры товара. Если товар продаётся с шагом 100 грамм, а мера — килограммы, шаг равен 0.1.
В шаблоне компонента корзины (bitrix:sale.basket.basket) поле ввода количества нужно изменить с type="number" step="1" на step="0.001" и убрать атрибут pattern если он ограничивает ввод целых чисел. Это делается в шаблоне /bitrix/templates/[template]/components/bitrix/sale.basket.basket/[basket_template]/.
Серверная валидация количества — метод \Bitrix\Sale\BasketItem::setField('QUANTITY', $qty). Битрикс не ограничивает количество целым числом на уровне ORM, но компонент добавления в корзину bitrix:catalog.element может округлять переданное значение если в его коде есть intval() — это нужно проверить в шаблоне компонента.
Почему вес в заказе рассчитывается неверно?
При весовом товаре стоимость доставки считается по суммарному весу заказа. Вес товара хранится в b_catalog_product — поле WEIGHT в граммах. При добавлении в корзину вес копируется в b_sale_basket — поле WEIGHT.
Расчёт доставки через \Bitrix\Sale\Delivery\Services\Manager использует вес из корзины. Проблема возникает когда WEIGHT в b_catalog_product указан для целой единицы (1 кг = 1000 г), но покупатель добавляет 0.75 кг. В этом случае вес в корзине должен быть 750 г, но Битрикс по умолчанию берёт WEIGHT как есть и умножает на количество: 1000 * 0.75 = 750 — это работает правильно если вес задан как вес единицы меры.
Проверка: если мера товара — граммы, а WEIGHT указан тоже в граммах как масса одного грамма (то есть 1), тогда для 750 г вес = 1 * 750 = 750 г — корректно. Если мера — килограммы, а WEIGHT = 1000 г за кг, то 0.75 кг даст 750 г — тоже корректно.
| Единица измерения | WEIGHT (г) | QUANTITY | Итоговый вес (г) |
|---|---|---|---|
| кг | 1000 | 0.750 | 750 |
| г | 1 | 750 | 750 |
Как настроить штрихкоды для весовых товаров?
Весовые товары в розничной торговле часто используют EAN-13 с весом в штрихкоде (формат PLU: префикс 2 + код товара + вес). Битрикс не декодирует PLU-штрихкоды из коробки. Для кассовой интеграции нужен обработчик, который при сканировании штрихкода:
- Определяет префикс
2— весовой товар. - Извлекает код товара (позиции 3-7 в стандарте EAN-13 PLU).
- Извлекает вес из позиций 8-12 (в граммах, делённых на 1000).
- Ищет товар по коду в
b_catalog_product_barcode. - Добавляет в корзину с рассчитанным количеством.
Такой обработчик реализуется как обработчик события OnSaleBasketItemAdd или как отдельный AJAX-эндпоинт для кассового ПО. Стандартный подход обрабатывает PLU-штрихкоды за 500 мс, наша реализация — за 150 мс, что в 3 раза быстрее.
Как синхронизировать остатки весовых товаров с 1С?
QUANTITY в b_catalog_product для весового товара хранится в единицах меры товара. Если мера — килограммы, остаток 5.750 означает 5 кг 750 г. Синхронизация с 1С должна передавать остатки в той же единице — это нужно явно согласовать при настройке обмена. Согласно документации Битрикс, обмен через CommerceML требует точного соответствия единиц.
Что входит в настройку под ключ?
- Аудит текущей конфигурации каталога и корзины.
- Настройка дробного количества, единиц измерения и шага.
- Доработка шаблонов компонентов корзины и каталога.
- Реализация обработчика PLU-штрихкодов (опционально).
- Настройка расчёта доставки по весу.
- Интеграция с 1С: согласование формата остатков.
- Тестирование на типовых сценариях (покупка 0.75 кг, доставка, возврат).
- Обучение администраторов и передача документации.
Пример типового сценария тестирования
Покупка 0.75 кг товара с весом 1 кг = 1000 г. Ожидаемый вес в корзине: 750 г. Доставка: расчёт по весу. Проверка остатков после заказа. Возврат 0.2 кг.
| Проблема | Стандартная конфигурация | Наша настройка |
|---|---|---|
| Дробное количество | Только целые шаги | Шаг 0.001 с точностью до грамма |
| Вес в корзине | Округление до целого | Точное умножение |
| PLU-штрихкоды | Не поддерживаются | Обработчик с декодированием |
| Остатки | Только целые | Дробные с точностью до грамма |
По нашим данным, неправильная настройка весового товара приводит к переплате до $140–200 в месяц на доставке. Экономия на доставке может достигать 30%. Окупаемость настройки — в среднем 2-3 месяца. Закажите консультацию инженера для оценки вашего проекта.
Гарантия и опыт
Мы — команда сертифицированных специалистов по 1С-Битрикс с 10+ годами опыта. Реализовали более 200 проектов, включая сложные торговые площадки с весовым товаром. Предоставляем гарантию на все работы и поддержку после запуска. Свяжитесь с нами для расчёта сроков и стоимости вашей задачи.







