Не во всех заказах проставляется город доставки
На сайте 1с-bitrix в админке, не всегда проставляется поле город. Поле Город автоматизировано и при заказе должен выводится тот город в котором мы заказываем. Нету никакой периодичности с которой город может выводится или с которой не выводится. Может весь день отрабатывать корректно. А в какой-то день раза 4 в заказе поле может быть пустым.

В файле init.php есть функция которая отвечает за добавление
function OnOrderAddHandler(&$ID, &$arFields) {
if (CModule::IncludeModule('sale')) {
$city = ($_SERVER["SERVER_NAME"] == "xn--e1aofbbhkdf.xn--p1ai") ? "Архангельск" : "Северодвинск";
$db_props = CSaleOrderPropsValue::GetList(
array("SORT" => "ASC"),
array("ORDER_ID" => $ID, "CODE" => "CITY")
);
$aProp = array();
while ($arPROP = $db_props->Fetch()) {
$aProp[$arPROP["ORDER_PROPS_ID"]] = $arPROP;
}
if (intval($aProp[12]["ID"]) > 0) {
$r = CSaleOrderPropsValue::Update(intval($aProp[12]["ID"]), array("VALUE" => $city));
} else {
$arFields = array(
"ORDER_ID" => intval($ID),
"ORDER_PROPS_ID" => 12,
"NAME" => "Город",
"CODE" => "CITY",
"VALUE" => $city,
);
CSaleOrderPropsValue::Add($arFields);
}
if (intval($aProp[25]["ID"]) > 0) {
$r = CSaleOrderPropsValue::Update(intval($aProp[25]["ID"]), array("VALUE" => $city));
} else {
$arFields = array(
"ORDER_ID" => intval($ID),
"ORDER_PROPS_ID" => 25,
"NAME" => "Город",
"CODE" => "CITY",
"VALUE" => $city,
);
// Логирование
CSaleOrderPropsValue::Add($arFields);
}
}
}
Я смотрел логи. Даже когда поле город пустое у заказа в логах город присутствует.
Может быть у кого будут какие-то мысли почему так.
Ответы (1 шт):
Основная проблема - вы в функции обработки события OnOrderAdd портите входной массив $arFields. Вам в параметрах по ссылке приходит массив $arFields, а вы его меняете на какой-то левый
$arFields = array(
"ORDER_ID" => intval($ID),
"ORDER_PROPS_ID" => 12,
"NAME" => "Город",
"CODE" => "CITY",
"VALUE" => $city,
);
Что после этого происходит с заказом, можно только догадываться.