Как написать свой отчет в «коробке» Битрикс 24?

Система Битрикс24 предлагает довольно гибкий функционал настраиваемых отчетов, но часто его оказывается недостаточно, особенно, когда речь идет о расчете уникальных ключевых показателей эффективности по оценке работы пользователей. В этом случае ничего не остается как написать собственный отчет путем доработки системы. Разберем какие шаги нужно пройти, чтобы это сделать правильно:

  1. Создаем свой модуль

Модуль нам потребуется для хранения настроек отчета, его компонента и класса контроллера, который будет возвращать в отчет данные.

Настройки определяются в файле options.php, в котором описывается массив закладок и самих свойств. Так задав свойство код инфоблока для работы отчета (ib_id) мы в последующем можем брать это значение командой, что особенно актуально, если разработка ведется в ландшафте отличном от продуктива.

\COption::GetOptionString('kpbs.custom', 'ib_id');

Компонент включается в дистрибутив модуля — к вопросам его написания мы вернемся в следующем разделе статьи.

Наконец, контроллер входит модуль для обработки AJAX-запросов. Описав интерфейс контроллера в файле settings.php:

return [
'controllers' => [
'value' => [
'namespaces' => [
'\\kpbs\\custom\\Controller' => 'api'
]
],
'readonly' => true
]
];

мы можем получать через него данные для отчета командой:

BX.ajax.runAction('kpbs:custom.api.signal.getData', {
    data: {
        param: param
    }
}).then(function (response) {
    // если контроллер отработал успешно
    console.log(response);  
}, function (error) {
    // если есть ошибка
    console.log(error);
});

2. Пишем компонент

Компонент используем для того, чтобы получить данные для работы фильтров в отчете — например, списка пользователей в этом случае — в файле class.php.

defined('B_PROLOG_INCLUDED') || die;

class KpbsKpicalculationComponent extends CBitrixComponent
{
public function __construct(CBitrixComponent $component = null)
{
//global $USER;
parent::__construct($component);
}

public function executeComponent()
{
$filter = Array
(
"ACTIVE" => "Y",
"!ID" => 61
//"GROUPS_ID" => Array(1)
);


$rsUser = \CUser::GetList(($by="ID"), ($order="desc"), $filter);
// заносим прочие показатели
$users = array();

while ($arResUser = $rsUser->Fetch()) {
array_push($users, $arResUser);
}

$this->arResult = array(
"USERS" => $users
);

$this->includeComponentTemplate();
}
}

Шаблон компонента необходим для прорисовки визуальной части отчета. Особое место в нем занимает script.js , в котором и инициализируется AJAX-запрос по клику на кнопку Вывести отчет.

3. Создаем физическую страницу для вызова отчета

Для этого, определяемся с разделом сайта, из которого будет вызываться отчет и подключаем в ней компонент командой:

<?php
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
CJSCore::Init(array("jquery"));
$APPLICATION->SetTitle("Отчет по квартальным КПЭ менеджеров");
$APPLICATION->IncludeComponent(
'kpbs.custom:kpi.calculation',
'',
array(
),
array('HIDE_ICONS' => 'Y',)
);
?>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

Итог: при переходе на добавленнную страницу отчет формируется.