Столкнулся с проблемой активности элементов, если активность элементов изменена напрямую в БД. В инфоблоке около 60 тысяч товаров и каждый час им переустанавливается активность, исходя из пришедших данных. Естественно, загонять в цикл CIBlockElement::Update() и устанавливать активность для каждого элемента - плохой вариант. Поэтому был написан скрипт, который меняет активность элементов прямо в БД в таблице b_iblock_element массово. Но потом в админке и в работе API начинаются глюки: Вот все товары раздела без учета активности: https://prnt.sc/iye3f2 Но если в фильтре установить отбор только активных товаров - их не покажет, их будето нет. Также и CIBlockElement::GetList() не возвращает активные элементы Очевидно, это какой-то кеш, то ли MySQL, то ли в битриксе. Подскажите, куда копать, как очищать такой кеш после работы с БД напрямую? Очистка всего кеша битрикса не помогает.
Всё, разобрался. В выборке еще участвует индекс. Запрос к бд формируется такой:
Код
SEL ECT COUNT(DISTINCT BE.ID) as CNT
FR OM
b_iblock B
INNER JOIN b_lang L ON B.LID=L.LID
INNER JOIN b_iblock_element BE ON BE.IBLOCK_ID = B.ID
INNER JOIN b_iblock_27_index FC on FC.ELEMENT_ID = BE.ID
WHERE 1=1
AND (
(FC.SECTION_ID = 5405 AND FC.FACET_ID = 1 AND FC.VALUE_NUM = 0 AND FC.VALUE in (0))
AND ((((BE.IBLOCK_ID = '27'))))
AND ((((BE.ACTIVE='Y'))))
)
AND (((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL)))
Проблема решается обновлением индекса с помощью функции