Однажды нам стало необходимо сделать в 1С Битрикс экспорт товаров в xml. В целом все делается стандартными средствами, но есть момент, не выгружается необходимый параметр «остатки».
Поэтому нам стало необходимым скопировать остатки в созданное свойство инфоблока и уже это свойство добавить в экспорт xml.
У нас есть инфоблок торгового каталога, в котором мы хотим заполнить свойство типа строка «Остаток». В моем случае, код этого свойства «RESIDUES»
Постоянная работа скрипта. Пишем обработчик в init.php
Если вам нужно, что бы свойство RESIDUES обновлялось постоянно, при каждом добавлении товаров или обновлении остатков. Например, если у вас идет постоянный обмен с 1С, как и у нашего клиента, это была просто необходимость.
Можете добавить обработчик в init.php. Или создать страничку и запустить скрипт.
CModule::IncludeModule('iblock');
CModule::IncludeModule('catalog');
$IBLOCK_ID = 1; //Инфоблок с которым работаем
//Получаем ID всех элементов
$addProps = CIBlockElement::GetList (
Array("ID" => "ASC"),
Array("IBLOCK_ID" => $IBLOCK_ID),
false,
false,
Array(
'ID'
)
);
while($ar_fields = $addProps->GetNext())
{
$arProductID = $ar_fields['ID'];
//Узнаем остаток у товара
$db_res = CCatalogProduct::GetList(
array(),
array(
"ID" => $arProductID,
)
);
while($ar_res = $db_res->Fetch())
//Передаем остаток в переменную
{
$PropRESIDUES = $ar_res["QUANTITY"];
}
//Заполняем свойство с кодом "RESIDUES" остатками
CIBlockElement::SetPropertyValuesEx(
$arProductID,
$IBLOCK_ID,
array(
"RESIDUES" => $PropRESIDUES,
)
);
}
Обработчик который забирает значение из поля остаток по складам и упаковываем в нужное товарное свойство.
CModule::IncludeModule('iblock');
CModule::IncludeModule('catalog');
$IBLOCK_ID = 1; //Инфоблок с которым работаем
//Получаем ID всех элементов
$addProps = CIBlockElement::GetList (
Array("ID" => "ASC"),
Array("IBLOCK_ID" => $IBLOCK_ID),
false,
false,
Array(
'ID'
)
);
while($ar_fields = $addProps->GetNext())
{
$arProductID = $ar_fields['ID'];
//Узнаем остаток склада
$db_res = \Bitrix\Catalog\StoreProductTable::getList([
'filter' => [
'PRODUCT_ID' => $arProductID,
]
]);
while($ar_res = $db_res->Fetch())
//Передаем остаток по складу в переменную
{
$skladost = $ar_res["AMOUNT"];
}
//Заполняем свойство с кодом "RESIDUES" остатком со склада
CIBlockElement::SetPropertyValuesEx(
$arProductID,
$IBLOCK_ID,
array(
"RESIDUES" => $skladost,
)
);
}
