Налаштування властивостей замовлення 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 робочі дні.







