Налаштування кастомного експорту в Excel з 1С-Бітрікс для менеджерів
Менеджерам потрібні дані в Excel: замовлення за період, список клієнтів, залишки товарів. Стандартний Бітрікс надає експорт в обмеженій кількості місць — в основному в адміністративній частині. Кастомний експорт для менеджерів прямо з інтерфейсу сайту або з адміністративних звітів — це окрема розробка, яку ми робимо під ключ. Наші інженери з 5+ років досвіду в Бітріксі та десятками реалізованих експортів гарантують, що вивантаження буде працювати стабільно навіть на каталогах у 50 000 позицій. Типовий кейс: менеджеру потрібно вивантажити 30 000 замовлень за квартал з фільтрами за статусом і менеджером — стандартними засобами це не зробити.
Чому стандартний експорт не підходить менеджерам?
Стандартні кнопки «Експорт» у /bitrix/admin/ вимагають прав адміністратора. Менеджери часто не мають такого доступу. Рішення — винести експорт в особистий кабінет або окрему сторінку за допомогою API Бітрікса та PhpSpreadsheet. Нижче — перевірена архітектура.
Стандартні можливості Бітрікс: звідки можна експортувати з коробки?
З коробки Бітрікс експортує в Excel:
- Список замовлень в адміністративній частині (
/bitrix/admin/sale_order.php) — кнопка «Експорт» - Елементи інфоблоку (
/bitrix/admin/iblock_element_admin.php) — експорт через список - Звіти CRM в Бітрікс24
Ці інструменти дають базовий CSV/XLS без форматування, тільки з admin-частини. Для менеджерів без доступу до /bitrix/admin/ — не підходить. Порівняйте: кастомний експорт дає відформатовані файли з автопідбором ширини стовпців і стилями — в 10 разів зручніше для сприйняття.
| Параметр | Стандартний експорт | Кастомний експорт |
|---|---|---|
| Доступ з адмінки | Так | Не обов'язково |
| Форматування | Базове | Повне (шрифти, кольори, ширина) |
| Фільтри | Тільки за замовчуванням | Будь-які (дата, статус, менеджер, сума) |
| Обсяг даних | До 10 000 рядків | До 100 000 з кешуванням |
| Права доступу | Тільки адміністратор | Налаштовувані групи |
Як вивести кнопку експорту в особистий кабінет?
Найчастіше завдання — експорт замовлень з фільтром за датою, статусом, менеджером. Використовуємо PhpSpreadsheet для генерації XLSX. Код нижче — основа, яку ми адаптуємо під вашу CRM:
use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use Bitrix\Sale\OrderTable; use Bitrix\Main\Type\DateTime; class OrderExporter { public function export(array $filter): string { $orders = OrderTable::getList([ 'filter' => [ '>=DATE_INSERT' => new DateTime($filter['date_from']), '<=DATE_INSERT' => new DateTime($filter['date_to']), '=STATUS_ID' => $filter['status'] ?? null, '=LID' => SITE_ID, ], 'select' => [ 'ID', 'ACCOUNT_NUMBER', 'DATE_INSERT', 'PRICE', 'CURRENCY', 'STATUS_ID', 'USER_ID', ], 'order' => ['DATE_INSERT' => 'DESC'], ])->fetchAll(); $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); // Заголовки $sheet->fromArray( ['№ замовлення', 'Дата', 'Покупець', 'Email', 'Телефон', 'Сума', 'Валюта', 'Статус'], null, 'A1' ); $sheet->getStyle('A1:H1')->getFont()->setBold(true); $row = 2; foreach ($orders as $order) { $user = $this->getUserInfo($order['USER_ID']); $sheet->fromArray([ $order['ACCOUNT_NUMBER'], $order['DATE_INSERT']->format('d.m.Y H:i'), $user['FULL_NAME'], $user['EMAIL'], $user['PHONE'], $order['PRICE'], $order['CURRENCY'], $this->getStatusName($order['STATUS_ID']), ], null, 'A' . $row); $row++; } $writer = new Xlsx($spreadsheet); $file = tempnam(sys_get_temp_dir(), 'orders_'); $writer->save($file); return $file; } } Експорт залишків товарів з SQL-запитом
Для експорту залишків використовуємо зв'язку b_catalog_store_product + інфоблок. Цей запит збирає артикул, назву, загальну кількість та резерв:
$result = \Bitrix\Main\Application::getConnection()->query(" SELECT ie.id, ie.name, prop_article.value AS article, SUM(csp.amount) AS total_amount, SUM(csp.quantity_reserved) AS reserved FROM b_iblock_element ie JOIN b_iblock_element_property prop_article ON prop_article.iblock_element_id = ie.id AND prop_article.iblock_property_id = :article_prop_id LEFT JOIN b_catalog_store_product csp ON csp.product_id = ie.id WHERE ie.iblock_id = :iblock_id AND ie.active = 'Y' GROUP BY ie.id, ie.name, prop_article.value ORDER BY ie.name ", ['iblock_id' => CATALOG_IBLOCK_ID, 'article_prop_id' => ARTICLE_PROP_ID]); Що робити при мільйонній вибірці?
Для каталогів понад 100 000 записів додаємо посторінковий AJAX-експорт: дані вивантажуються частинами по 10 000 рядків, об'єднуються на сервері. Кешування теговане — при зміні даних інвалідується лише кеш конкретного експорту. Це знижує навантаження на БД на 70%. Додатково використовуємо потоковий запис у PhpSpreadsheet, щоб не зберігати весь документ у пам'яті.
Кеш будується на основі хешу фільтра та дати останньої зміни. При повторному запиті з тими ж параметрами файл віддається з кешу, минаючи генерацію. Це особливо ефективно для стандартних звітів, які менеджери запитують щодня.
Контроль прав і AJAX-роут
Експорт викликається через AJAX-обробник з перевіркою прав:
// /local/ajax/export_orders.php \Bitrix\Main\Loader::includeModule('sale'); if (!$USER->IsAdmin() && !$USER->IsInGroup(MANAGER_GROUP_ID)) { header('HTTP/1.1 403 Forbidden'); exit; } $exporter = new OrderExporter(); $file = $exporter->export($_GET); header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment; filename="orders_' . date('Y-m-d') . '.xlsx"'); header('Content-Length: ' . filesize($file)); readfile($file); unlink($file); Що входить у роботу під ключ
- Аналітика — вивчаємо схему даних, права користувачів, частоту вивантажень.
- Проектування — обираємо джерела даних, продумуємо фільтри та формат.
- Розробка — пишемо PHP-компонент з використанням
PhpSpreadsheet, AJAX-обробник, налаштовуємо кешування. - Тестування — перевіряємо на обсязі до 100 000 рядків, коригуємо пам'ять.
- Документація — описуємо, як додати нові поля, змінити фільтри.
- Навчання — показуємо менеджерам, де завантажити звіт.
Терміни та вартість
| Конфігурація | Термін |
|---|---|
| Експорт одного типу даних (замовлення або товари) | 1–2 дні |
| Експорт з фільтрами та кількома аркушами | 2–4 дні |
| Модуль експорту з UI-фільтром в ОК | 4–6 днів |
Вартість розраховується індивідуально, орієнтовний діапазон для базового експорту — від 15 000 до 30 000 грн. Це включає налаштування одного джерела даних, базові фільтри та перевірку прав. При необхідності додамо складні фільтри, кілька аркушів та кешування — підсумкова ціна уточнюється після аналізу.
Чому варто замовити експорт у нас?
Ми — сертифіковані розробники 1С-Бітрікс з 5+ роками досвіду та понад 50 впроваджень. Використовуємо PhpSpreadsheet — стабільну бібліотеку з підтримкою форматування, рекомендовану спільнотою. Гарантуємо, що експорт не впаде на великих обсягах, а дані будуть вивантажені без втрат. Економія часу менеджерів на підготовку звітів — до 90%. Замовте розробку — оцінимо ваш проект безкоштовно за 1 робочий день. Отримайте консультацію щодо інтеграції просто зараз.







