Цитата |
---|
Maxim Smirnov пишет: в поле "Внешний код" введите "FUTURE-1C-CATALOG" |
В коде класса CIBlockCMLImport я видел проверку на тот случай, если по XML_ID инфоблок не найден. Не видел этого рецепта ранее, задавал XML_ID по схеме catalog-<GUID из настроек обмена 1С>, у меня тип инфоблока, куда загружать - catalog. Пример XML_ID - catalog-52326fe1-9fa1-4123-3648-f2918adf27da
По идее, должно работать и так, но хронически не работает. Уже третий каталог приходится перенастраивать после выгрузки из 1С.
В упор не понимаю почему код не находит ничего при первой выгрузке, но всегда находит при второй:
Код |
---|
$obIBlock = new CIBlock;
$rsIBlocks = $obIBlock->GetList(array(), array("XML_ID"=>$arIBlock["XML_ID"]));
$ar = $rsIBlocks->Fetch();
|
Но факты говорят за себя - действительно не находит и создает инфоблок заново. Думал, что дело в том, что я отдельного инфоблока для торговых предложений не использую. Но это тупиковая идея (посмотрел как формируется в этом случае XML_ID).
Инфоблоки по этим магическим кодам находятся так:
Код |
---|
//Also check for non bitrix xml file
if(!$ar && !array_key_exists("CODE", $arIBlock))
{
if($this->next_step["bOffer"] && $this->use_offers)
$rsIBlocks = $obIBlock->GetList(array(), array("XML_ID"=>"FUTURE-1C-OFFERS"));
else
$rsIBlocks = $obIBlock->GetList(array(), array("XML_ID"=>"FUTURE-1C-CATALOG"));
$ar = $rsIBlocks->Fetch();
} |
Т.е. если завести каталог на двух инфоблоках, то на товары нужен FUTURE-1C-CATALOG, а для предложений - FUTURE-1C-OFFERS.
Эта "фича" как раз и задумана для первоначальной загрузки? По коду вижу, что сразу же XML_ID будет заменен на то, что приходит из CML (с учетом типа инфоблоков). Так что точно сделано на один раз. В учебных курсах об этом ничего не сказано, есть только на форуме, но поиски начинаются, как у меня, после надцатой неудачи ...