Настройка свойств заказа 1С-Битрикс
Свойства заказа — это дополнительные поля, которые покупатель заполняет при оформлении. Стандартная поставка 1С-Битрикс включает базовый набор: имя, телефон, email, адрес доставки. Большинство проектов рано или поздно упираются в специфические требования: юридические реквизиты для B2B-покупателей, поле для промокода, выбор подарочной упаковки, согласие с конкретными условиями договора или загрузка документа. Всё это реализуется через механизм свойств заказа.
Где хранятся свойства заказа
Свойства заказа в D7 (модуль sale) — отдельные сущности, управляемые через Bitrix\Sale\Internals\OrderPropsTable. Административный путь: «Интернет-магазин → Настройки → Свойства заказа».
Каждое свойство привязывается к группе свойств (ORDER_PROPS_GROUP), которая соответствует типу персоны (физическое / юридическое лицо) и способу доставки. Свойства отображаются или скрываются в зависимости от этих выборов — это ключевая логика условной видимости.
Типы свойств
| Тип | Код | Применение |
|---|---|---|
| Строка | TEXT |
Имя, комментарий, ИНН |
| Список | SELECT |
Фиксированные варианты выбора |
| Флаг | CHECKBOX |
Согласие с условиями |
| Дата | DATE |
Желаемая дата доставки |
| Местоположение | LOCATION |
Интеграция с геовиджетом |
| Файл | FILE |
Загрузка документов |
Добавление свойства через API
При миграционных скриптах или автоматизированном развёртывании:
use Bitrix\Sale\Internals\OrderPropsTable;
$result = OrderPropsTable::add([
'PERSON_TYPE_ID' => 1, // 1 - физлицо, 2 - юрлицо
'NAME' => 'ИНН организации',
'CODE' => 'INN',
'TYPE' => 'TEXT',
'REQUIRED' => 'Y',
'SORT' => 100,
'GROUP_ID' => 1,
'PROPS_GROUP_ID' => 2,
]);
if ($result->isSuccess()) {
$newId = $result->getId();
}
Условная видимость свойств
Привязка свойства к типу персоны обеспечивает базовую условную видимость. Для более гибкой логики — например, показывать поле «Этаж» только при курьерской доставке — нужна JavaScript-обработка:
BX.addCustomEvent('onDeliveryChanged', function(deliveryId) {
const floorField = document.querySelector('[data-prop-code="FLOOR"]');
const courierIds = [5, 7, 12]; // ID курьерских служб
if (floorField) {
floorField.closest('.sale-field-wrap').style.display =
courierIds.includes(parseInt(deliveryId)) ? '' : 'none';
}
});
Валидация на стороне сервера
Кастомная валидация через обработчик OnSaleOrderBeforeSaved:
AddEventHandler('sale', 'OnSaleOrderBeforeSaved', 'validateOrderProps');
function validateOrderProps(\Bitrix\Main\Event $event) {
$order = $event->getParameter('ENTITY');
$propCollection = $order->getPropertyCollection();
$inn = $propCollection->getItemByOrderPropertyCode('INN');
if ($inn && !empty($inn->getValue())) {
$innValue = preg_replace('/\D/', '', $inn->getValue());
if (strlen($innValue) !== 10 && strlen($innValue) !== 12) {
return new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::ERROR,
new \Bitrix\Sale\ResultError('Некорректный ИНН'),
'sale'
);
}
}
return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS);
}
Получение значений свойств в коде
$order = \Bitrix\Sale\Order::load($orderId);
$propCollection = $order->getPropertyCollection();
$phone = $propCollection->getPhone();
$email = $propCollection->getUserEmail();
// Произвольное свойство по коду
$innProp = $propCollection->getItemByOrderPropertyCode('INN');
$innValue = $innProp ? $innProp->getValue() : null;
Сроки выполнения
Добавление 3–5 простых свойств с настройкой видимости по типу персоны — 2–4 часа. Комплексная настройка с кастомной валидацией, условной JavaScript-видимостью и интеграцией с внешней системой — 1–2 рабочих дня.







