Цены не обновились после обмена - разбор причин
В учётной системе цена новая, на сайте по-прежнему старая. Разбираем случай, когда цены есть, но прежние: причины идут по убыванию частоты.
С чего начать
Смотрим цену товара прямо в базе сайта:
$rows = \Bitrix\Catalog\PriceTable::getList(['filter' => ['=PRODUCT_ID' => $id], 'select' => ['CATALOG_GROUP_ID', 'PRICE', 'CURRENCY', 'TIMESTAMP_X']])->fetchAll();print_r($rows);// время правки у каждой цены показывает, какой тип обмен трогал последним// новая цена в базе означает, что обмен отработал и разбор идёт в сторону витриныЭтот шаг делит поиск надвое и экономит час работы. Старая цена в базе - вопрос к обмену, новая цена в базе при старой на витрине - вопрос к кэшу.
Смотрим, какой тип цены показывает витрина:
foreach (\Bitrix\Catalog\GroupTable::getList(['select' => ['ID', 'NAME', 'XML_ID']])->fetchAll() as $g) { printf("%d %s xml=%s\n", $g['ID'], $g['NAME'], $g['XML_ID']);}// тип цены компонента задан в параметрах его вызова в шаблоне сайтаТипов цен на сайте обычно больше одного, и обмен обновляет не все. Свежая цена в одном типе при старой в другом - самая частая причина расхождения витрины и учётной системы.
Читаем журнал обмена по шагам:
tail -80 /home/bitrix/www/bitrix/catalog_export/1c_exchange.log | grep -iE 'цен|price|ошиб'ls -la /home/bitrix/www/upload/1c_catalog/ | tail -5# файлы выгрузки называют шаг: import - товары, offers - предложения и ценыЦены обычно приезжают отдельным файлом вместе с предложениями. Обрыв обмена после первого шага оставляет каталог с обновлёнными названиями и старыми ценами.
Проверяем, менялся ли товар вообще:
$el = \CIBlockElement::GetList([], ['ID' => $id], false, false, ['ID', 'TIMESTAMP_X', 'XML_ID'])->Fetch();print_r($el); // время правки за сегодня означает, что товар обмен затронул// внешний код пустой - товар заведён руками и в выгрузку не попадает вовсеПричины
-
Обмен обновил другой тип цены, а не тот, что на витрине примерно 30% случаев
ПризнакУ товара несколько типов цен, и свежая цена появилась не в том, который выводит витрина.
ПроверкаСравниваем время правки у всех типов цен товара и тип цены в параметрах компонента.
Что делатьСводим витрину и обмен на один тип цены либо доносим внешний код нужного вида цен.
-
Обмен выгружает только изменения, а номенклатура не менялась примерно 25% случаев
ПризнакЦена изменилась только у части товаров, остальные приехали со старыми значениями.
ПроверкаСмотрим время правки товара на сайте: у необновлённых оно осталось прежним.
Что делатьЗапускаем полную выгрузку каталога вместо выгрузки изменений и сверяем результат.
-
Витрина отдаёт цену из кэша примерно 20% случаев
ПризнакВ карточке административного раздела цена новая, а на витрине по-прежнему старая.
ПроверкаОткрываем страницу товара под своей учётной записью и сравниваем цену с базой.
Что делатьСбрасываем кэш каталога и композит, а обмену включаем очистку кэша после шага.
-
Поверх цены работает скидка или правило корзины примерно 15% случаев
ПризнакНа витрине показаны две цены сразу или значение, которого нет ни в одном типе цен.
ПроверкаСмотрим действующие правила корзины и скидки на товар в его карточке.
Что делатьОтключаем лишнее правило или переносим скидку в учётную систему к самой цене.
-
Обмен оборвался до шага с ценами примерно 10% случаев
ПризнакНазвания и описания товаров обновились, а цены и остатки остались прежними.
ПроверкаЧитаем журнал обмена: последний успешный шаг назван там прямо, вместе со временем.
Что делатьУвеличиваем время выполнения шага и размер порции, затем повторяем обмен целиком.
Частые вопросы
Почему обмен прошёл без ошибок, а цены прежние?
Чаще всего свежая цена приехала в другой тип цены, а витрина выводит прежний. Обмен при этом честно отработал и об ошибке сообщать не будет.
Где витрина берёт тип цены для показа?
В параметрах компонента каталога, списком кодов типов цен. Тип, которого там нет, покупателю не показывается, даже если цена в базе свежая.
Почему цена обновилась не у всех товаров?
Так работает выгрузка только изменений: она отдаёт то, что менялось в номенклатуре. Изменение цены документом номенклатуру не трогает, и товар в выгрузку не попадает.
Как заставить витрину показать новую цену сразу?
Сбросить кэш каталога и композитную страницу товара. Автоматический сброс включают в настройках инфоблока признаком очистки кэша при изменении.
Цена на витрине не совпадает ни с одним типом цен.
Значит, поверх неё работает скидка или правило корзины. Их смотрят в карточке товара и в списке правил работы с корзиной.
Смежное
- Цены и склады при обмене - оглавление подтемы
- Выгрузка цен из 1С: типы цен, единицы, частичный обмен - как устроен обмен ценами
- Не выгружаются цены и остатки из 1С: причины по убыванию частоты - когда цен нет вовсе, а не устарели
- Скидки и ручные цены при обмене: что перезаписывает обмен - когда цену меняет скидка
- Частичный обмен: выгрузка только изменений и её последствия - почему обновились не все товары
- Журнал обмена: как читать и что означают его сообщения - где виден оборванный шаг
- Долгий обмен и обрывы: шаг, память, время выполнения - когда обмен не доходит до цен
- Обмен с 1С и HTTP - устройство обмена целиком