תארו לעצמכם: 5,000 הזמנות בחודש, מנהלים מבלים 15 שעות בייצוא נתונים מ-Bitrix ובבניית דוחות ב-Excel. עד 30% מהנתונים אובדים עקב העתקה ידנית. דוחות Bitrix הסטנדרטיים לא מציגים רווח לכל מנהל, ניתוח ABC של מוצרים, או המרה לפי ערוץ. אנליטיקה מותאמת אישית מפחיתה משמעותית את זמן העיבוד הידני ואת העלויות הנלוות.
אנחנו בונים דוחות מכירות מותאמים אישית במפתח מלא — משאילתות ORM ועד לוח מחוונים אדמיניסטרטיבי וייצוא ל-Excel. ב-5 שנים השלמנו מעל 50 פרויקטים עבור חנויות Bitrix. כל דוח מאיץ את קבלת ההחלטות פי 10 מהר יותר מאשר ייצוא ידני.
מגבלות של דוחות Bitrix סטנדרטיים
המודול המובנה sale מציג טבלת הזמנות שטוחה עם קיבוץ מינימלי. ניהול מכירות דורש פילוח לפי מנהל עם החזרות, פירוט לפי קטגוריות מוצרים, דינמיקה של צ'ק ממוצע, וניתוח רכישות חוזרות. דוחות סטנדרטיים לא יכולים לקשר נתונים מטבלאות שונות — הזמנות, סל, תשלומים, מאפייני הזמנה — לשאילתה אנליטית אחת. הערכות מראות שעד 80% מזמן המנהל מושקע בטיפול ידני בנתונים. ללא אנליטיקה מותאמת אישית, העסק מסתמך על ניחושים, לא על מספרים.
איך לבנות דוח הכנסות לפי מנהל?
הדוח המבוקש ביותר — הכנסות לפי תקופה עם פירוט לפי מנהל. משימה: להראות כמה כל מנהל הביא, מכמה הזמנות, צ'ק ממוצע, ושיעור ביטולים. הנתונים נאספים באמצעות שאילתת ORM ל-OrderTable מקובצים לפי מנהל וחודש. המדדים המחושבים: הכנסות (לא כולל ביטולים), סכום מבוטל, מספר הזמנות, צ'ק ממוצע, המרה להזמנה שהושלמה, מהירות עיבוד.
דוגמה לשאילתת ORM (ללא פילטר):
use Bitrix\Sale\Internals\OrderTable;
use Bitrix\Main\Entity\ExpressionField;
$result = OrderTable::getList([
'select' => [
'RESPONSIBLE_ID',
'MONTH' => new ExpressionField('MONTH', "DATE_TRUNC('month', %s)", ['DATE_INSERT']),
'REVENUE' => new ExpressionField('REVENUE', 'SUM(CASE WHEN %s NOT IN (\'F\', \'CA\') THEN %s ELSE 0 END)', ['STATUS_ID', 'PRICE']),
'CANCELLED' => new ExpressionField('CANCELLED', 'SUM(CASE WHEN %s IN (\'F\', \'CA\') THEN %s ELSE 0 END)', ['STATUS_ID', 'PRICE']),
'ORDER_COUNT' => new ExpressionField('ORDER_COUNT', 'COUNT(%s)', ['ID']),
'AVG_CHECK' => new ExpressionField('AVG_CHECK', 'AVG(CASE WHEN %s NOT IN (\'F\', \'CA\') THEN %s END)', ['STATUS_ID', 'PRICE']),
],
'filter' => [
'>=DATE_INSERT' => DateTime::createFromPhp(new \DateTime('first day of this month')),
],
'group' => ['RESPONSIBLE_ID', 'MONTH'],
'order' => ['MONTH' => 'ASC', 'REVENUE' => 'DESC'],
]);מדדי מנהל שאנחנו מחשבים:
- הכנסות (לא כולל ביטולים והחזרות)
- סכום מבוטל — מצביע על איכות העבודה
- צ'ק ממוצע — השוואה בין מנהלים
- מספר הזמנות — עומס עבודה
- המרה מ-"חדש" ל"הושלם" —
use Bitrix\Sale\Internals\OrderTable; use Bitrix\Main\Entity\ExpressionField; $result = OrderTable::getList([ 'select' => [ 'RESPONSIBLE_ID', 'MONTH' => new ExpressionField('MONTH', "DATE_TRUNC('month', %s)", ['DATE_INSERT']), 'REVENUE' => new ExpressionField('REVENUE', 'SUM(CASE WHEN %s NOT IN (\'F\', \'CA\') THEN %s ELSE 0 END)', ['STATUS_ID', 'PRICE']), 'CANCELLED' => new ExpressionField('CANCELLED', 'SUM(CASE WHEN %s IN (\'F\', \'CA\') THEN %s ELSE 0 END)', ['STATUS_ID', 'PRICE']), 'ORDER_COUNT' => new ExpressionField('ORDER_COUNT', 'COUNT(%s)', ['ID']), 'AVG_CHECK' => new ExpressionField('AVG_CHECK', 'AVG(CASE WHEN %s NOT IN (\'F\', \'CA\') THEN %s END)', ['STATUS_ID', 'PRICE']), ], 'filter' => [ '>=DATE_INSERT' => DateTime::createFromPhp(new \DateTime('first day of this month')), ], 'group' => ['RESPONSIBLE_ID', 'MONTH'], 'order' => ['MONTH' => 'ASC', 'REVENUE' => 'DESC'], ]);לפי סטטוס - מהירות עיבוד ממוצעת —
COUNT(status=F) / COUNT(*)
בפרויקט אחד צמצמנו את זמן בניית הדוח מ-15 שניות ל-2 על ידי הוספת אינדקסים מתאימים.
איך לייעל את ביצועי הדוח?
בחנות עם 50,000+ הזמנות, שאילתות קיבוץ ORM לוקחות 3-10 שניות. פתרונות:
- תצוגות חומריות (PostgreSQL) או טבלת סיכום המחושבת מחדש על ידי סוכן פעם בשעה
- אינדקסים חובה:
AVG(DATE_STATUS - DATE_INSERT)על(DATE_INSERT, STATUS_ID),b_sale_orderעל(ORDER_ID, PRODUCT_ID) - מטמון דוח ב-Bitrix
b_sale_basketעם TTL של שעה, מבוטל בעת שינוי הזמנה
ניתוח ABC ויישומו ב-Bitrix
ניתוח ABC מראה אילו מוצרים וקטגוריות מייצרים הכנסות ואילו הם משקל מת. בדרך כלל 20% מהמוצרים מביאים 80% מההכנסות. מיושם באמצעות פונקציית חלון managed_cache או פרוגרמטית לאחר שליפת הנתונים. מיין מוצרים לפי הכנסות יורדות, חשב סכום מצטבר, וקבע קטגוריה: A (80% הכנסות), B (15%), C (5%).
מבנה: JOIN SUM() OVER (ORDER BY revenue DESC) עם BasketTable (סינון הזמנות ששולמו) ובלוק מידע קטלוגי. קיבוץ לפי סעיפים עם אגרגציה: הכנסות, יחידות שנמכרו, מחיר מכירה ממוצע, הנחה ממוצעת.
ויזואליזציה ולוח מחוונים
הדוחות ממוקמים בעמוד מותאם אישית ב-OrderTable. ערימת הוויזואליזציה:
- Chart.js — תרשימי קו לדינמיקה, תרשימי עמודות להשוואת מנהלים
- טבלאות HTML עם מיון — לנתונים מפורטים
- PhpSpreadsheet — ייצוא ל-xlsx עם עיצוב, נוסחאות סיכום, עמודות ברוחב אוטומטי
לוח המחוונים בנוי כעמוד יחיד עם טאבים: "סה"כ הכנסות", "לפי מנהל", "לפי מוצר", "ניתוח ABC". הנתונים נטענים דרך נקודת קצה AJAX, פרמטרי פילטר (תקופה, מנהל, קטגוריה) מועברים בבקשה.
אינטגרציה עם מערכות חיצוניות
לתמונה מלאה, לעיתים קרובות יש צורך באינטגרציה עם 1C Trade Management/ERP, CRM, או טלפוניה. אנחנו מחברים נתוני תשלום דרך REST API, מסנכרנים ספריות צדדים, ומוסיפים משפך המרה לפי ערוצי תנועה. לדוח המרה אנו משתמשים בנתוני מודול /local/admin/ ובמאפייני הזמנה מותאמים אישית, ומציגים את מסע הלקוח מליד עד תשלום.
מה כלול בעבודה
- אנליטיקה: הגדרת מדדים, הסכמה על חיתוכים
- בקאנד: שאילתות ORM, אופטימיזציה, מטמון
- פרונטאנד: לוח מחוונים, גרפים, פילטרים
- ייצוא: תבניות Excel, עיצוב
- בדיקות: אימות על נתונים אמיתיים, בדיקות עומס
- תיעוד לדוחות ותמיכה ל-3 חודשים
ציר זמן פיתוח
בדרך כלל 1-2 שבועות תלוי במספר הדוחות ובמורכבות המדדים. שלבים: אנליטיקה (1-2 ימים), בקאנד (3-5 ימים), פרונטאנד (2-3 ימים), ייצוא (יום אחד), בדיקות (1-2 ימים). תוצאה — לוח מחוונים בפאנל הניהול עם ייצוא, המחליף ייצוא ידני ועיבוד Excel.
צרו קשר כדי לדון במדדים שלכם ולקבל ייעוץ. בקשו פיתוח דוח מותאם אישית — נכין הצעה מסחרית תוך יום.

