Доброго времени!
Встала задача - наваять отчет из пула задач в CRM КП "Битрикс".
Условия:
1) время закрытия задачи - в интервале "текущая дата минус два месяца";
2) Задачи отсортированы по затраченному времени.
3) всякие мелкие условия типа прав на просмотр, айдишники пользователей чьи задач попадают в отчет.
Все было бы просто и легко, но столкнулся с проблемой - вызов CTasks::GetList никак не хотел брать в свой первый параметр - поле сортировки - поле, содержащее затраченное время, называется "DURATION_FACT". Вот как будто его там и нету. Пришлось городить свое.
Вот рабочий код, сильно не пинайте (может написано не очень красиво зато работает)
| Код |
|---|
CModule::includemodule('crm');
CModule::IncludeModule('tasks');
$StartDateOld = date($DB->DateFormatToPHP(FORMAT_DATETIME),strtotime("-2 months"));
$users_line2 = CGroup::GetGroupUser(22);
$users_line1 = CGroup::GetGroupUser(17);
$res = CTasks::GetList(
Array("DURATION_FACT" =>"DESC"), //не работает, да и пес с ней, сортировка ниже
Array("CHECK_PERMISSIONS"=>"N",
"!UF_TASKS_USER_TICKET" =>"0",
"!UF_CRM_TASK" =>array("CO_1"),
"REAL_STATUS"=>array(CTasks::STATE_COMPLETED)),
Array("*","UF_*","DURATION_FACT") );
//Выводим шапку табличного отчета
echo "<div align=center>
<font align=center>
<table border='1' align='center' cellpadding='5' cellspacing='0'>
<tr>
<td st yle=\"width:200px;\"> <b>Ответственный</b> </td>
<td st yle=\"width:100px;\"> <b>Номер задачи</b> </td>
<td st yle=\"width:100px;\"><b>Дата закрытия</b>
<td st yle=\"width:300px;\"><b>Описание</b> </td>
<td st yle=\"width:80px;\"> <b>Затрачено</b> </td>
</tr>
</table></font></div>";
//
while ($arTask = $res->GetNext())
{ if (strtotime($arTask["CLOSED_DATE"])>strtotime($StartDateOld)){ //попадаем в двухмесячный интервал
if ((in_array($arTask["RESPONSIBLE_ID"],$users_line2)) or (in_array($arTask["RESPONSIBLE_ID"],$users_line1))) { //проверяем ответственного
$assocTask[]=$arTask; //формируем мегамассив - потом его будем сортировать)))
}}
};
foreach ($assocTask as $key => $row) {
$param[$key] = $row["DURATION_FACT"];} //формирование доп массива, необходимого для работы функции array_multisort(), см ниже
array_multisort($param, SORT_NUMERIC, SORT_DESC, $assocTask); // сама сортировка
foreach ($assocTask as $value){
$table_task_full="<div align=center> //заполнение значимой части отчета
<font align=center>
<table border='1' align='center' cellpadding='5' cellspacing='0'>
<tr st yle=\"border-bottom:none;\">
<td st yle=\"width:200px;border-bottom:none;\"> ".$value["RESPONSIBLE_NAME"]." ".$value["RESPONSIBLE_LAST_NAME"]."</td>
<td st yle=\"width:100px;border-bottom:none;color:green;\">".$value["ID"]."</td>
<td st yle=\"width:100px;border-bottom:none;color:red;\">".$value["CLOSED_DATE"]."</td>
<td st yle=\"width:300px;border-bottom:none;\"><a href=\"/company/personal/user/".$uid."/tasks/task/view/".$value["ID"]."/\" target=_blank>".$value["TITLE"]."</a></td>
<td st yle=\"width:80px;border-bottom:none;\">".$value["DURATION_FACT"]." "."минут"."</td>
</tr>";
echo $table_task_full;
}
|