Создаем новое свойство заказа, которое называем "ФИО целиком" с кодом FULL_NAME. Делаем его обязательным и служебным, что бы не показывалось при оформлении заказа. Обязательно задаем значение по умолчанию, что бы свойство в любом случае создавалось, при оформлении заказа.
Дополнительно ставим галку на против "Значение свойства будет использовано как название профиля пользователя". И делаем свойству максимальную сортировку, что бы оно оказалось в самом низу списка.
Получаем свойства заказа и заполняем свойство
Теперь, после оформления заказа будет создаваться это скрытое свойство заказа, нам осталось его перезаписать, наполнив данными из разрозненных полей с фамилией, именем, отчеством.
В файле confirm.php (этот файл отвечает за последний шаг заказа, шаблона sale.order.ajax, когда заказ уже сформирован) добавляем такой код:
if (!empty($arResult["ORDER"])):
$order = \Bitrix\Sale\Order::load($arResult["ORDER"]['ID']);
$collection = $order->getPropertyCollection();
$dbRes = \Bitrix\Sale\PropertyValueCollection::getList([
'filter' => [
'=ORDER_ID' => $arResult["ORDER"]['ID'], // ID этого заказа
'=CODE' => [
'FAMILIA',
'NAME',
'OTCHESTVO',
'FULL_NAME',
'EMAIL'
]
],
'select' => ['ID','CODE','VALUE']
]);
while ($item = $dbRes->fetch()) {
if ($item['CODE'] == 'FAMILIA') {
$FAMILIA = $item['VALUE'];
}
if ($item['CODE'] == 'NAME') {
$NAME = $item['VALUE'];
}
if ($item['CODE'] == 'OTCHESTVO') {
$OTCHESTVO = $item['VALUE'];
}
if ($item['CODE'] == 'FULL_NAME') {
$propId = $item['ID'];
}
if ($item['CODE'] == 'EMAIL') {
$email = $item['VALUE'];
}
}
$propertyValue = $collection->getItemById($propId);
$r = $propertyValue->setField('VALUE', $FAMILIA . ' ' . $NAME . ' ' . $OTCHESTVO);
$order->save();
// Долнительно обновим поля пользователя
$USER_UPD = new CUser;
$rsUser = CUser::GetByID($arResult["ORDER"]['USER_ID']);
$arUser = $rsUser->Fetch();
$fields = array(
"EMAIL" => $email,
"LOGIN" => $email,
"LAST_NAME" => $FAMILIA,
"NAME" => $NAME,
"SECOND_NAME" => $OTCHESTVO
);
$USER_UPD->Update($arResult["ORDER"]['USER_ID'], $fields);
... тут остальной код этого файла ...
- $order = \Bitrix\Sale\Order::load($arResult["ORDER"]['ID']); загрузили данные о свежесозданом заказе.
- $dbRes = \Bitrix\Sale\PropertyValueCollection::getList получили нужные свойства этого заказа.
- Получили ФИО из отдельных полей и ID свойства FULL_NAME в $propId = $item['ID'].
- $r = $propertyValue->setField свойство с кодом FULL_NAME заполниили переменными с разрозненными ФИО
- $order->save(); сохранили заказ
В конце еще дан пример для заполнения полей пользователя, так что бы заполнились его E-MAIL, логин заменился на электронную почту и заполнились поля с ФИО. Это код используйте на свое усмотрение. В общем-то и все. Это свойство обновится на последнем шаге оформления заказа и в дальнейшем используется как название профиля.
Да, можно было не создавать и перезаписывать свойство а добавлять его методом $propertyValue = $collection->createItem. Но этот способ более ресурсоемкий и вызывает небольшой лаг на последнем шаге оформления заказа.