Хранить данные о габаритах товаров с одним знаком после запятой

Сейчас данные о габаритах товаров (длина, ширина, высота) хранятся в сантиметрах в целых числах без знаков после запятой. Пишешь в админке вручную или загружаешь через CommerceML 26,7 см - записывается в CS-Cart 26 см.

У нас имеются в продаже тетради и книжки, у которых толщина менее 1 см - для них в CS-Cart толщина (в поле “высота”) записывается как 0 см. Если покупатель положил в заказ одну такую тетрадку или книжку, то это не сильно влияет на общие габариты посылки. Но если покупатель делает заказ на большое количество, то модули доставки никак не могут учесть такие тонкие товары при расчете общего габарита посылки.

Это приводит к тому, что общий габарит посылки считается некорретно. Что в свою очередь приводит к тому, что модуль доставки выбирает некорректный размер ячейки в постамате. Покупатель при оформлении заказа платит за доставку одну сумму, например, за доставку в ячейку размера S, а по факту посылка в такую ячейку не входит, ее закладывают в ячейку M, которая стоит дороже. Получается, что покупатель платит за доставку меньше, чем она стоит на самом деле, а продавцу приходится доплачивать.

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

Предложение:
Хранить в CS-Cart данные о габаритах товаров в сантиметрах с одним знаком после запятой (с миллиметрами).

5 лайков

С тем что имеем на данный момент, если я правильно понимаю логику карта, пишем в о вкладке доставки:
Допустим тетрадка 25см х 20см х 2мм
Тогда пишем во вкладке 25 х 20 х 1 и количество в коробке от 1 до 5

не нашли решение, как сделать размеры коробки с десятичной частью?

придется как-то реализовывать через скрытые характеристики товара. предложение, видимо, не актуально для большинства.

Для маркетплейсов очень актуально! Если пользователь Multi-Vendor-a проголосовал, то его голос надо умножить как минимум на 10, так как он голосует за всех своих вендоров.

1 лайк

Ставьте лайк на первом посте темы

Смог реализовать хранение данных с запятой, но пока что только через изменения в ядре и модуле commerce ml
оказалось, что очень немного нужно было изменить

fn.catalog.php (~ 2652 строка) function fn_update_product
позволяет сохранять десятичные значение при редактировании в админке

заменить

‘box_length’ => isset($_data[‘box_length’]) ? intval($_data[‘box_length’]) : (!empty($shipping_params[‘box_length’]) ? $shipping_params[‘box_length’] : 0),
‘box_width’ => isset($_data[‘box_width’]) ? intval($_data[‘box_width’]) : (!empty($shipping_params[‘box_width’]) ? $shipping_params[‘box_width’] : 0),
‘box_height’ => isset($_data[‘box_height’]) ? intval($_data[‘box_height’]) : (!empty($shipping_params[‘box_height’]) ? $shipping_params[‘box_height’] : 0),

на

‘box_length’ => isset($_data[‘box_length’]) ? floatval($_data[‘box_length’]) : (!empty($shipping_params[‘box_length’]) ? $shipping_params[‘box_length’] : 0),
‘box_width’ => isset($_data[‘box_width’]) ? floatval($_data[‘box_width’]) : (!empty($shipping_params[‘box_width’]) ? $shipping_params[‘box_width’] : 0),
‘box_height’ => isset($_data[‘box_height’]) ? floatval($_data[‘box_height’]) : (!empty($shipping_params[‘box_height’]) ? $shipping_params[‘box_height’] : 0),

app/addons/rus_exim_1c/Tygh/Commerceml/RusEximCommerceml.php (~ 1688) function dataShippingParams
загружает десятичные значения при обмене с 1С

заменить

if ($shipping_param[‘name’] == ‘box_length’) {
$product_params[‘box_length’] = (int) $p_feature_name;
}
if ($shipping_param[‘name’] == ‘box_width’) {
$product_params[‘box_width’] = (int) $p_feature_name;
}
if ($shipping_param[‘name’] == ‘box_height’) {
$product_params[‘box_height’] = (int) $p_feature_name;
}

на

if ($shipping_param[‘name’] == ‘box_length’) {
$_value = preg_replace(‘/,/i’, ‘.’, $p_feature_name);
$product_params[‘box_length’] = (float) $_value;
}
if ($shipping_param[‘name’] == ‘box_width’) {
$_value = preg_replace(‘/,/i’, ‘.’, $p_feature_name);
$product_params[‘box_width’] = (float) $_value;
}
if ($shipping_param[‘name’] == ‘box_height’) {
$_value = preg_replace(‘/,/i’, ‘.’, $p_feature_name);
$product_params[‘box_height’] = (float) $_value;
}


2 лайка

Ну, всего то) и ждать 5 лет не надо)) :man_farmer:

А почему вы решили что это именно сантиметры должны быть?
Почему не миллиметры? И проблем не было бы

1 лайк

спрашивал на форуме как-то, сказали, что сантименты подразумеваются в размерах коробки, вот поэтому и начал заморачиваться
а вот про ММ даже не задумался как-то

надо еще найти место, которое наоборот из 1С загружает в CS-Cart без округления. ну и проверить модули служб доставки, что им уходят корректные данные о габаритах. в общем, спасибо за наводку.

из 1С загружаются товары с десятичной частью в параметрах, если посмотреть в файле import.xml