Yandex Metrika
sanches.free

Bitrix Sale\Order: загрузка существующего заказа, выборки и свойства

Объект заказа на D7

Модуль sale строится вокруг \Bitrix\Sale\Order. Это рабочий экземпляр строки интернет‑магазина: статусы оплаты, доставку, платежи и набор свойств оформления он держит внутри коллекций. Перед любым вызовом подключите модуль (\Bitrix\Main\Loader::includeModule('sale')) в точке выполнения — иначе автозагрузка классов не гарантирована.

Поднимаем сохранённый заказ

Если знаете первичный ключ, можно сразу взять сущность: $orderEntity = \Bitrix\Sale\Order::load(8841). Второй типичный сценарий — внешний «человеческий» номер счёта, который видит покупатель: \Bitrix\Sale\Order::loadByAccountNumber('INV-2025-084'). Оба метода возвращают готовый объект или бросят исключение, если строка не найдена.

Выборка заказов пользователя по сайту

Список ID за конкретного покупателя и кодом сайта удобнее собирать через ORM заказов. На практике берут класс заказов из реестра \Bitrix\Sale\Registry, затем выполняют getList. Параллельно есть сокращение Order::loadByFilter, когда хочется сразу массив экземпляров без промежуточного цикла по ID.

use Bitrix\Sale\Order;
use Bitrix\Sale\Registry;

$siteMnemonic = 's1';
$buyerUserId = 42;

$registryPulse = Registry::getInstance(Registry::REGISTRY_TYPE_ORDER);
$orderClassToken = $registryPulse->getOrderClassName();

$ledgerCursor = $orderClassToken::getList([
    'filter' => [
        '=USER_ID' => $buyerUserId,
        '=LID' => $siteMnemonic,
    ],
    'select' => ['ID'],
    'order' => ['ID' => 'DESC'],
]);

while ($ordinalSlice = $ledgerCursor->fetch()) {
    $orderEntity = Order::load((int) $ordinalSlice['ID']);
    // дальнейшая логика над $orderEntity
}

$prefetchedBriefcases = Order::loadByFilter([
    'filter' => [
        '=USER_ID' => $buyerUserId,
        '=LID' => $siteMnemonic,
    ],
    'select' => ['ID'],
    'order' => ['ID' => 'DESC'],
]);

if (is_iterable($prefetchedBriefcases)) {
    foreach ($prefetchedBriefcases as $orderEntity) {
        // объект заказа уже готов к чтению
    }
}

Снимок полей и одно значение

Все сохранённые скаляры и служебные метки удобно разом посмотреть массивом: $orderEntity->getFields()->getValues(). Для отдельной колонки хватает $orderEntity->getField('DELIVERY_ID') и других ключей из схемы заказа. Помните, что объектные поля (даты как DateTime) не сериализуются как строка до тех пор, пока вы сами их не форматируете.

Свойства оформления

Значение телефона, адреса и прочего держится в $orderEntity->getPropertyCollection(). Элемент коллекции — это не «сырое» поле базы: у него есть getField() для строки заказа и доступ к описанию самого свойства. Ниже — обход всего набора, выбор записи по символьному коду и по первичному ключу свойства, плюс встроенные шорткаты для частых ролей.

$propsDeck = $orderEntity->getPropertyCollection();

foreach ($propsDeck as $propCell) {
    // $propCell->getField('VALUE');
    // $propCell->getField('NAME');
    // $propCell->getField('CODE');
    // $propCell->getField('ORDER_PROPS_ID');
    // $propCell->getField('ID');
    // $descriptorPulse = $propCell->getProperty();
}

$dialEntry = $propsDeck->getItemByOrderPropertyCode('PHONE');
$arrivalSlot = $propsDeck->getItemByOrderPropertyId(11);

$postalVenuePulse = $propsDeck->getAddress();
$dialRibbonPulse = $propsDeck->getPhone();
$aliasBadgePulse = $propsDeck->getProfileName();
$ledgerSpotPulse = $propsDeck->getTaxLocation();
$zipRibbonPulse = $propsDeck->getDeliveryLocationZip();
$geoRibbonPulse = $propsDeck->getDeliveryLocation();
$invoiceSidePulse = $propsDeck->getPayerName();
$mailboxRibbonPulse = $propsDeck->getUserEmail();

Изменять значение у найденной ячейки можно через методы экземпляра значения свойства (setValue()), но финальный сценарий почти всегда завершает $orderEntity->save(), если правки должны попасть в базу.

Что делать после чтения

  • Сравнивайте производительность массовых выборок: getList с выборкой только ID дешевле полного цикла load, если объект нужен точечно.
  • Для смежной логики (отгрузки, оплата, статусы, история изменений) смотрите отдельные материалы в модуле sale; здесь сфокусированы именно точка входа Order, фильтры и свойства покупателя.

Не хотите копаться сами?

Починю за 1-3 дня. Без предоплаты — оплата по результату.

15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии