ייצוא מותאם אישית ל-Excel מ-1C-Bitrix למנהלים
מנהלים זקוקים לנתונים ב-Excel: הזמנות לתקופה, רשימת לקוחות, יתרות מלאי. הייצוא הסטנדרטי של Bitrix מוגבל ובדרך כלל דורש גישת מנהל מערכת. ייצוא מותאם אישית למנהלים ישירות מממשק האתר או מדוחות הניהול הוא פיתוח נפרד שאנו מבצעים במפתח מלא. המהנדסים שלנו עם ניסיון של 5+ שנים ב-Bitrix ועשרות ייצואים מיושמים מבטיחים פעולה יציבה אפילו בקטלוגים של 50,000 פריטים. מקרה טיפוסי: מנהל צריך לייצא 30,000 הזמנות לרבעון עם מסננים לפי סטטוס ומנהל — כלים סטנדרטיים לא יכולים לעשות זאת.
למה ייצוא סטנדרטי לא מתאים למנהלים?
כפתורי "ייצוא" סטנדרטיים ב-/bitrix/admin/ דורשים זכויות מנהל מערכת. למנהלים לעיתים קרובות אין גישה כזו. הפתרון הוא למקם את הייצוא בחשבון האישי או בעמוד נפרד באמצעות Bitrix API ו-PhpSpreadsheet. להלן ארכיטקטורה מוכחת.
יכולות ייצוא סטנדרטיות של Bitrix: מה זמין כברירת מחדל?
כברירת מחדל, Bitrix מייצא ל-Excel:
- רשימת הזמנות בקטע הניהול (
/bitrix/admin/sale_order.php) — כפתור "ייצוא" - רכיבי בלוק מידע (
/bitrix/admin/iblock_element_admin.php) — ייצוא דרך רשימה - דוחות CRM ב-Bitrix24
כלים אלה מספקים CSV/XLS בסיסי ללא עיצוב, רק מקטע הניהול. למנהלים ללא גישה ל-/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
לייצוא מלאי אנו משתמשים בטבלת 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; } } ובבלוק מידע. שאילתה זו אוספת SKU, שם, כמות כוללת ורזרבה:
$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%. בנוסף, אנו משתמשים בכותב הזרמה של b_catalog_store_product כדי להימנע מהחזקת המסמך כולו בזיכרון.
המטמון נבנה על בסיס hash של המסנן ותאריך השינוי האחרון. בבקשות חוזרות עם אותם פרמטרים, הקובץ מוגש מהמטמון, תוך עקיפת היצירה. זה יעיל במיוחד עבור דוחות סטנדרטיים שמנהלים מבקשים מדי יום.
בקרת גישה ונתיב 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 באמצעות
$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]);, מטפל AJAX, הגדרת מטמון. - בדיקות — בדיקה על נפחים עד 100,000 שורות, התאמת זיכרון.
- תיעוד — תיאור כיצד להוסיף שדות חדשים, לשנות מסננים.
- הדרכה — מראים למנהלים היכן להוריד את הדוח.
לוחות זמנים ועלות
| תצורה | לוח זמנים |
|---|---|
| ייצוא של סוג נתונים אחד (הזמנות או מוצרים) | 1–2 ימים |
| ייצוא עם מסננים וגיליונות מרובים | 2–4 ימים |
| מודול ייצוא עם מסנן ממשק בחשבון אישי | 4–6 ימים |
העלות מחושבת באופן אישי בהתאם למורכבות והיקף הפרויקט. זה כולל הגדרה של מקור נתונים אחד, מסננים בסיסיים ובדיקת הרשאות. אם אתה צריך מסננים מורכבים, גיליונות מרובים או מטמון, המחיר הסופי מובהר לאחר ניתוח.
למה להזמין ייצוא מאיתנו?
אנחנו מפתחי 1C-Bitrix מוסמכים עם ניסיון של 5+ שנים ומעל 50 יישומים. אנו משתמשים ב-PhpSpreadsheet — ספרייה יציבה עם תמיכה בעיצוב, המומלצת על ידי הקהילה. אנו מבטיחים שהייצוא לא ייכשל על נפחים גדולים, ונתונים ייוצאו ללא אובדן. מנהלים חוסכים עד 90% מהזמן בהכנת דוחות. הזמן פיתוח — נבחן את הפרויקט שלך בחינם תוך יום עסקים אחד. קבל ייעוץ על אינטגרציה כבר עכשיו.







