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 дней гарантии