Битрикс не дает вставить такое длинное сообщение на форум. Перенес код на pastebin
Задача: проводить калькуляция аффилиатов автоматически.
Допустим, я хочу делать это каждый раз при изменении статуса доставки.
В init.php делаю событие свое. А в нем пишу вот такую вещь:
Кстати, я использую функцию в точности также, как она используется в modules/sale/admin/affiliate.php
Там при выборе списка аффилиатов и выборе пункта меня производится калькуляция. Код точно такой же.

И почему-то меняется дата последней калькуляции, но не начисляется сумма. А если я делаю то же самое через админку, то все работает.
Решил поискать причину сам и поиски завели меня в файл bitrix/monules/sale/general/affiliate.php
В нем в строке 487 выполняется вот такой код:
Этот код, как не сложно догадаться, выбирает все заказы у которых AFFILIATE_ID равен нужному нам. И возвращает, согласно документации, объект класса CDBResult, содержащий ассоциативные массивы с ключами.
Но дело в том, что при, казалось бы, одном и том же запросе результат работы совершенно разный.
Внимание, сейчас будут простыни. Оденьте шапочку из фольги.
1. .
2. .
И теперь если мы используем метод Fetch для первого объекта, то результатом будет пустой массив и сумма не начисляется. А если мы используем тот же метод для второго объекта, то результат будет удовлетворительный.
Внимание, вопрос: ?
Задача: проводить калькуляция аффилиатов автоматически.
Допустим, я хочу делать это каждый раз при изменении статуса доставки.
В 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 выполняется вот такой код:
| Код |
|---|
$dbOrders = CSaleOrder::GetList(
array("ID" => "ASC"),
array(
"ALLOW_DELIVERY" => "Y",
">=DATE_ALLOW_DELIVERY" => $dateFrom,
"<DATE_ALLOW_DELIVERY" => $dateTo,
"AFFILIATE_ID" => $affiliateID,
"LID" => $arAffiliate["SITE_ID"],
"CANCELED" => "N"
),
false,
false,
array(
"ID",
"LID",
"PRICE_DELIVERY",
"PRICE",
"CURRENCY",
"TAX_VALUE",
"AFFILIATE_ID",
"BASKET_QUANTITY",
"BASKET_PRODUCT_ID",
"BASKET_MODULE",
"BASKET_PRICE",
"BASKET_CURRENCY",
"BASKET_DISCOUNT_PRICE"
)
); |
Этот код, как не сложно догадаться, выбирает все заказы у которых AFFILIATE_ID равен нужному нам. И возвращает, согласно документации, объект класса CDBResult, содержащий ассоциативные массивы с ключами.
Но дело в том, что при, казалось бы, одном и том же запросе результат работы совершенно разный.
Внимание, сейчас будут простыни. Оденьте шапочку из фольги.
1. .
2. .
И теперь если мы используем метод Fetch для первого объекта, то результатом будет пустой массив и сумма не начисляется. А если мы используем тот же метод для второго объекта, то результат будет удовлетворительный.
| Код |
|---|
$dbOrders->Fetch() |
Внимание, вопрос: ?