Не во всех заказах проставляется город доставки

На сайте 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,
            );

Что после этого происходит с заказом, можно только догадываться.

→ Ссылка