Система Битрикс24 предлагает довольно гибкий функционал настраиваемых отчетов, но часто его оказывается недостаточно, особенно, когда речь идет о расчете уникальных ключевых показателей эффективности по оценке работы пользователей. В этом случае ничего не остается как написать собственный отчет путем доработки системы. Разберем какие шаги нужно пройти, чтобы это сделать правильно:
- Создаем свой модуль
Модуль нам потребуется для хранения настроек отчета, его компонента и класса контроллера, который будет возвращать в отчет данные.
Настройки определяются в файле 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");?>
Итог: при переходе на добавленнную страницу отчет формируется.