Сверка каталога после обмена - числа, расхождения, отчёт
Проверяем каталог после сеанса обмена: считаем не общее число товаров, а те разрезы, в которых обычно и прячется потеря.
Решение
Снимаем ключевые числа по разрезам:
$iblock = 5;printf("всего=%d активных=%d без раздела=%d\n", CIBlockElement::GetList([], ['IBLOCK_ID' => $iblock], []), CIBlockElement::GetList([], ['IBLOCK_ID' => $iblock, 'ACTIVE' => 'Y'], []), CIBlockElement::GetList([], ['IBLOCK_ID' => $iblock, 'SECTION_ID' => false], []));// общее число почти всегда в порядке: расхождение прячется в разрезахОбщее число товаров - самый бесполезный показатель из всех. Каталог с тысячей позиций, из которых треть неактивна и не привязана к разделам, по общему счёту выглядит здоровым.
Ищем позиции без цены и без картинки:
SELECT COUNT(*) FROM b_iblock_element eLEFT JOIN b_catalog_price p ON p.PRODUCT_ID = e.ID AND p.CATALOG_GROUP_ID = 1WHERE e.IBLOCK_ID = 5 AND e.ACTIVE = 'Y' AND p.ID IS NULL;-- то же самое для DETAIL_PICTURE: активные товары без изображенияТовар без цены не купить, а товар без картинки не выбрать. Эти два разреза отвечают на вопрос «что сломалось» точнее, чем журнал обмена, потому что показывают итог, а не ход сеанса.
Сравниваем с тем, что приехало в файле:
grep -c '<Товар>' /home/bitrix/www/upload/1c_catalog/import*.xmlgrep -c '<Предложение>' /home/bitrix/www/upload/1c_catalog/offers*.xml# число позиций в файле и есть ожидаемый результат сеансаФайл обмена задаёт ожидание, а база показывает случившийся факт. Разница между ними - это и есть объём потери, и её видно сразу, без разбора сообщений об ошибках.
Ставим сверку в расписание и шлём отчёт:
if ($withoutPrice > 0 || $withoutPicture > 50) { CEvent::Send('CATALOG_SYNC_REPORT', SITE_ID, [ 'NO_PRICE' => $withoutPrice, 'NO_PICTURE' => $withoutPicture, ]);}// письмо приходит, только когда есть о чём сообщатьОтчёт присылают только при найденном расхождении. Ежедневное письмо «всё хорошо» перестают читать через неделю, а письмо, приходящее раз в месяц, читают с первой строки.
Сверять сразу после сеанса не стоит: часть работы платформа доделывает отложенно. Разумный порядок - сверка через полчаса после окончания обмена, а не в ту же минуту.
Сверку удобно держать тем же скриптом, что и выгрузку прайса. Оба задания читают одни и те же разрезы каталога, и общий код избавляет от двух расходящихся представлений о том, что считать нормой.
Пороги в отчёте задают по опыту проекта, а вовсе не по нулю. Пять товаров без картинки на каталоге в двадцать тысяч позиций - обычное дело, а сто новых за ночь - повод разбираться.
Типичные проблемы
Числа сходятся, а покупатели жалуются.
Сверка идёт по общему числу товаров без всяких разрезов. Потеря прячется в неактивных позициях и в товарах без цены.
Отчёт приходит с ложной тревогой.
Сверка запущена сразу после сеанса, до конца отложенных работ. Проверку сдвигают на полчаса после окончания обмена.
Товары есть, а купить нельзя.
У части позиций нет цены нужного типа. Разрез по цене показывает это сразу, а журнал обмена - нет.
Отчёты перестали читать.
Письмо приходит каждый день независимо от результата сверки. Сообщать стоит только о найденных расхождениях.
Сверка не видит проблем с вариантами.
Считаются только сами товары, а предложения нет. У каталога с вариантами их считают отдельным разрезом.
Частые вопросы
Какие разрезы считать обязательными?
Активные без цены, активные без картинки, без раздела и число предложений. Этих четырёх хватает для ежедневной сверки.
Как понять, сколько позиций ожидать?
По числу элементов в файле обмена. Оно же показывает, был ли сеанс полным или частичным.
Кому слать отчёт?
Тому, кто может исправить: контент-менеджеру и ответственному за учётную систему. Разработчику - только при технических ошибках.
Нужно ли хранить историю сверок?
Да, хотя бы числа по дням. Тогда видно, когда именно началось расхождение, а не только что оно есть.
Смежное
-
Обмен каталогом с 1С - оглавление подтемы
-
Журнал обмена: как читать и что означают его сообщения - ход сеанса вместо итога
-
Не выгружаются товары из 1С - когда расхождение большое
-
Частичный обмен: выгрузка только изменений и её последствия - почему приехало меньше ожидаемого
-
Обмен с 1С и HTTP - устройство обмена целиком
-
Ручная загрузка файла обмена: когда 1С не достучится до сайта - ручной разбор файлов выгрузки
-
Аудит каталога: товары без цены, картинок, дубли артикулов - проверка каталога без сверки с учётной системой