Значения свойств заказа в 1С-Битрикс

Внимание! Необходимо выполнять сохранение через заказ: \Bitrix\Sale\Order::save(). Помимо всего этого, в одной из ближайших версий вызов \Bitrix\Sale\PropertyValueCollection::save() либо \Bitrix\Sale\PropertyValue::save() будет генерировать ошибку уровня E_WARNING.

Получение

Работа с объектами

$collection = $order->getPropertyCollection();
foreach ($collection as $item)
{
    // $item - объект класса \Bitrix\Sale\PropertyValue
}

Работа с массивами

Помимо объектов есть возможность напрямую обращаться к базе через метод \Bitrix\Sale\PropertyValueCollection::getList($parameters), либо \Bitrix\Sale\PropertyValue::getList($parameters). Оба этих метода работают аналогично.

Методы всегда возвращают объект Bitrix\Main\DB\Result, из которого можно получить данные с помощью метода fetch().

$parameters — Массив, структура которого полностью соответствует структуре ORM’ного getList.

// получение списка свойств для заказа с ID 123
$dbRes = \Bitrix\Sale\PropertyValueCollection::getList([
    'select' => ['*'],
    'filter' => [
        '=ORDER_ID' => 123, 
    ]
]);

while ($item = $dbRes->fetch())
{
    var_dump($item);
}

Получение конкретного значения

$propertyValue = $collection->getItemByOrderPropertyCode($code);

Работа со свойствами, как с коллекцией

$propertyCollection = $order->getPropertyCollection();
foreach ($propertyCollection as $popertyObj) {

     if ($popertyObj->getField('CODE') == "CODE1") $someValue1 = $popertyObj->getValue();
     if ($popertyObj->getField('CODE') == "CODE2") $popertyObj->setValue($someValue2);
}

 

Обновление

$order = \Bitrix\Sale\Order::load(123);

$collection = $order->getPropertyCollection();
    
$propertyValue = $collection->getItemById(123);
$r = $propertyValue->setField('VALUE', 'Новое значение');
if (!$r->isSuccess())
{
    var_dump($r->getErrorMessages());
}
    
$order->save();

Доступное для редактирования поле:

"VALUE", // значение свойства

 

Удаление

$order = \Bitrix\Sale\Order::load(123);

$collection = $order->getPropertyCollection();

$propertyValue = $collection->getItemById(123);
$propertyValue->delete();

$order->save();

 

Получение конкретного значения

$collection = $order->getPropertyCollection();

по ID

$propertyValue = $collection->getItemById($id);

по внутреннему индексу

$propertyValue = $collection->getItemByIndex($index);

по ID самого свойства

$propertyValue = $collection->getItemByOrderPropertyId($propertyId);

геттеры для значений ключевых свойств(телефон, email, имя, адрес и т.д.)

$propertyValue = $collection->getAddress();
$propertyValue = $collection->getPhone();
$propertyValue = $collection->getProfileName();
$propertyValue = $collection->getTaxLocation();
$propertyValue = $collection->getDeliveryLocationZip();
$propertyValue = $collection->getDeliveryLocation();
$propertyValue = $collection->getPayerName();
$propertyValue = $collection->getUserEmail();

 

Добавление свойства

Вариант 1

$propertyValue = $collection->createItem([
    'ID' => 1,
    'NAME' => 'Новое свойство',
    'TYPE' => 'STRING',
    'CODE' => 'NEW_PROP',
]);

$propertyValue->setField('VALUE', 'Y');

Вариант 2

$propertyValue = \Bitrix\Sale\PropertyValue::create($collection, [
    'ID' => 1,
    'NAME' => 'Новое свойство',
    'TYPE' => 'STRING',
    'CODE' => 'NEW_PROP',
]);

$propertyValue->setField('VALUE', 'Свойство_3');
$collection->addItem($propertyValue);

 

Получение информации о свойстве, значение которого хранится в заказе

Работа с массивом

$propertyInfo = $propertyValue->getProperty();

Результатом является массив с ключами

'ID', // ID свойства
'PERSON_TYPE_ID', // ID типа плательщика, к которому оно привязано
'NAME', // Название свойства
'TYPE', // Тип
'REQUIRED', // Флаг обязательности
'DEFAULT_VALUE', // Значение по умолчанию
'SORT', // Сортировка
'USER_PROPS', // Входит ли в профиль
'IS_LOCATION', // Является ли местоположением
'PROPS_GROUP_ID', // ID группы
'DESCRIPTION',  // Описание
'IS_EMAIL', // Является ли почтой
'IS_PROFILE_NAME', // Является ли названием профиля пользователя
'IS_PAYER', // Используется ли как имя плательщика 
'IS_LOCATION4TAX', // Используется ли как местоположение для налогов
'IS_FILTERED', // Доступно ли в фильтре по заказам
'CODE', // Код
'IS_ZIP', // Используется ли как почтовый индекс
'IS_PHONE', // Является ли телефоном
'IS_ADDRESS', // Является ли адресом
'ACTIVE', // Флаг активности
'UTIL', // Флаг служебности
'INPUT_FIELD_LOCATION', 
'MULTIPLE',// Флаг множественности
'MINLENGTH', // Минимальная длина строки
'MAXLENGTH', // Максимальная длина строки
'PATTERN', // Регулярное выражение для проверки
'MULTILINE', // Много строк
'SIZE', // Количество видимых символов

Работа с объектом

$property = $propertyValue->getPropertyObject();

Любое значение можно получить, используя метод

$property->getField('SIZE');

Для некоторых наиболее популярных полей реализованы геттеры

$property->getId(); // ID свойства
$property->getPersonTypeId(); // ID типа плательщика, к которому оно привязано
$property->isUtil(); // является ли служебным
$property->isRequired(); // является ли обязательным
$property->getType(); // тип 
$property->getDescription(); // описание
$property->getRelations(); // связи
$property->getName(); // название
$property->getGroupId(); // ID группы

Источник: https://dev.1c-bitrix.ru/api_d7/bitrix/sale/technique/property.php