Добавляем ID профиля покупателя в свойство заказа 1С-Битрикс на ядре D7

, Михаил
  1. Создаём поле для хранения идентификатора покупателя SUBUSER_ID
  2. Добавляем обработчик OnBeforeSaleOrderFinalAction, что бы установить наше свойство.

<?php 
\Bitrix\Main\EventManager::getInstance()->addEventHandler('sale''OnBeforeSaleOrderFinalAction''OnBeforeSaleOrderFinalActionHandler');
function OnBeforeSaleOrderFinalActionHandler(\Bitrix\Main\Event $event) {
	    $order $event->getParameter('ENTITY');
	    $userProfileId getContragentID($order->getId());
	    $propertyCollection $order->getpropertyCollection();
	    foreach ($propertyCollection as $property) {
		        if($property->getField('CODE') == 'SUBUSER_ID') {
			            $property->setValue($userProfileId);
			}
		}
	    return new \Bitrix\Main\EventResult(
	        \Bitrix\Main\EventResult::SUCCESS, array(
	            "ENTITY" => $order,
	        )
	    );
	}
?>

  1. Дальше находим ID профиля покупателя по ИНН у Юр.Лиц, и по ФИО(названию профиля) у Физ.Лиц.

<?php 
function getContragentID($orderID) {
	    CModule::IncludeModule("sale");
	    if ($arOrder CSaleOrder::GetByID($orderID)) {
		        $profiles = \Bitrix\Sale\Helpers\Admin\Blocks\OrderBuyer::getBuyerProfilesList($arOrder['USER_ID'],$arOrder['PERSON_TYPE_ID']);
		        unset($profiles[0]);
		        $profiles array_flip($profiles);
		        $filterValue = array('PERSON_TYPE_ID' => $arOrder['PERSON_TYPE_ID'], 'IS_PROFILE_NAME' => 'Y');
		        if ($arOrder['PERSON_TYPE_ID']==2) {
			            $filterValue = array('PERSON_TYPE_ID' => $arOrder['PERSON_TYPE_ID'], 'CODE' => 'INN');
			        }
		        $rsOrderProps CSaleOrderProps::GetList(array(), $filterValue);
		        if ($arOrderProp $rsOrderProps->Fetch()) {
			            $rsProps CSaleOrderPropsValue::GetList(array('SORT' => 'ASC'), array('ORDER_ID' => $orderID'ORDER_PROPS_ID' => $arOrderProp['ID']));
			            if ($arProp $rsProps->Fetch()) {
				                $rsUP CSaleOrderUserPropsValue::GetList(array(), array('ORDER_PROPS_ID' => $arOrderProp['ID'],
				                    'VALUE' => $arProp['VALUE'],
				                    'PROP_PERSON_TYPE_ID' => $arOrder['PERSON_TYPE_ID']));
				                if ($arUP $rsUP->Fetch()) {
					                    if (array_key_exists($arProp['VALUE'], $profiles) && $arOrder['PERSON_TYPE_ID']==1) {
						                        return $profiles[$arProp['VALUE']];
						                    }
					                    return $arUP['USER_PROPS_ID'];
					                } else {
					                    $db_sales CSaleOrderUserProps::GetList(array(),array("USER_ID" => $arOrder['USER_ID'],"PERSON_TYPE_ID"=>$arOrder['PERSON_TYPE_ID'],"=NAME"=>$arProp['VALUE']));
					                    if ($ar_sales $db_sales->Fetch()) {
						                       return $ar_sales["ID"];
						                    }
					                }
				            } 
			        }
		    }
	}
?>