Перейти к содержимому

Единицы измерения, вес и габариты товара - где хранятся и на что влияют

Разбираемся с физическими характеристиками товара: где лежат единица измерения, кратность покупки, вес и размеры и что от них зависит в заказе.

Решение

Смотрим справочник единиц измерения:

$res = CCatalogMeasure::getList([], [], false, false, ['ID', 'CODE', 'MEASURE_TITLE', 'IS_DEFAULT']);
while ($m = $res->Fetch()) {
printf("%d код=%-4s %-14s по умолчанию=%s\n",
$m['ID'], $m['CODE'], $m['MEASURE_TITLE'], $m['IS_DEFAULT']);
}
// единицы общие для установки: товар лишь ссылается на запись справочника

Единицы измерения - общий справочник установки, а не поле товара. Товар ссылается на запись, поэтому переименование единицы меняет подпись сразу везде, где она показана.

Читаем коэффициент кратности:

$res = CCatalogMeasureRatio::getList([], ['PRODUCT_ID' => $elementId], false, false, ['*']);
$ratio = $res->Fetch();
printf("кратность=%s\n", $ratio['RATIO'] ?? 1);
// коэффициент задаёт шаг покупки: продажа коробками по шесть - это ratio = 6

Коэффициент задаёт шаг покупки, а не цену. Кратность шесть означает, что в корзину нельзя положить пять штук: количество округляется до ближайшего кратного значения, и покупатель видит это как «сам поменял количество».

Заполняем вес и размеры:

CCatalogProduct::Update($elementId, [
'WEIGHT' => 1250, // граммы
'WIDTH' => 300, // миллиметры
'LENGTH' => 400,
'HEIGHT' => 120,
]);

Вес и размеры лежат в торговом каталоге, а не в свойствах инфоблока. Свойство с названием «Вес» службы доставки не видят вовсе: они читают поля торгового каталога и только их.

Проверяем, что видит расчёт доставки:

$res = CCatalogProduct::GetList([], ['ID' => $elementId], false, false,
['ID', 'WEIGHT', 'WIDTH', 'LENGTH', 'HEIGHT', 'MEASURE']);
$row = $res->Fetch();
printf("вес=%s размеры=%sx%sx%s\n", $row['WEIGHT'] ?: '-', $row['WIDTH'], $row['LENGTH'], $row['HEIGHT']);
// пустой вес службы доставки считают нулём и дают стоимость «от»

Пустой вес товара службы доставки считают нулём. Заказ на десять килограммов при этом получает стоимость доставки как за пустую коробку, и расхождение всплывает уже на складе.

Заполнять габариты стоит сразу при заведении товара. Дозаполнение каталога на десять тысяч позиций задним числом превращается в отдельный проект, а до тех пор доставка считается неверно у всех незаполненных позиций.

При обмене с учётной системой единица и коэффициент приезжают вместе с товаром. Вес и габариты выгружаются в поля торгового каталога только при правильной настройке обмена, а иначе оседают в свойствах инфоблока и остаются мёртвым грузом.

У торговых предложений свои габариты и своя единица измерения. Вес, заполненный у товара с предложениями, в расчёт не идёт: покупается предложение, и в заказ уходят его характеристики.

Типичные проблемы

Доставка считается по минимальной ставке.

У товаров пустой вес в полях торгового каталога. Службы доставки считают такой вес нулевым и берут стоимость по нижней границе.

Вес заполнен, а доставка его не видит.

Значение лежит в свойстве инфоблока, а не в поле торгового каталога. Службы доставки читают только поля каталога и ничего больше.

Количество в корзине меняется само.

У товара задан коэффициент кратности покупки. Количество округляется до ближайшего кратного значения при добавлении в корзину.

В карточке единица измерения не та.

У товара стоит единица по умолчанию из общего справочника. Нужную назначают товару явно или выгружают из учётной системы.

У товара с вариантами вес игнорируется.

В заказ идёт торговое предложение со своими характеристиками. Вес товара-владельца при этом вовсе не учитывается.

Частые вопросы

В каких единицах хранить вес и размеры?

Вес в граммах, размеры в миллиметрах: платформа рассчитывает на это. Килограммы в поле веса дают доставку в тысячу раз дороже.

Как продавать товар дробным количеством?

Единицей измерения с дробным шагом и коэффициентом, допускающим дробь. Штуки для этого не подходят по смыслу.

Можно ли задать кратность всему каталогу сразу?

Да, массовой правкой коэффициентов по отбору. Через интерфейс это делается только по одному товару.

Влияет ли единица измерения на цену?

Нет, цена задаётся за единицу товара и от справочника не зависит. Пересчёт цены за килограмм делают ценой другого типа.

Смежное

Первоисточник