Как получить все свойства товаров в заказе?

Для получения всех свойств товаров в заказе в системе 1C-Bitrix можно воспользоваться следующими методами.

1. Если у вас есть объект заказа ($order), то можно получить список всех товаров в заказе с помощью метода GetBasketList(). Затем, для каждого товара в списке можно получить его свойства с помощью метода GetProperties(). Пример кода:

   $order = BitrixSaleOrder::load($orderId);
   $basket = $order->getBasket();

   /** @var BitrixSaleBasketItem $basketItem */
   foreach ($basket as $basketItem) {
       $productId = $basketItem->getProductId();
       $product = BitrixCatalogProductTable::getList([
           'filter' => ['ID' => $productId],
           'select' => ['ID', 'NAME'],
       ])->fetch();

       $properties = $basketItem->getPropertyCollection();
       $values = [];

       /** @var BitrixSaleBasketPropertyItem $property */
       foreach ($properties as $property) {
           $values[$property->getField('CODE')] = $property->getField('VALUE');
       }

       // Вывод информации о товаре и его свойствах
       echo 'Товар: ' . $product['NAME'] . '<br>';
       echo 'Свойства:<br>';
       foreach ($values as $code => $value) {
           echo $code . ': ' . $value . '<br>';
       }
       echo '<br>';
   }

В данном примере получается объект товара $basketItem из корзины заказа и его свойства сохраняются в массив $values. Затем можно выводить информацию о товаре и его свойствах на экран.

2. Если у вас есть идентификатор заказа ($orderId), но нет объекта заказа, можно воспользоваться методами BitrixSaleOrder::load() и BitrixSaleBasketBase::getBasketItems() для получения списка всех товаров в заказе и их свойств. Пример кода:

   $order = BitrixSaleOrder::load($orderId);
   $basket = $order->getBasket();

   /** @var BitrixSaleBasketItem $basketItem */
   foreach ($basket as $basketItem) {
       $productId = $basketItem->getProductId();
       $product = BitrixCatalogProductTable::getList([
           'filter' => ['ID' => $productId],
           'select' => ['ID', 'NAME'],
       ])->fetch();

       $properties = $basketItem->getPropertyCollection();
       $values = [];

       /** @var BitrixSaleBasketPropertyItem $property */
       foreach ($properties as $property) {
           $values[$property->getField('CODE')] = $property->getField('VALUE');
       }

       // Вывод информации о товаре и его свойствах
       echo 'Товар: ' . $product['NAME'] . '<br>';
       echo 'Свойства:<br>';
       foreach ($values as $code => $value) {
           echo $code . ': ' . $value . '<br>';
       }
       echo '<br>';
   }

В данном примере используется метод load() для загрузки объекта заказа по его идентификатору. Затем, используя метод getBasket(), получается корзина заказа, и для каждого товара в корзине получаются его свойства.

В обоих примерах используется метод BitrixCatalogProductTable::getList() для получения информации о товаре по его идентификатору ($productId), так как информация о товарах хранится в таблице "b_catalog_product".