Временный костыль для определения текущего региона заказ и передачи его в свойство заказа.
<? use Bitrix\Main; //работаем с событием перед сохранением заказа Main\EventManager::getInstance()->addEventHandler( 'sale', 'OnSaleOrderSaved', array('CustomOrderClass','orderAddRegion') ); class CustomOrderClass { static function orderAddRegion(Main\Event $event) { //обращаемся к сессии $session = Bitrix\Main\Application::getInstance()->getSession(); //достаем из нее регион АСПРО. Регионы идут как ID, поэтому далее перебираем их $region_code = $GLOBALS['arRegion']['ID']; $region_name ="Город по умолчанию"; if (CModule::IncludeModule("iblock")): //получаем из инфоблока регионов, регионы сайта и их ID $iblock_id = 9; $element = CIBlockElement::GetList ( Array("ID" => "ASC"), Array("IBLOCK_ID" => $iblock_id), false, false, Array('ID', 'NAME') ); while($ar_fields = $element->GetNext()) { if ($ar_fields['ID'] === $region_code) $region_name = $ar_fields['NAME']; } endif; //обращаемся к заказу $order = $event->getParameter("ENTITY"); //если новый заказ ищем свойство заказа с кодом CITY и LOCATION if($event->getParameter("IS_NEW")){ $propertyCollection = $order->getPropertyCollection(); foreach ($propertyCollection as $obProp) { $arProp = $obProp->getProperty(); if(in_array($arProp["CODE"], ["CITY"])) { $obProp->setValue($region_name); } } $order->save(); } } } ?>
Была проверка по сессии, но в шаблоне ASPRO используют глобальные переменные, перевел код на $GLOBALS['arRegion']['ID']
Другие варианты:
$GLOBALS["arRegionLink"]["PROPERTY_LINK_REGION"]
$_SESSION["ASPRO_FILTER"]["arRegionLink"]["PROPERTY_LINK_REGION"]
Обращение по ID
$arProp = $propertyCollection->getItemByOrderPropertyId(13);