Немного ликбеза. В Битрикс элемент инфоблока отдельно, цена (несколько) отдельно, и сущность товара - отдельно. Что такое товар? Это остаток, закупочная цена, настройки уменьшения остатка, и так далее. В общем, все, кроме цены. Вот тут небольшой совет как его добавлять более оптимально.
Допустим у нас идет цикл элементов, в котором мы обновляем остатки (как раз товары). Типичный импорт.
Примерно так:
В целом да, если товаров много, а импорт вдруг частый.
До публикации я показывал код разработчикам Битрикс - они одобрили подход.
PS: В вашем коде вам надо Add передавать второй параметр false, иначе система еще и сама будет искать товар, дублируя запрос http://bxapi.ru/src/?module_id=catalog&name=CCatalogProduct::Add
Дано: проект с 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 секунды, сайт не падает.
Знаем, что бд трогать нельзя и события обновления остатков не срабатывают. Мы сильно согрешили?))))) Есть альтернативы?!)
До публикации я показывал код разработчикам Битрикс - они одобрили подход.
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 секунды, сайт не падает.
Знаем, что бд трогать нельзя и события обновления остатков не срабатывают. Мы сильно согрешили?))))) Есть альтернативы?!)
Я бы даже и на заметку взял. Спасибо.