Немного ликбеза. В Битрикс элемент инфоблока отдельно, цена (несколько) отдельно, и сущность товара - отдельно. Что такое товар? Это остаток, закупочная цена, настройки уменьшения остатка, и так далее. В общем, все, кроме цены. Вот тут небольшой совет как его добавлять более оптимально.
Допустим у нас идет цикл элементов, в котором мы обновляем остатки (как раз товары). Типичный импорт.
Примерно так:
В целом да, если товаров много, а импорт вдруг частый.
До публикации я показывал код разработчикам Битрикс - они одобрили подход.
PS: В вашем коде вам надо Add передавать второй параметр false, иначе система еще и сама будет искать товар, дублируя запрос
Дано: проект с 8000 единиц товара, обновление остатков из 1с файлом csv каждые 5 минут.
Товар это 2 инфоблока ТОВАР (типа артикул) - ПРЕДЛОЖЕНИЯ (типа штрихкод)
Решение:
Реализовывали 3 способами. Стандартный API (сайт ложился), Через обращение в db api (сайт ложился).
В итоге добавили поле quantity_new в b_catalog_product
и делаем что-то вроде
LOAD DATA INFILE во временную таблицу
'UPD ATE `b_catalog_product` SE T `QUANTITY_NEW` = из временной таблицы
меняем местами QUANTITY_NEW QUANTITY
Все занимает 4 секунды, сайт не падает.
Знаем, что бд трогать нельзя и события обновления остатков не срабатывают. Мы сильно согрешили?))))) Есть альтернативы?!)
$dbProduct = CCatalogProduct::GetList( array(),array('ID' => $arElement['ID']) ); if($arProduct = $dbProduct->Fetch()) { if(CCatalogProduct::Update($arProduct['ID'], $arProductFields)) { file_put_contents($logPaths['price'], "Товар обновлен: " . $arProduct['ID'] . "\n", FILE_APPEND); } else { file_put_contents($logPaths['price'], "!!! Товар не обновлен: " . $arElement['ID'] . "\n", FILE_APPEND); } } else { $arProductFields['ID'] = $arElement['ID']; if(CCatalogProduct::Add($arProductFields)) { file_put_contents($logPaths['price'], "Добавили параметры товара к элементу каталога: " . $arElement['ID'] . "\n", FILE_APPEND); } else { file_put_contents($logPaths['price'], "!!! Ошибка добавления товара: " . $arElement['ID'] . "\n", FILE_APPEND); } }До публикации я показывал код разработчикам Битрикс - они одобрили подход.
PS: В вашем коде вам надо Add передавать второй параметр false, иначе система еще и сама будет искать товар, дублируя запрос
Товар это 2 инфоблока ТОВАР (типа артикул) - ПРЕДЛОЖЕНИЯ (типа штрихкод)
Решение:
Реализовывали 3 способами. Стандартный API (сайт ложился), Через обращение в db api (сайт ложился).
В итоге добавили поле quantity_new в b_catalog_product
и делаем что-то вроде
LOAD DATA INFILE во временную таблицу
'UPD ATE `b_catalog_product` SE T `QUANTITY_NEW` = из временной таблицы
меняем местами QUANTITY_NEW QUANTITY
Все занимает 4 секунды, сайт не падает.
Знаем, что бд трогать нельзя и события обновления остатков не срабатывают. Мы сильно согрешили?))))) Есть альтернативы?!)
Я бы даже и на заметку взял. Спасибо.