Ниже приведен рабочий пример кода на случай, когда требуется сохранить в профиль пользователя ФИО из свойства заказа или другие данные, например email.
Из за отсутствия ФИО заказы в 1С могут привязываться к 1 и тому же пользователю. Чтобы это решить, скопируйте код ниже в отдельный файл, например /bitrix/php_interface/events/sale.php
В вашем случае могут отличаться как символьные коды свойств заказа из которых необходимо брать данные, так и тип плательщика.
<?php
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler(
"sale",
"OnSaleOrderSaved",
['CustomSaleEventHandler', "sale_OnSaleOrderSaved"]
);
class CustomSaleEventHandler
{
public static function sale_OnSaleOrderSaved(\Bitrix\Main\Event $event)
{
global $USER;
$arOptions = [
[
'PERSON_ID' => 1,
'PROP_FIO' => 'FIO',
'PROP_EMAIL' => 'EMAIL'
],
// здесь можно добавить варианты для других типов плательщика также
];
/** @var \Bitrix\Sale\Order $order */
$order = $event->getParameter("ENTITY");
$isNew = $event->getParameter("IS_NEW");
if (!$isNew) {
return true;
}
$userId = $order->getUserId();
// првоеряем заполненость полей профиля пользователя
$arUser = $USER->GetList('', '', [
'ID' => $userId
])->fetch();
if (!$arUser) {
return false;
}
$bNeedFio = false;
if (empty($arUser['NAME']) || empty($arUser['LAST_NAME']) || empty($arUser['SECOND_NAME'])) {
$bNeedFio = true;
}
$bNeedEmail = false;
if (empty($arUser['EMAIL'])) {
$bNeedEmail = true;
}
//если все заполнено - ничего не делаем ------------
if (!$bNeedFio && !$bNeedEmail) {
return false;
}
$arUpdateFields = [];
foreach ($arOptions as $option) {
if ($order->getPersonTypeId() != $option['PERSON_ID'] || empty($option)) {
continue;
}
/**
* @var \Bitrix\Sale\PropertyValue
*/
// получим фио ----------
$prop = $order->getPropertyCollection()->getItemByOrderPropertyCode($option['PROP_FIO']);
if ($prop && $bNeedFio) {
$name = $prop->getValue();
$name = preg_replace('/\s+/', ' ', $name);
$name = trim($name);
$arName = explode(' ', $name);
if ($bNeedFio && !empty($arName)) {
$arUpdateFields['LAST_NAME'] = '';
$arUpdateFields['NAME'] = '';
$arUpdateFields['SECOND_NAME'] = '';
if (count($arName) >= 3) {
$arUpdateFields['LAST_NAME'] = $arName[0];
$arUpdateFields['NAME'] = $arName[1];
$arUpdateFields['SECOND_NAME'] = $arName[2];
} elseif (count($arName) == 2) {
$arUpdateFields['LAST_NAME'] = $arName[0];
$arUpdateFields['NAME'] = $arName[1];
} elseif (count($arName) == 1) {
$arUpdateFields['NAME'] = $arName[0];
}
}
}
// найдем email ---
$prop = $order->getPropertyCollection()->getItemByOrderPropertyCode($option['PROP_EMAIL']);
if ($prop && $bNeedEmail) {
$email = $prop->getValue();
if ($bNeedEmail && check_email($email)) {
$arUpdateFields['EMAIL'] = $email;
}
}
}
// заменим поля если найшли чем
if (!empty($arUpdateFields)) {
$USER->Update($userId, $arUpdateFields);
}
return true;
}
}