Перейти к содержимому

Деактивация товаров при обмене - что происходит с исчезнувшими позициями

Разбираемся, почему снятые с продажи позиции остаются на витрине, и убираем то, чего в учётной системе больше нет.

Решение

Смотрим, когда товары обновлялись в последний раз:

$res = CIBlockElement::GetList(['TIMESTAMP_X' => 'ASC'], [
'IBLOCK_ID' => 5,
'ACTIVE' => 'Y',
'<TIMESTAMP_X' => date('d.m.Y', strtotime('-7 days')),
], false, ['nTopCount' => 20], ['ID', 'NAME', 'TIMESTAMP_X', 'XML_ID']);
while ($row = $res->GetNext()) {
printf("%-30s обновлён=%s код=%s\n",
mb_substr($row['NAME'], 0, 30), $row['TIMESTAMP_X'], $row['XML_ID']);
}

Товары, не обновлявшиеся дольше периода обмена, - главные кандидаты в исчезнувшие. Обмен трогает каждую приехавшую позицию, и дата изменения у неё обновляется даже без правки данных.

Проверяем режим выгрузки на стороне учётной системы:

Окно терминала
# в файле каталога видно, полная это выгрузка или только изменения
grep -o 'СодержитТолькоИзменения>[^<]*' \
/home/bitrix/www/upload/1c_catalog/import*.xml | head -3

При выгрузке только изменений сайт получает часть каталога и не имеет права решать, что делать с остальными позициями. Деактивация исчезнувших товаров работает только при полной выгрузке.

Включаем деактивацию в настройках приёма:

// поведение с товарами, которых нет в очередной полной выгрузке
COption::SetOptionString('catalog', '1C_TRANSLIT_ON_ADD', 'Y');
COption::SetOptionString('catalog', '1C_DEACTIVATE', 'Y'); // снимать с публикации
COption::SetOptionString('catalog', '1C_DELETE', 'N'); // не удалять насовсем

Деактивация снимает товар с витрины, оставляя его в базе. Удаление разрывает связи с заказами и историей продаж, поэтому его включают только осознанно и на свежих каталогах.

Снимаем с публикации остатки прошлого каталога:

$res = CIBlockElement::GetList([], ['IBLOCK_ID' => 5, 'ACTIVE' => 'Y',
'<TIMESTAMP_X' => $lastExchangeDate], false, false, ['ID']);
$el = new CIBlockElement();
while ($row = $res->Fetch()) {
$el->Update($row['ID'], ['ACTIVE' => 'N']); // разово, после сверки списка
}

Разовая чистка нужна там, где деактивация была выключена месяцами. Список перед запуском обязательно просматривают: одна ошибка в дате отправляет в архив половину живого каталога.

Товары, заведённые на сайте руками, при полной выгрузке тоже попадают под деактивацию: у них нет внешнего кода, и обмен считает их лишними. Такие позиции держат в отдельном инфоблоке или заводят им внешние коды, которых нет в учётной системе.

Перед первой полной выгрузкой с включённой деактивацией стоит сделать резервную копию. Ошибка в настройке отбора на стороне учётной системы обходится в архив половины каталога, а откат из копии занимает минуты.

Удаление товара из учётной системы и снятие с продажи - разные события. Первое приводит к исчезновению позиции из выгрузки, второе может приезжать признаком в свойствах. Второй путь надёжнее: сайт узнаёт о решении явно, а не по отсутствию записи.

Типичные проблемы

Снятые с продажи товары остаются на витрине.

Обмен идёт в режиме только изменений. В нём сайт не знает, какие позиции исчезли из каталога.

После обмена деактивировался почти весь каталог.

Полная выгрузка пришла неполной - оборвалась на середине. Признак деактивации применился к тому, что не успело приехать.

Товары, заведённые вручную, пропали с сайта.

У них нет внешнего кода, и полная выгрузка сочла их лишними. Такие позиции держат отдельно от выгружаемого каталога.

Удалённые товары ломают старые заказы.

Включено удаление вместо деактивации. Позиции заказов ссылаются на элементы каталога, и связь теряется.

Товар деактивирован, но виден в поиске.

Поисковый индекс не переиндексирован. Он хранит своё состояние и обновляется отдельно от каталога.

Частые вопросы

Чем полная выгрузка отличается от выгрузки изменений?

Полная передаёт весь каталог целиком, и сайт может судить об исчезнувших позициях. Выгрузка изменений быстрее, но такого права не даёт.

Как часто делать полную выгрузку?

Обычно раз в сутки или в неделю, ночью: она тяжелее обычного обмена. Между полными выгрузками идут выгрузки изменений.

Что выбрать - деактивацию или удаление?

Деактивацию почти всегда: она обратима и не рвёт связи с заказами. Удаление оправдано только на каталоге без истории продаж.

Как вернуть ошибочно деактивированные товары?

Массовым включением по дате изменения: она у них общая, раз деактивация прошла одним проходом. Поэтому перед чисткой и записывают дату.

Смежное

Первоисточник