Добавляем 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"];
						}
					}
				}
			}
		}
	}
?>