Начнем с того, что выполнять генерацию файла будет на ajax или по прямому запросу. Более сложную логику в данном примере рассматривать не будем. Итак начнем.
Раз это ajax, то нам не понадобится вывод header.php и footer.php, но без пролога (prolog_before.php) ничего на выйдет:
define('STOP_STATISTICS', true);
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
$GLOBALS['APPLICATION']->RestartBuffer();
Собственно стандартная шапка для ajax-файла готова
Далее нам необходимо сделать выборки товаров и их ТП (торговых предложений)
$iblock_id = 1;
$arSelect = Array("IBLOCK_ID", "ID", "PROPERTY_*");
$arFilter = Array("IBLOCK_ID"=>$iblock_id);
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
while($arItem = $res->Fetch()){
$arIds[] = $arItem['ID']; //формируем массив ID элементов - он нам понадобится для красивой выборки ТП
$arProduct[$arItem['ID']] = $arItem; //формируем массив всех товаров, к нему будем прикреплять