Настройка работы с весовым товаром на 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С-Битрикс

Весовой товар продаётся килограммами или граммами, а корзина рассчитана на целые штуки. Покупатель хочет 0.75 кг сыра, форма принимает только целые числа, в заказе появляется «1 шт» вместо «750 г». Это не проблема интерфейса — это проблема конфигурации товара в каталоге.

Дробное количество в корзине

Битрикс поддерживает дробное количество через поле 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 г — тоже корректно.

Штрихкоды для весовых товаров

Весовые товары в розничной торговле часто используют EAN-13 с весом в штрихкоде (формат PLU: префикс 2 + код товара + вес). Битрикс не декодирует PLU-штрихкоды из коробки. Для кассовой интеграции нужен обработчик, который при сканировании штрихкода:

  1. Определяет префикс 2 — весовой товар.
  2. Извлекает код товара (позиции 3-7 в стандарте EAN-13 PLU).
  3. Извлекает вес из позиций 8-12 (в граммах, делённых на 1000).
  4. Ищет товар по коду в b_catalog_product_barcode.
  5. Добавляет в корзину с рассчитанным количеством.

Такой обработчик реализуется как обработчик события OnSaleBasketItemAdd или как отдельный AJAX-эндпоинт для кассового ПО.

Остатки весовых товаров

QUANTITY в b_catalog_product для весового товара хранится в единицах меры товара. Если мера — килограммы, остаток 5.750 означает 5 кг 750 г. Синхронизация с 1С должна передавать остатки в той же единице — это нужно явно согласовать при настройке обмена.