Однажды нам стало необходимо сделать в 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, ) ); }