В веб-разработке на платформе 1С-Битрикс нередко возникает необходимость работы с товарными предложениями, ценами и остатками товаров в интернет-магазине. С помощью стандартных инструментов платформы можно эффективно и быстро получить необходимые данные. В данной статье рассмотрим пример PHP-скрипта, который позволяет получить информацию о торговых предложениях товара, его цене и остатках на складе.

Полный код:
$arInfo['IBLOCK_ID'], 'PROPERTY_' . $arInfo['SKU_PROPERTY_ID'] => $ID, "ACTIVE" => "Y"),
false,
false,
array("ID", "NAME") // Получаем только ID и NAME
);
while ($arOffer = $rsOffers->GetNext()) {
// Получаем цену
$priceData = PriceTable::getList(array(
'filter' => array('PRODUCT_ID' => $arOffer['ID']),
'select' => array('PRICE')
))->fetch();
$arOffer['PRICE'] = $priceData ? $priceData['PRICE'] : 0;
// Получаем остатки для конкретного торгового предложения
$storeData = StoreProductTable::getList(array(
'filter' => array('PRODUCT_ID' => $arOffer['ID']),
'select' => array('AMOUNT')
))->fetch();
// Если данные о остатках найдены, записываем их, иначе 0
$arOffer['QUANTITY'] = $storeData ? $storeData['AMOUNT'] : 0;
// Добавляем информацию в результат
$result[] = array(
'ID' => $arOffer['ID'],
'NAME' => $arOffer['NAME'],
'PRICE' => $arOffer['PRICE'],
'QUANTITY' => $arOffer['QUANTITY']
);
}
} else {
$result['error'] = "Не удалось получить информацию о товаре.";
}
} else {
$result['error'] = "Не удалось загрузить модуль каталога.";
}
header('Content-Type: application/json');
echo json_encode($result);
?>
Разбор кода:
-
Инициализация и подключение модуля:
В начале кода подключается важный файл
prolog_before.php
, который необходим для работы в контексте платформы 1С-Битрикс. Этот файл инициализирует рабочую среду Битрикс и делает доступными все функции и классы, необходимые для работы с платформой.
Далее, черезrequire($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
use
, подключаются нужные классы:Bitrix\Main\Loader
— для загрузки модулей.Bitrix\Catalog\PriceTable
— для работы с ценами товаров.Bitrix\Catalog\StoreProductTable
— для работы с остатками товаров на складах.
-
Подключение модуля каталога:
В блоке
if (Loader::includeModule("catalog"))
проверяется, подключен ли модуль каталога. Если модуль не подключен, будет возвращена ошибка.if (Loader::includeModule("catalog")) {
-
Получение информации о товаре и торговых предложениях:
Переменные
$IBLOCK_ID
и$ID
содержат идентификатор инфоблока и ID товара, по которому нужно получить информацию. ФункцияCCatalogSKU::GetInfoByProductIBlock()
получает информацию о торговых предложениях для заданного инфоблока. Важно, что товар может иметь несколько предложений с различными характеристиками.$arInfo = CCatalogSKU::GetInfoByProductIBlock($IBLOCK_ID);
-
Получение торговых предложений:
Функция
CIBlockElement::GetList()
выполняет запрос для получения торговых предложений товара по его ID. В циклеwhile
обрабатываются все торговые предложения, и для каждого предложения извлекаются его ID и название.$rsOffers = CIBlockElement::GetList( array(), array('IBLOCK_ID' => $arInfo['IBLOCK_ID'], 'PROPERTY_' . $arInfo['SKU_PROPERTY_ID'] => $ID, "ACTIVE" => "Y"), false, false, array("ID", "NAME") );
-
Получение цен для каждого предложения:
Для каждого торгового предложения выполняется запрос к таблице
PriceTable
, где извлекается информация о цене товара.$priceData = PriceTable::getList(array( 'filter' => array('PRODUCT_ID' => $arOffer['ID']), 'select' => array('PRICE') ))->fetch();
-
Получение остатков для каждого торгового предложения:
Далее, с помощью
StoreProductTable::getList()
извлекаются данные о количестве товара на складах.$storeData = StoreProductTable::getList(array( 'filter' => array('PRODUCT_ID' => $arOffer['ID']), 'select' => array('AMOUNT') ))->fetch();
-
Формирование результата:
В конце каждого цикла информация о каждом предложении (ID, название, цена и остатки) добавляется в массив
$result
. Если какой-либо из параметров не найден, например, цена или остатки, то в массив добавляется значение по умолчанию.$result[] = array( 'ID' => $arOffer['ID'], 'NAME' => $arOffer['NAME'], 'PRICE' => $arOffer['PRICE'], 'QUANTITY' => $arOffer['QUANTITY'] );
-
Вывод результата в формате JSON:
В конце скрипта результат отправляется в формате JSON, что удобно для использования на клиентской стороне (например, для отображения информации через JavaScript).
header('Content-Type: application/json'); echo json_encode($result);