Заметки
Почему CCatalogProduct::GetByID не возвращает название товара
У CCatalogProduct::GetByID в результате нет названия и раздела товара. Метод читает параметры товара как записи торгового каталога. Название относится к элементу инфоблока.
Для поддержки кода на старом API получить название можно отдельно. Пример выполняется в PHP-консоли коробки, 123 — ID нужного элемента каталога:
use Bitrix\Main\Loader;
if (!Loader::includeModule('iblock')) {
throw new RuntimeException('Модуль инфоблоков недоступен');
}
$i_product_id = 123;
$ar_element = CIBlockElement::GetByID($i_product_id)->Fetch();
if ($ar_element) {
echo htmlspecialchars((string) $ar_element['NAME'], ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
} Если ID относится к торговому предложению, это будет название предложения. Данные родительского товара требуют отдельного определения связи SKU; подстановка другого числового ID наугад её не заменяет.
Сам CCatalogProduct::GetByID отмечен в документации как устаревший с 17.6.2. Это объяснение legacy-кода, а не рекомендация строить на нём новый импорт. В D7 разделение между товарными параметрами и элементом инфоблока тоже нужно учитывать.
Товар, предложение и цена — ещё три связанные, но отдельные записи.
Документация: CCatalogProduct и устаревшие методы; CIBlockElement::GetByID.