Битрикс не дает вставить такое длинное сообщение на форум. Перенес код на pastebin
Задача: проводить калькуляция аффилиатов автоматически. Допустим, я хочу делать это каждый раз при изменении статуса доставки. В init.php делаю событие свое. А в нем пишу вот такую вещь:
Код
function calculateAffiliates($orderId, $payed){
if ($payed == "Y")
{
$arOrder = CSaleOrder::GetByID($orderId);
CSaleAffiliate::CalculateAffiliate($arOrder["AFFILIATE_ID"], false, false, false, false);
}
}
Кстати, я использую функцию в точности также, как она используется в modules/sale/admin/affiliate.php Там при выборе списка аффилиатов и выборе пункта меня производится калькуляция. Код точно такой же.
И почему-то меняется дата последней калькуляции, но не начисляется сумма. А если я делаю то же самое через админку, то все работает.
Решил поискать причину сам и поиски завели меня в файл bitrix/monules/sale/general/affiliate.php В нем в строке 487 выполняется вот такой код:
Этот код, как не сложно догадаться, выбирает все заказы у которых AFFILIATE_ID равен нужному нам. И возвращает, согласно документации, объект класса CDBResult, содержащий ассоциативные массивы с ключами.
Но дело в том, что при, казалось бы, одном и том же запросе результат работы совершенно разный. Внимание, сейчас будут простыни. Оденьте шапочку из фольги.
И теперь если мы используем метод Fetch для первого объекта, то результатом будет пустой массив и сумма не начисляется. А если мы используем тот же метод для второго объекта, то результат будет удовлетворительный.
При всем при этом, если я вызываю тот же самый метод из обычного php файла, то все отлично работает. Но почему он не работает из init.php? Он мне нужен именно как реакция на событие.
Если я создаю экземпляр класса, то тоже ничего не получается.
Код
$aff = new CSaleAffiliate();
$aff->CalculateAffiliate($arOrder["AFFILIATE_ID"], false, false, false, false);
Все также — дата меняется, но сумма не начисляется.
А если вызывать подсчет для всех:
Код
$aff->Calculate();
То падает с ошибкой: Fatal error: Call to a member function DateFormatToPHP() on a non-object in /.. ./bitrix/modules/sale/general/affiliate.php on line 198