Bitrix24 API: Экспорт дел в ексель и пример создания своего модуля в битрикс.

Bitrix24 API: Экспорт дел  в ексель и пример создания своего модуля в битрикс.
01.10.2019
В СРМ Битрикс24 для всех сущностей - сделки, контакты, компании и товары есть импорт и експорт в ексель, но его нет для дел - встреч, звонков, писем.

Расскажу как я решила эту задачу с помощью модуля выгрузки в ексель. Плагин для выгрузки в ексель я скачала здесь https://github.com/PHPOffice/PhpSpreadsheet.
Далее чтобы подключить его как новый модуль в битрикс24, я переименовала все папки и файлы с маленькой буквы и создала необходимые файлы для модуля битрикс.
  • папку install c файлами index.php и version.php,
  • папку lib, куда я скопировала файлы плагина
  • папку lang и в ней папку ru , а в ней папку install с языковым файлом index.php
  • файл include.php в корне модуля
и саму папку модуля я расположила по пути /local/modules/ на портале битрикс24.

В файле index.php достаточно прописать такой код:
 <?
class phpoffice_phpspreadsheet extends CModule
{ function __construct()
{ $arModuleVersion = array();
include(__DIR__."/version.php");
$this->MODULE_ID = 'phpoffice.phpspreadsheet';
$this->MODULE_VERSION = $arModuleVersion["VERSION"];
$this->MODULE_VERSION_DATE = $arModuleVersion["VERSION_DATE"];
$this->MODULE_NAME = "PhpOffice.PhpSpreadsheet";
$this->MODULE_DESCRIPTION = "PhpOffice.PhpSpreadsheet";
} public function DoInstall(){
        \Bitrix\Main\ModuleManager::registerModule($this->MODULE_ID);     } public function DoUninstall(){         \Bitrix\Main\ModuleManager::unRegisterModule($this->MODULE_ID);     }
}

В файле include.php нечего писать не нужно, а в файле version.php укажите версию модуля, например :

	<?
	$arModuleVersion = array(
	 "VERSION" => "1.6.0",
	 "VERSION_DATE" => "2019-01-02 15:00:00"
	);

	?>

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

После используем этот модуль для создания функционала выгрузки дел в СРМ Битрикс24 в ексель.

Для этого скопируем шаблон вывода списка дел, чтобы добавить в него  функционал выгрузки дел  в ексель.

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

<?php 
define("NO_KEEP_STATISTIC", true); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); if(\Bitrix\Main\Loader::includeModule('phpoffice.phpspreadsheet')){ /*выгрузка в ексель*/ $spreadsheet = new PhpOffice\PhpSpreadsheet\Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $h=[]; foreach($arResult["HEADERS"] as $head) { $h[]=$head["name"]; } $arrayData = []; $arrayData[]=$h;/*заголовки*/ foreach($arResult['ITEMS'] as $item){ $row=[]; if($item["COMPLETED"]=="Y") $item["COMPLETED"]="Выполнено"; else $item["COMPLETED"]="Не выполнено"; if($item['TYPE_ID']== CCrmActivityType::Meeting){ $item['TYPE_ID'] = "Встреча"; } elseif($item['TYPE_ID']== CCrmActivityType::Call){ $item['TYPE_ID'] = "Звонок"; } $temp=explode(" ",$item["DEADLINE"]);
$item["DEADLINE"]=$temp[0]; 
$temp1=explode(" ",$item["CREATED"]); 
$item["CREATED"]=$temp1[0];
foreach($arResult["HEADERS"] as $head){ 
if($head["id"]=="CLIENT"){ 
$row[]=$item["CLIENT_INFO"]["TITLE"];
}elseif($head["id"]=="REFERENCE"){ 
$row[]="Сделка № ".$item["OWNER_ID"];
}else
$row[]=$item[$head["id"]];
}
$arrayData[]=$row;/*строка значений*/ 	
}
$spreadsheet->getActiveSheet()  ->fromArray( $arrayData,  NULL,   'A1'  );

$writer = new PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet); 

$name=date("Y-m-d_H-i-s"); 

$writer->save($_SERVER["DOCUMENT_ROOT"].'/upload/export/'.$name.'.xlsx'); 

}?>

<a id="downloadxlsx" href="/upload/export/<?=$name?>.xlsx">Скачать <?=$name?>.xlsx</a> 

<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");
?> 


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

	<a href="javascript:void(0);" class="ui-btn ui-btn-primary" id="exportxlsx" style="float:right;margin-right: 30px;width: 200px;">Экспорт в Excel</a>
	<div id="xlsxfile" style="padding: 30px 0;"></div>
<script> $(document).ready(function(){ $("#exportxlsx").appendTo(".pagetitle-flexible-space"); var str=document.location.href; if(str.indexOf("apply_filter=Y")>0){ $(".main-ui-search").trigger("click"); } });
$("#exportxlsx").on("click",function(){ $("#xlsxfile").html(" "); $.ajax({ type: "GET", url:"/crm/activity/export.php", dataType:"html", }) .done(function(data){ $("#xlsxfile").append(data); var link=$("#downloadxlsx").attr("href"); document.location.href=link; }); }); </script>

Возврат к списку


Материалы по теме:

Cannot find 'list' template with page ''