Bitrix заказ в excel

Сложность урока:

1 уровень — интуитивно все понятно из интерфейса, но почитать стоит.


1 из 5

Дата изменения:
12.03.2023

Просмотров:
48725

Недоступно в лицензиях:

Текущую редакцию Вашего 1С-Битрикс можно просмотреть на странице Обновление платформы (Marketplace > Обновление платформы).


Ограничений нет

Как получить данные из системы в формате MS Excel

Сохранить данные из «1С-Битрикс: Управление сайтом» на локальный компьютер — достаточно частая задача. Для такой операции используется формат MS Excel. Экспорт в него прост, выполняется в пару кликов прямо из Списка элементов. Используйте для этого кнопку

Настроить




.

Если перед экспортом воспользоваться

фильтром

Фильтр — инструмент «1С-Битрикс: Управление сайтом», позволяющий отобрать из множества элементов нужные по каким-то параметрам. Подробнее…


, то можно сохранить список только нужных вам элементов, а не всех подряд. Другой вариант: настроить таблицу экспортируемых данных, оставив в ней только нужные столбцы, как это описано в уроке Список элементов.

/**

* Формирует список товаров в заказе и выгружает данные в xlsx файл

* Принимает номер заказа

* @global object $APPLICATION

* @param int $order_num

*/

function exportXlsx($order_num) {

    global $APPLICATION;

    $book = ‘list1’; //Название книги в файле

    $order = SaleOrder::load($order_num); //Объект заказа Bitrix D7

    $order_date = $order->getDateInsert()->toString(); //строка — дата создания заказа

    $basket = $order->getBasket(); //Объект корзины Bitrix D7

    include_once ‘xlsxwriter.class.php’; //Подключение библиотеки для манипуляции с xlsx

    $filename = «order_» . $order_num . «.xlsx»; //Имя сформированного файла

    /**

     * Формируем заголовки отправляемые в браузер (Что бы пользователю был предложен диалог сохранения файла)

     */

    header(‘Content-disposition: attachment; filename=»‘ . XLSXWriter::sanitize_filename($filename) . ‘»‘);

    header(«Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet»);

    header(‘Content-Transfer-Encoding: binary’);

    header(‘Cache-Control: must-revalidate’);

    header(‘Pragma: public’);

    //Шапка формируемого файла

    $header = array(

        ‘Код товара’ => ‘string’, //Название колонки — тип данных

        ‘Наименование’ => ‘string’,

        ‘Цена’ => ‘price’,

        ‘Количество’ => ‘integer’,

        ‘Номер заказа’ => ‘integer’,

        ‘Дата заказа’ => ‘string’,

    );

    //Конвертация заголовков в UTF-8 если ваш сайт Bitrix в кодировке Windows-1251

    if (SITE_CHARSET == ‘windows-1251’) {

        $header = array(

            ($APPLICATION->ConvertCharset(‘Код товара’, SITE_CHARSET, ‘UTF-8’)) => ‘string’,

            ($APPLICATION->ConvertCharset(‘Наименование’, SITE_CHARSET, ‘UTF-8’)) => ‘string’,

            ($APPLICATION->ConvertCharset(‘Цена’, SITE_CHARSET, ‘UTF-8’)) => ‘price’,

            ($APPLICATION->ConvertCharset(‘Количество’, SITE_CHARSET, ‘UTF-8’)) => ‘integer’,

            ($APPLICATION->ConvertCharset(‘Номер заказа’, SITE_CHARSET, ‘UTF-8’)) => ‘integer’,

            ($APPLICATION->ConvertCharset(‘Дата заказа’, SITE_CHARSET, ‘UTF-8’)) => ‘string’,

        );

    }

    $rows = []; //Массив данных для записи в файл

    foreach ($basket->getBasketItems() as $item) {//Обход элементов корзины Bitrix D7

        $name = $item->getField(‘NAME’);

        //Масив данных одной строки файла

        $tmp_row = [

            $item->getField(‘PRODUCT_XML_ID’), //Код товара

            $name, //Наименование

            $item->getPrice(), //Цена

            $item->getQuantity(), //Количество

            $order_num, //Номер заказа

            $order_date, //Дата заказа

        ];

        //Конвертация данных в UTF-8 если ваш сайт Bitrix в кодировке Windows-1251

        if (SITE_CHARSET == ‘windows-1251’) {

            $tmp_row = $APPLICATION->ConvertCharsetArray($tmp_row, SITE_CHARSET, ‘UTF-8’);

        }

        $rows[] = $tmp_row;

    }

    $writer = new XLSXWriter();

    $writer->setAuthor(‘Coderun’); //Автор документа

    $writer->writeSheetHeader($book, $header); //Установка шапки для указанной книги в документе

    //Добавление строки из ранее сформированного массива

    foreach ($rows as $row) {

        $writer->writeSheetRow($book, $row);

    }

//Запись файла в поток вывода

    $writer->writeToStdOut();

}

Просмотров: 1900

Задача: Нужно получить информацию о заказах с возможностью указания даты создания «от»» и «до» и выгрузить в Excel файл. Так как заказов может быть очень много, за один шаг это не провернуть (скорее всего, сайт отвалится по таймауту) нужно сделать это пошагово с небольшой паузой между шагами.

Сделано по быстрому, позже дополню заметку, завернув все проделанное в модуль с установщиком, D7 и AJAX.

Пошагово получить информацию о заказах и сохранить как Excel (xls)

Создаем директорию, например: «order_report», что бы к ней не было доступа для всех, можно создать в директории /bitrix/components

В файле init.php добавляем запись, которая создаст пункт меню в админпанели, в разделе «Сервис»:

AddEventHandler("main", "OnBuildGlobalMenu", "AddReportMenus");
function AddReportMenus(&$adminMenu, &$moduleMenu){
    $moduleMenu[] = array(
        "parent_menu" => "global_menu_services", 
        "section" => "Генератор отчетов по заказам",
        "sort"        => 1000,
        "url"         => "/bitrix/components/elements_report/step1.php",
        "text"        => 'Генератор отчетов по заказам',
        "title"       => '',
        "icon"        => "form_menu_icon",
        "page_icon"   => "form_page_icon",
        "items_id"    => "",
        "items"       => array()

    );
}

В директории «elements_report» создаем три файла: generated.xls.php, step1.php, step2.php. Файл generated.xls.php оставляем пустым

Суть в том, что мы просто создаем html таблицу с отчетом, а затем с помощью передачи header-s сохраняем и скачиваем ее как xls файл.
Таким же образом, можно создать эксель таблицу из HTML для любых данных.

Файл step1.php. Здесь у нас просто форма выбора даты «от» и «до» которая отправляет данные на файл step2.php

<? 
require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php"); 
$APPLICATION->SetTitle("Генератор отчета по элементам"); 
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"); 
CJSCore::Init(array("jquery")); 
?> 
<div class="adm-block-wrapper"> 
    <form action="step2.php" method="post"> 
        <input type="text" placeholder="Дата с" onclick="BX.calendar({node: this, field: this, bTime: false});" 
               name="dateFrom"> 
        <input type="text" placeholder="Дата по" onclick="BX.calendar({node: this, field: this, bTime: false});" 
               name="dateTo"> 
        <button type="submit" class="adm-btn adm-btn-save">Создать отчет</button> 
    </form> 
</div> 
<? 
require($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/include/epilog_admin.php"); ?> 

Файл step2.php: здесь выполняется заполнение файла generated.xls.php.

  • Сначала очищается от предыдущего отчета.
  • Добавляется шапка для верстки и заголовков.
  • С помощью CSaleOrder::GetList получаем всю информацию о заказах отсортированных по ID и с фильтром DATE_INSERT.
  • С nTopCount обрабатываем по 50 заказов за раз
  • Внутри цикла заказа дополучаем информацию о корзине заказа с CSaleBasket::GetList с нужными для отчета данным.
  • Формируем строку таблицы с данными о товаре и добавляем в конец файла generated.xls.php
<?php
require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php");
$APPLICATION->SetTitle("Генератор отчета по заказам");
CJSCore::Init(array("jquery"));
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php");
use BitrixMainLoader;
use BitrixSale;
Loader::includeModule("sale");
$generated_xls_php = 'generated.xls.php';
if (!empty($_POST['lastOrderId'])) {
    $arFilter = array(
        ">=DATE_INSERT" => $_POST['dateFrom'],
        "<=DATE_INSERT" => $_POST['dateTo'],
        ">ID" => $_POST['lastOrderId']
    );
} else {
    $arFilter = array(
        ">=DATE_INSERT" => $_POST['dateFrom'],
        "<=DATE_INSERT" => $_POST['dateTo']
    );
    file_put_contents($generated_xls_php, '');
    $fileHeader = '<?
Header("Content-Type: application/force-download");
Header("Content-Type: application/octet-stream");
Header("Content-Type: application/download");
Header("Content-Disposition: attachment;filename=excel_orders.xls");
Header("Content-Transfer-Encoding: binary");
?>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <style>
        td {
            mso-number-format: @;
        }

        .number0 {
            mso-number-format: 0;
        }

        .number2 {
            mso-number-format: Fixed;
        }
    </style>
</head>
<body>

<table border="1">
    <tr>
        <td>ID заказа</td>
        <td>ID товара</td>
        <td>Наименование товара</td>
        <td>Наименование [ID] товара</td>
        <td>Заказ: Доставка</td>
        <td>Оплата: Дата оплаты</td>
        <td>Оплата: Сумма</td>
        <td>Отгрузка: Дата отгрузки</td>
        <td>Общее количество в заказе</td>
        <td>Цена товара</td>
        <td>Скидка на товар</td>
        <td>Количество товара</td>
        <td>Сумма товара</td>
        <td>Налог (%)</td>
        <td>Оплата: Дата докуммента возврата</td>
        <td>Статус: Наименование</td>
        <td>Заказ: Заказ отменён</td>
    </tr>';
    file_put_contents($generated_xls_php, $fileHeader, FILE_APPEND);
}

$dbRes = CSaleOrder::GetList(
    array(
        'ID' => 'ASC'
    ),
    $arFilter,
    false,
    array(
        'nTopCount' => '50'
    ),
    array(
        'ID',
        'PRICE_DELIVERY',
        'DATE_PAYED',
        'SUM_PAID',
        'DATE_DEDUCTED',
        'TAX_VALUE',
        'STATUS_ID'
    ),
    false,
);
$i = 0;
while ($order = $dbRes->Fetch()) {
    $dbBasketItems = CSaleBasket::GetList(
        array("NAME" => "ASC",),
        array("ORDER_ID" => $order['ID']),
        false,
        false,
        array("PRODUCT_ID", "QUANTITY", "NAME", "PRICE", "DISCOUNT_VALUE")
    );
    while ($arItems = $dbBasketItems->Fetch()) {
        $arBasketItems[] = $arItems;
    }
    if ($order['CANCELED'] == 'Y') {
        $canceled = 'Да';
    }

    $statusList = CSaleStatus::GetList(
        array(),
        array('ID' => $order['STATUS_ID']),
        false,
        false,
        array('NAME')
    );
    while ($status = $statusList->Fetch()) {
        $statusName = $status['NAME'];
    }

    foreach ($arBasketItems as $k => $arBasketItem) {
        $orderData = '<tr>
                    <td>' . $order['ID'] . '</td>
                    <td>' . $arBasketItem['PRODUCT_ID'] . '</td>
                    <td>' . $arBasketItem['NAME'] . '</td>
                    <td>' . $arBasketItem['NAME'] . ' [' . $arBasketItem['PRODUCT_ID'] . ']</td>
                    <td>' . $order['PRICE_DELIVERY'] . '</td>
                    <td>' . $order['DATE_PAYED'] . '</td>
                    <td>' . $order['SUM_PAID'] . '</td>
                    <td>' . $order['DATE_DEDUCTED'] . '</td>
                    <td>' . $arBasketItem['QUANTITY'] . '</td>
                    <td>' . $arBasketItem['PRICE'] . '</td>
                    <td>' . $arBasketItem['DISCOUNT_VALUE'] . '</td>
                    <td>' . $arBasketItem['QUANTITY'] . '</td>
                    <td>' . $arBasketItem['QUANTITY'] * $arBasketItem['PRICE'] . '</td>
                    <td>' . $order['TAX_VALUE'] . '</td>
                    <td>' . $order['DATE_CANCELED'] . '</td>
                    <td>' . $statusName . '</td>
                    <td>' . $canceled . '</td>
                  </tr>';
        file_put_contents($generated_xls_php, $orderData, FILE_APPEND);
    }
    $i++;
    $lastOrderId = $order['ID'];
}
if ($i > 1) { ?>
    <form action="" method="post" id="postStep" style="display: none;">
        <input type="text" name="lastOrderId" value="<?= $lastOrderId ?>">
        <input type="text" name="dateFrom" value="<?= $_POST['dateFrom'] ?>">
        <input type="text" name="dateTo" value="<?= $_POST['dateTo'] ?>">
        <button type="submit"></button>
    </form>
<div class="waitwindow" style="width: 500px;">
            Отчет готовится с шагом <?=$i?> заказов за запрос и паузой 1 секунда
</div>
    <script>
        function postForm() {
            $("#postStep").submit();
        }
        setTimeout(postForm, 1000);
    </script>
<?php
} else {
    file_put_contents($generated_xls_php, '</table></body></html>', FILE_APPEND);?>
    <a href="generated.xls.php" class="adm-btn adm-btn-save">Скачать отчет</a>
    <a href="step1.php" class="adm-btn adm-btn-save">Создать новый отчет</a>
    <?php
    //LocalRedirect('generated.xls.php');
}?>
<?php
require($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/include/epilog_admin.php"); ?>
  • В конце обработки пороции из 50-ти заказов, отправляем форму на этуже страницу- с изначально заданными датами и ID последнего обработанного заказа.
  • Эта форма будет отправляться до тех пор, пока колличество заказов больше одного. После обработки последнего выведутся ссылки на скачивание отчета и создание нового.

При желании можете расскомментировать строку LocalRedirect(‘generated.xls.php’);, тогда отчет скачается сразу по готовности.

Улучшение, генерируем xls сразу, без промежуточного php файла

Если файл generated.xls.php получается очень большим, сервер может не справиться с отдачей его как xls файла. На самом деле, можно сразу создать xls файл с таблицей, он точно также откроется экселем.

В файле step2.php меняем
$generated_xls_php = ‘generated.xls.php’;

на $generated_xls_php = ‘generated.xls’;

Из заголовка генерируемого файла убираем:

<?
Header("Content-Type: application/force-download");
Header("Content-Type: application/octet-stream");
Header("Content-Type: application/download");
Header("Content-Disposition: attachment;filename=excel_orders.xls");
Header("Content-Transfer-Encoding: binary");
?>

Ссылку на скачивание готового отчета меняем на:

<a href="generated.xls" download class="adm-btn adm-btn-save">
	Скачать отчет
</a>

<?
define('NO_KEEP_STATISTIC', true);
define('NOT_CHECK_PERMISSIONS', true);
define('NO_AGENT_STATISTIC', true);
define('STOP_STATISTICS', true);
define('BX_CRONTAB_SUPPORT', true);
define('LANGUAGE_ID', 'ru');

ini_set('memory_limit', '512M');

@set_time_limit(0);
@ignore_user_abort(true);

// для запуска на cron необходимо указать корректный путь к корневой папке сайта
$_SERVER["DOCUMENT_ROOT"] = "/home/bitrix/www";

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

$file = $_SERVER["DOCUMENT_ROOT"] . '/export/orders.xls';

CModule::IncludeModule("sale");
use Bitrix\Sale;


$arFilter = Array(
    ">=DATE_INSERT" => date($DB->DateFormatToPHP(CSite::GetDateFormat("SHORT")),  strtotime('yesterday')),
    "<DATE_INSERT" => date($DB->DateFormatToPHP(CSite::GetDateFormat("SHORT")),  strtotime('today'))
);

$arOrders = array();
$db_sales = CSaleOrder::GetList(array("DATE_INSERT" => "ASC"), $arFilter);
$i = 0;
while ($ar_sales = $db_sales->Fetch())
{

    $basket = Sale\Order::load($ar_sales['ID'])->getBasket();
    $basketItems = $basket->getBasketItems();
    $counter = 0;
    foreach ($basket as $basketItem) {
        $productId = $basketItem->getProductId();
        $measure = \Bitrix\Catalog\ProductTable::getCurrentRatioWithMeasure($productId);
        $arOrders[$i]['ITEMS'][$counter] = $basketItem->getField('NAME') . ' - ' . $basketItem->getQuantity() . ' ' . $measure[$productId]['MEASURE']['SYMBOL_RUS'];
        $counter++;
    }
    $arOrders[$i]['DATE_INSERT_FORMAT'] = $ar_sales['DATE_INSERT_FORMAT'];
    $arOrders[$i]['ID'] = $ar_sales['ID'];
    $arOrders[$i]['PRICE_DELIVERY'] = $ar_sales['PRICE_DELIVERY'];
    $arOrders[$i]['PRICE'] = $ar_sales['PRICE'];
    $i++;
}

//echo "<pre>";
//print_r($arOrders);
//echo "</pre>";
$str = "";
$str .= "<html>
<head>
    <title></title>
    <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
    <style>
        td {mso-number-format:\@;}
        .number0 {mso-number-format:0;}
        .number2 {mso-number-format:Fixed;}
    </style>
</head>
<body><table border='1'>

    <tr>
        <td>Дата заказа</td>
        <td>Номер заказа</td>
        <td>Стоимость доставки</td>
        <td>Полная стоимость заказа</td>
        <td>Позиции</td>        
    </tr>";

foreach ($arOrders as $order)
{
    $rowspan = count($order['ITEMS']) > 1 ? 'rowspan="' . count($order['ITEMS']) . '"' : '';
    $str .= "
        <tr>
            <td {$rowspan}>{$order['DATE_INSERT_FORMAT']}</td>
            <td {$rowspan}>{$order['ID']}</td>
            <td {$rowspan}>{$order['PRICE_DELIVERY']}</td>
            <td {$rowspan}>{$order['PRICE']}</td>
            <td>{$order['ITEMS'][0]}</td>        
        </tr>
    ";

    if(count($order['ITEMS']) > 1) {
        foreach ($order['ITEMS'] as $key => $value) {
            if($key == 0) continue;
            $str .= "
                <tr>
                    <td>{$value}</td>
                </tr>
            ";
        }
    }

}

$str .= "</table></body></html>";

//echo $str;


$fp = fopen($file, 'w');
fwrite($fp, $str);
fclose($fp);

$arFiles = array($file);
CEvent::Send("ORDERS_EXPORT", 's2', array(), "N", "", $arFiles);

{«id»:13908,»url»:»/distributions/13908/click?bit=1&hash=133de0e955bbec5d717fb9301ea71e7f16337b853e6c441bb5b7795cf9ea4268″,»title»:»u00abu042fu043du0434u0435u043au0441 u041cu0430u0440u043au0435u0442u00bb u0440u0430u0441u0441u043au0430u0436u0435u0442, u043au0430u043a u0432u044bu0434u0435u043bu0438u0442u044cu0441u044f u0441u0440u0435u0434u0438 u043au043eu043du043au0443u0440u0435u043du0442u043eu0432″,»buttonText»:»u041au0430u043a?»,»imageUuid»:»b9420963-8e52-52ed-a1d6-68e14e88996e»,»isPaidAndBannersEnabled»:false}

Сегодня расскажем как экспортировать из Битрикс24 базу клиентов в Excel.

Рассмотрим на примере экспорта Лидов.

Инструкция:

  1. Войдите в свой Битрикс24 и выберите в верхнем меню раздел Лиды

2. Далее настройте фильтр лидов, которые хотите экспортировать. Для этого нажмите на строку Поиск. В новом окне выберите какие Лиды вас интересуют и нажмите кнопку Найти

3. Теперь нажмите на опцию Список в верхнем углу справа, чтобы увидеть все Лиды в виде списка

4. В этом списке нужно выделить все Лиды (поставьте галочку)

5. Внизу списка нужно указать выбор Для всех

6. После чего нажмите кнопку Подтвердить

7. Затем нажмите на кнопку Настройки (Шестеренка) и выберите в предложенном списке опцию Экспорт Лидов в Excel

8. В новом окошке нужно указать в каком виде экспортировать Лиды, выбрать можно все, поставив галочки, потом нажмите кнопку Выполнить

9. Появится окошко Экспорт Лидов в Excel, здесь будет указан размер файла. Здесь нажмите кнопку Скачать файл экспорта

10. Появится новое окно, с загружаемым файлом. В котором нужно нажать кнопку Сохранить

11. Откройте скачанный файл и нажмите кнопку Разрешить редактирование. Теперь ваша база клиентов размещена в таблице Excel, где все данные и поля при экспорте успешно сохранились

Все, готово! Такой же алгоритм действий применим к экспорту Компаний, Сделок и Контактов из Битрикс24 в Excel.

❗❗❗Важно! Чтобы избежать воровства базы клиентов из Битрикс24, необходимо правильно настроить права доступа.

Как защитить Лиды, Сделки, Контакты и Компании от кражи в Битрикс24?

Инструкция:

  1. В Битрикс24 в верхнем меню нажмите на раздел Настройки и выберите подраздел Права.

2. Далее нажмите на блок Права

3. Открылось окно Права Доступа. Здесь есть Список ролей, выберите нужное из этого списка и нажмите Редактировать (маленький карандашик сбоку)

4. Теперь в окне Управление ролью вы можете в каждом Разделе (Экспорт, Удаление) выбрать опцию Нет доступа.

Теперь ваша база данных будет в целости и сохранности.

Подробнее смотрите наши видео здесь.

О том как выгрузить базу в Битрикс24 смотрите здесь.

⚠ Получите консультацию по внедрению, настройке, технической поддержки Битрикс24:

➡ по телефону (WhatsApp 💬) ☎: +7 (999) 333-17-23

🔊 Подписывайтесь на Telegram канал — получайте новые видео и статьи по возможностям Битрикс 24, обучающие видео Битрикс24, кейсы по Битрикс24 https://t.me/b24_k

🔊 Присоединяйтесь к чату взаимопомощи по Битрикс24 в Telegram! https://t.me/b24help

✅ В этом чате Вы можете задать любой вопрос по работе с Битрикс24, Вам ответят компетентные пользователи 🤗

Logo

Хотите повысить эффективность бизнес-процессов?

Получите оценку работ по внедрению Битрикс24

Как из Битрикс24 выгрузить всю клиентскую базу в Excel?

  • отдельно Лиды
  • отдельно Сделки
  • Контакты
  • Компании

Чтобы экспортировать клиентскую базу в Excel необходимо:

1. Перейти в нужный раздел (Лиды/Сделки/Контакты/Компании)

2. Нажать на шестеренку справа сверху и выбрать пункт «Экспорт в Excel»

  • Если вы не укажите ни одного из предложенных пунктов, то база выгрузится с теми данными, которые сейчас у вас отображаются на экране — в списке Лидов/Сделок/Контактов/Компаний
  • Если вы укажете «Экспортировать реквизиты», то выгрузка будет содержать значения из специального раздела «Реквизиты»
  • Если вы укажете «Экспортировать все поля Контактов/Сделок/Лидов/Компаний», то вы выгрузите данные из всех полей, которые есть в Лиде, Сделке, Контакте или Компании
  • Если вы укажете «Экспортировать с детализацией по товарным позициям», то при выгрузке Сделок у вас также будет отображаться список товаров в каждой сделке.

Выглядеть выгрузка с товарами будет примерно так:

4. После уточнения деталей экспорта нажмите на кнопку «Выполнить» — Битрикс24 сформирует для вас файл для экспорта.
Затем скачайте его, нажав на кнопку «СКАЧАТЬ».
Затем можно закрыть окошко экспорта. Всё.

ПРОБЛЕМЫ С ЭКСПОРТОМ
Иногда может случиться такое, что система вам указывает, что у вас нет данных для экспорта. При этом база клиентов есть.
Это происходит из-за того, что в карточке клиента установлена галочка «Не участвует в экспорте»

Это правило можно изменить массово.
Для этого:
1. выберите все элементы сразу (Контакты, например) — галочкой слева сверху
2. внизу нажмите на кнопку «Выберите действие»
3. выберите пункт «Участвует в экспорте»
4. можете установить галочку так же и в пункте «для всех», но аккуратнее. — действие будет применено абсолютно для всех элементов (всех Контактов, например). Если вам нужно сделать доступными для экспорта только часть элементов, то тогда не нужно устанавливать эту галочку и наоборот.
5. после этого вы сможете экспортировать базу клиентов

Как выгрузить контакты из Битрикс24 в Excel

Чтобы выгрузить контакты из CRM нужно перейти в Контакты ㄧ режим «Список».
Сначала выбираем, какие поля должны отображаться в режиме список. Для этого нажимаем на иконку шестеренки слева и ставим галочки напротив пунктов, которые должны отобразиться в списке.

Указываем в поле «Участвуют в экспорте» значение «Да».

Кликаем на шестеренку ㄧ выбираем «Экспорт контактов в Excel». Указываем, нужно ли экспортировать реквизиты и все поля. Применяем настройки, сохраняем и открываем документ.

Экспорт данных в CRM Битрикс24

Иван Иванов

Для экспорта данных необходимо перейти в тот список сущностей, которые вы хотите экспортировать, далее нажмите на кнопку настроек в списке сущностей и вы увидите доступные варианты для экспорта.

На данный момент есть три варианта экспорта сущностей из CRM:

1. Экспорт в CSV.

После выбора этого способа система предложит вам сохранить файл в формате CSV.

Вы также можете открыть файл сразу в соответствующей программе.

2. Экспорт в Excel.

3. Экспорт в Outlook.

По клику на этот способ система предложит открыть Microsoft Outlook. Нажмите «Ок». Программа запросит у вас разрешение к подключению контактов, нажмите «Да». Во всплывающем окне введите логин и пароль от вашего портала. И после этого будет произведен экспорт контактов.

Обратите внимание, данный способ доступен только для контактов.

Внимание! Для корректной интеграции контактов с Outlook необходим минимум Outlook 2007.

Какие колонки будут экспортированы?

Колонки в файле экспорта будут такие же, как на странице списка элементов. Добавить/изменить/удалить колонки можно в настройках списка:

В списке полей отметьте поля, которые хотите экспортировать, и в конце списка нажмите «Применить».

Учитывается ли фильтр при экспорте?

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

Тогда в фильтре в поле «Ответственный» укажите себя, нажмите «Найти» и после этого произведите экспорт, сущности будут экспортированы в соответствии с фильтром.

Обратите внимание, для успешного экспорта контактов в настройках контакта должна быть отмечена опция «Участвует в экспорте контактов».

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

Если нужно сгенерировать файл со стилями, с функциями, со сложными обработками — тут, конечно же не обойтись без специальных библиотек, вродe PHPExcel. Но если нужны просто данные, которые можно открыть в экселе, как нужно подправить и отправить на печать — тут можно обойтись и без сторонних библиотек.

В нашем, упрощенном варианте, мы просто создадим html-файл с таблицей, который сохраним как .xls. А при открытии экселем данный файл автоматически будет прочитан в таблицу.

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

use BitrixMainIO;
use BitrixMainApplication;
BitrixMainLoader::includeModule('sale');

	$orders = array(XXX.....);  // - массив из идентификаторов заказов, которые нужно выгрузить
if(!empty($orders))
{
	$arOrdersList = array();
	foreach ($orders as $orderID)
	{
		$order = BitrixSaleOrder::load(intval($orderID));
		$propertyCollection = $order->getPropertyCollection();
		$arProperties = array();
		foreach ($propertyCollection->getArray()['properties'] as $property)
		{
			$arProperties[$property['CODE']] = array(
				'NAME'=>$property['NAME'],
				'VALUE'=>$property['VALUE'][0]
			);
		}

		$arBasket = array();
		$basketItems = $order->getBasket()->getBasketItems();
		foreach ($basketItems as $basketItem)
		{
			$arBasket[] = array(
				'ID'=>$basketItem->getId(),
				'PRODUCT_ID'=>$basketItem->getProductId(),
				'NAME'=>$basketItem->getField('NAME'),
				'PRICE'=>$basketItem->getPrice(),
				'QUANTITY'=>$basketItem->getQuantity(),
				'FINAL_PRICE'=>$basketItem->getFinalPrice()
			);
		}

		$arOrdersList[] = array(
			'ID'=>$order->getId(),
			'NUMBER'=>$order->getField('ACCOUNT_NUMBER'),
			'OWNER'=>$arProperties['FIO']['VALUE'],
			'PHONE'=>$arProperties['PHONE']['VALUE'],
			'ADDR'=>$arProperties['ADDRESS']['VALUE'],
			'BASKET'=>$arBasket,
			'ORDER_SUM'=>$order->getPrice(),
			'ORDER_SUM_PAYD'=>$order->getSumPaid(),
			'USER_DESCRIPTION'=>$order->getField('USER_DESCRIPTION'),
			'COMMENTS'=>$order->getField('COMMENTS'),
			'ADDITIONAL_INFO'=>$order->getField('ADDITIONAL_INFO'),
		);
	}
}

Дальше — создаем файл, в который помещаем полученную информацию:

$resultFile = '/upload/data.xls';
$resultAbsFile = Application::getDocumentRoot().$resultFile;
$file = new IOFile($resultAbsFile);
$file->putContents('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="author" content="author" /&пt;
<title>Demo</title>
</head>
<body>
');
$file->putContents('<table border="1 cellspacing="0" cellpadding="0" class="ta1">',IOFile::APPEND);
$file->putContents('<tr>
	<th>№ заказа</th>
	<th>Покупатель</th>
	<th>Телефон</th>
	<th>Адрес доставки:<br> из поля коментарий</th>
	<th>Состав заказа</th>
	<th>Кол-во</th>
	<th>Цена<br>Цена в чек</th>
	<th>Итого к оплате <br>Наложенный платеж</th>

</tr>',IOFile::APPEND);

Помещаем в файл информацию по заказам:

foreach ($arOrdersList as $arOrder)
	{
		$addrLine = $arOrder['ADDR'];
		if(strlen($arOrder['COMMENTS'])>0) $addrLine .= '<br>'.$arOrder['COMMENTS'];
		if(strlen($arOrder['USER_DESCRIPTION'])>0 && $arOrder['USER_DESCRIPTION']!==$arOrder['COMMENTS']) $addrLine .= '<br>'.$arOrder['USER_DESCRIPTION'];
		$basketLine = '<td>';
		foreach ($arOrder['BASKET'] as $num=>$arBasketItem)
		{
			$basketLine.=$arOrder['BASKET'][$num]['NAME'].(count($arOrder['BASKET'])>0 ? '<br>' : '');
		}
		$basketLine .= '</td>';
		$basketLine.='<td>';
		foreach ($arOrder['BASKET'] as $num=>$arBasketItem)
		{
			$basketLine.=$arOrder['BASKET'][$num]['QUANTITY'].(count($arOrder['BASKET'])>0 ? '<br>' : '');
		}
		$basketLine.='</td>';

		$basketLine.='<td>';
		foreach ($arOrder['BASKET'] as $num=>$arBasketItem)
		{
			$basketLine.=$arOrder['BASKET'][$num]['PRICE'].(count($arOrder['BASKET'])>0 ? '<br>' : '');
		}
		$basketLine.='</td>';

		$file->putContents('<tr>',IOFile::APPEND);
		$file->putContents('
			<td>'.$arOrder['NUMBER'].'</td>
			<td>'.$arOrder['OWNER'].'</td>
			<td>'."'".$arOrder['PHONE']." ".'</td>
			<td>'.$addrLine.'</td>'
			.$basketLine.
			'<td>'.(floatval($arOrder['ORDER_SUM'])-floatval($arOrder['ORDER_SUM_PAYD'])).'</td>
			',IOFile::APPEND);
		$file->putContents('</tr>',IOFile::APPEND);
	}

и завершаем файл:

$file->putContents('</table>',IOFile::APPEND);
	$file->putContents('</body></html>',IOFile::APPEND);
	$APPLICATION->RestartBuffer();
		header('Content-type: application/json');
		echo BitrixMainWebJson::encode(array('url'=>$resultFile));
		exit();

Вот такая нехитрая конструкция позволяет сделать жизнь менеджеров немного проще.

0 / 0 / 0

Регистрация: 30.08.2018

Сообщений: 4

1

30.08.2018, 16:07. Показов 2138. Ответов 2


Студворк — интернет-сервис помощи студентам

Приветствую.
Необходимо дать возможность покупателю (не важно авторизован он или нет) скачать свой заказ в формате excel, на странице оформления заказа (самая последняя страница).
В excele должно быть наименование товара, артикул, цена, описание и изображение товара.
То есть пошагово:
1. Покупатель добавляет товары в корзину из каталога
2. В корзине оформляет заказ, вводит свои данные
3. После оформления заказа попадает на страницу успешного оформления, где должна быть кнопка скачать заказ в excel

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

Заранее спасибо.



0



8 / 16 / 2

Регистрация: 15.06.2015

Сообщений: 247

31.08.2018, 04:58

2

Можно брать все свойства заказа через апи битрикса и записывать все в csv файл посредством php. Но тут придется ручками код писать) других способов не знаю.



0



2208 / 1139 / 227

Регистрация: 16.03.2008

Сообщений: 5,387

Записей в блоге: 2

31.08.2018, 09:07

3

Как вариант сделать шаблон для компонента детальной страницы заказа. Только в конце result_modifier.php сделать:
1. Сброс буфера $APPLICATION->RestartBuffer();
2. Установить правильные HTTP заголовки
2. формирование и вывод XLS
3. die().

Для формирования взять готовую библиотеку

Кроме того, если у покупателя нет необходимости редактировать этот файл, более логично, на мой взгляд, формировать PDF — точно ни чего не «разъедется». (готовые библиотеки так же есть)



0



Экспорт позволяет перенести информацию из Битрикс24 в другую систему, сделать резервную копию данных или проанализировать данные из CRM в сторонних программах.

Экспорт доступен только на коммерческих тарифах. Подробнее о тарифах читайте на странице сравнения тарифов.

Правила и условия экспорта

  • Экспортировать можно лиды, сделки, контакты, компании, предложения и счета. В лидах и счетах можно экспортировать элементы на определенных стадиях, а в сделках еще и каждое направление отдельно.
  • Экспортировать элементы могут только сотрудники с правами на экспорт элементов из CRM.
  • Подробнее о правах на действия в CRM читайте в статье Права доступа в CRM.

Права на экспорт.jpg

  • Элементы можно экспортировать только из представления Список, из канбана это сделать не получится.

Представление.jpg

  • Экспортировать элементы можно в форматах csv и xls. Формат файла выбирайте в зависимости от задачи, для решения которой экспортируете данные.
    Файл формата xls представляет собой таблицу, он подойдет для анализирования данных в MS Excel, построения графиков и диаграмм.
    Файл формата csv — это текстовый файл, в котором значения разделены запятыми. Его можно открыть в любом текстовом редакторе.
  • В Битрикс24 можно импортировать файлы только формата csv. Поэтому, если создаете резервную копию элементов перед импортом или какой-либо интеграцией, выбирайте именно его.

Форматы.jpg

Как экспортировать элементы

Откройте список нужных элементов CRM.

Особенность экспорта контактов

В контактах, в отличии от остальных элементов, есть опция Участвует в экспорте контактов. Экспортировать можно только те контакты, в которых опция включена.

Контакты.jpg

Отключать и включать эту опцию можно в карточке элемента или через групповые действия.

Групповое действие.jpg

Список элементов.jpg

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

Подробнее о фильтре читайте в статье Поиск элементов CRM с помощью фильтра.

Фильтр.jpg

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

Набор полей.jpg

Нажмите на шестеренку и выберите формат экспорта. В открывшемся окне вы сможете выбрать нужные опции:

  • Экспортировать все поля сделок и Экспортировать все поля контактов и компаний — эти опции позволяют выгрузить в файл сразу все поля из элементов.
  • Экспортировать с детализацией по товарным позициям — эта опция позволяет выгрузить в файл данные о товарах.

После этого нажмите Выполнить и дождитесь окончания экспорта.

Экспорт.jpg

Вот так выглядит результат экспорта сделок в формате .xls с детализацией по товарным позициям. В данном случае, в сделке с ID 493 указаны два товара, поэтому в файле экспорта одна сделка занимает две строки — по одной на каждый товар.

Результат.jpg

Если отключить детализацию по товарным позициями, то в файле экспорта будет только две строки — по одной на каждую сделку.

Результат 2.jpg

Спасибо, помогло!

Спасибо :)


Это не то, что я ищу


Написано очень сложно и непонятно


Есть устаревшая информация


Слишком коротко, мне не хватает информации


Мне не нравится, как это работает

Понравилась статья? Поделить с друзьями:
  • Bitrix выгрузка товаров в excel
  • Bitrix lists export excel
  • Bitcoin word что это такое
  • Bitcoin at the word
  • Bit to word codesys