Доброго времени суток. Клиент просит изменить коэффициент единицы измерения с 1 на 0.1, если у товара единица измерения КГ. В апи ничего не нашел. Может кто сталкивался с таким траблом?
Написал вот такой код, но почему-то не работает. Из 1С товар уже приходит со значение CATALOG_RATIO = 1. Подскажите где ошибка? <? AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("AddDiscountForElement", "OnAfterIBlockElementAddHandler"));
class AddDiscountForElement { // создаем обработчик события "OnAfterIBlockElementAdd" function OnAfterIBlockElementAddHandler(&$arFields) { // проверяем единицы измерения, если =кг, то изменяем коэфициент с 1 на 0.1 if (CModule::IncludeModule("catalog")) { $db_propss = CIBlockElement::GetProperty($arFields["IBLOCK_ID"], $arFields["ID"], array("sort" => "asc"), Array("CODE"=>"CML2_BASE_UNIT")); if($ar_propss = $db_propss->Fetch()) $EDINICA_IZMERENIA = intval($ar_propss["DESCRIPTION"]); if($EDINICA_IZMERENIA == 4){ $db_res = CCatalogMeasureRatio::add( array("PRODUCT_ID" => $arFields["ID"], "RATIO" => 0.1) ); } } } }
Вы не правильно передаёте параметры в функцию CCatalogMeasureRatio::update( int ID, array arFields, ); ID - ID коэффициента в базе arFields - Массив параметров: PRODUCT_ID - код товара или торгового предложения (ID элемента инфоблока) RATIO – коэффициент единицы измерения Что бы узнать айди нужного коэффициента используйте - CCatalogMeasureRatio::getList ( $arOrder = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array() ); Функция вернёт: ID - ID коэффициента в базе PRODUCT_ID - код товара или торгового предложения (ID элемента инфоблока) RATIO – коэффициент единицы измерения
Станислав Шарапов написал: Вы не правильно передаёте параметры в функцию CCatalogMeasureRatio::update( int ID, array arFields, ); ID - ID коэффициента в базе arFields - Массив параметров: PRODUCT_ID - код товара или торгового предложения (ID элемента инфоблока) RATIO – коэффициент единицы измерения Что бы узнать айди нужного коэффициента используйте - CCatalogMeasureRatio::getList ( $arOrder = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array() ); Функция вернёт: ID - ID коэффициента в базе PRODUCT_ID - код товара или торгового предложения (ID элемента инфоблока) RATIO – коэффициент единицы измерения
у меня коэффициенты добавились со значением IS_DEFAULT равным N и впоследствии getlist мне не показывал эти записи, а попытка обновить или добавить запись с таким же значением коэффициента заканчивалась ошибкой типа
Код
Mysql query error: (1062) Duplicate entry '12976-100' for key 'IX_B_CATALOG_MEASURE_RATIO' (400)
INS ERT IN TO `b_catalog_measure_ratio`(`PRODUCT_ID`, `RATIO`, `IS_DEFAULT`) VALUES (12976, '100', 'Y')
Неверно. Правильный вызов - CCatalogMeasureRatio::update(). Класс CCatalogMeasureRatioAll не предназначен для прямого использования и не описан в autoload модуля.
Не надо сверлить зубы через задний проход дрелью от Сваровски
У меня фатальная битва с 1С-ником по поводу коэффициента, он категорически не поймет почему должен передавать единицу измерения в выгрузке. Есть электроды, измеряются в тоннах, на складе 0,002т, продается пачками по 0,005т. Коэффициент в выгрузке передается "1" <БазоваяЕдиница Код="168 " НаименованиеПолное="Тонна"> <Пересчет> <Единица>168</Единица> <Коэффициент>1</Коэффициент> </Пересчет> </БазоваяЕдиница> Но, тут и я залип, даже, если я в выгрузке (для эксперимента) ставлю Коэффициент 0.005 - то при загрузке на сайт коэффициент в товаре не меняется. В чем беда? Куда копать?
У меня примерно тот же вопрос, нужно поднять обмен между бус и 1с далион ум про. в 1с, версия модуля обмена с битриксом в 1с - 4.0.5.1 Все вроде работает кроме передачи коэффициентов единиц измерения. Ни далион, ни битрикс как я понимаю не умеют обмениваться ими. Меня смущает то, что в карточке товара в битриксе есть поле "коэффициент", но в документации https://dev.1c-bitrix.ru/api_help/sale/xml/index.php этого поля для файла import.xml нет, зато есть тут - documents.xml. Разработчики, это к вам вопрос. Делать через костыли типа это https://camouf.ru/blog-note/9255/ не хочется, надеюсь по понятным причинам. Хотелось бы узнать если официальный метод. Если такового нет, как можно выйти из положения?