[spoiler]
Напишем функцию в init.php и будем ее запускать на агенте раз в день, например.
function My_Clear_Orders() { require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); if (CModule::IncludeModule("sale")) { //получим текущую дату в формате сайта $date=date($DB->DateFormatToPHP(CSite::GetDateFormat("SHORT")), time());?><br/><? // получим Unix timestamp даты $stmp = MakeTimeStamp($date, "DD.MM.YYYY");?><br/><? //создадим массив добавления(отнимания) срока(5 дней) $arrAddTime = array( "DD" => -5, "MM" => 0, "YYYY" => 0, "HH" => 0, "MI" => 0, "SS" => 0, ); //Получим дату, младше которой заказы аннулируются //echo $date_critical_order = date("d.m.Y",AddToTimeStamp($arrAddTime, $stmp)); // получим все заказы старше текущей даты на 5 дней $arFilter = Array( "PAYED"=>"N", "CANCELED"=>"N", "<=DATE_INSERT"=>date($DB->DateFormatToPHP(CSite::GetDateFormat("SHORT")),AddToTimeStamp($arrAddTime, $stmp)) ); $db_sales = CSaleOrder::GetList( array("ID"=>"DESC"), $arFilter, false, false, //array() array("ID", "PAYED", "CANCELED", "DATE_INSERT", "USER_LOGIN") ); while ($id_sales = $db_sales->Fetch()) { CSaleOrder::CancelOrder($id_sales["ID"], "Y", "Заказ не был оплачен более 5 дней с момента оформления и аннулирован."); } return "My_Clear_Orders();"; // обязательно сделаем return для агента, иначе агент самоуничтожится после одного запуска } } |