Налаштування роботи з ваговим товаром на 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування роботи з ваговим товаром на 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування роботи з товарами на вагу у 1C-Bitrix

Товари на вагу продаються кілограмами або грамами, а кошик розрахований на цілі одиниці. Покупець хоче 0.75 кг сиру, форма приймає лише цілі числа, у замовленні з'являється "1 шт" замість "750 г". Це не проблема інтерфейсу — це проблема конфігурації товару в каталозі.

Дробова кількість у кошику

Bitrix підтримує дробову кількість через поле 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). Bitrix не обмежує кількість цілим числом на рівні 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 г, але Bitrix за замовчуванням бере WEIGHT як є та множить на кількість: 1000 * 0.75 = 750 — це працює правильно якщо вага задана як вага одиниці виміру.

Перевірка: якщо міра товару — грами, а WEIGHT також грами (за один грам = 1), то для 750 г вага = 1 * 750 = 750 г — правильно. Якщо міра — кілограми, а WEIGHT = 1000 г за кг, то 0.75 кг дає 750 г — теж правильно.

Штрихкоди для товарів на вагу

Товари на вагу у роздрібній торгівлі часто використовують EAN-13 з вагою у штрихкоді (формат PLU: префікс 2 + код товару + вага). Bitrix не декодує 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 г. Синхронізація з 1C має передавати остатки в тій же одиниці — це потрібно явно узгодити при налаштуванні обміну.