Цитата |
---|
Если в конце обмена 1С отсылает запрос на деактивацию не выгруженных товаров - значит полная. |
У нас другая проблема:
При использовании нового модуля деактивируются все товары, которых нет в пакете. Например, делается полная выгрузка состоящая из трех пакетов по пять товаров, при этом на сайте уже есть эти пятнадцать товаров(то есть повторная полная выгрузка).
Выгрузился первый пакет, в котором 5 товаров - деактивируются остальные десять.
Выгрузился второй пакет, в котором 5 товаров - деактивируются остальные десять, в том числе пять предыдущих.
Выгрузился третий пакет, в котором 5 товаров - деактивируются остальные десять, то есть все предыдущие.
В итоге на сайте 5 активных товаров и 10 не активных(деактивация выставлена в настройках "Интеграции с 1С").
В коде /bitrix/components/bitrix/catalog.import.1c видно, что на восьмом шаге $NS["STEP"] == 8 импорта происходит дективация товаров:
Код |
---|
$obCatalog = new CIBlockCMLImport;
$obCatalog->Init($NS);
$result = $obCatalog->DeactivateElement($arParams["ELEMENT_ACTION"], $start_time, $arParams["INTERVAL"]);
|
Насколько я понимаю, эта логика используется для поддержки старого модуля обмена.
При этом есть дективация здесь, видимо для нового модуля:
Код |
---|
elseif ($_GET["mode"]=="deactivate")
{
if ($_GET["timestamp"] > 0)
{
$rsImportedIBlocks = \Bitrix\IBlock\IblockFieldTable::getList(array(
"select" => array("IBLOCK_ID", "DEFAULT_VALUE"),
"filter" => array(
"=FIELD_ID" => "XML_IMPORT_START_TIME",
">=DEFAULT_VALUE" => date("Y-m-d H:i:s", $_GET["timestamp"]),
),
));
$timeStamp = ConvertTimeStamp($_GET["timestamp"], "FULL");
while ($arField = $rsImportedIBlocks->fetch())
{
$element = new CIBlockElement;
$rsElements = CIBlockElement::GetList(array(), array(
"IBLOCK_ID" => $arField["IBLOCK_ID"],
"ACTIVE" => "Y",
"<TIMESTAMP_X" => $timeStamp,
), false, false, array("ID"));
while ($arElement = $rsElements->Fetch())
{
$element->Update($arElement["ID"], array("ACTIVE" => "N"));
}
$section = new CIBlockSection();
$rsSections = CIBlockSection::GetList(array(), array(
"IBLOCK_ID" => $arField["IBLOCK_ID"],
"ACTIVE" => "Y",
"<TIMESTAMP_X" => $timeStamp,
), false, array("ID"));
while ($arSection = $rsSections->Fetch())
{
$section->Update($arSection["ID"], array("ACTIVE" => "N"));
}
}
echo "success\n",GetMessage("CC_BSC1_DEACTIVATION_DONE");
}
else
{
echo "failure\n",GetMessage("CC_BSC1_DEACTIVATION_ERROR");
}
}
|
То есть получается что в нашем случае работает логика для старого модуля и для нового.
Как исправить проблему? Как сайта "понимает", что не нужно на восьмом шаге импорта деактивировать товары?