פיתוח מודול מחשבון שירות מותאם אישית ל-1C-Bitrix
לקוח נכנס לאזור, בוחר גימור — ועוזב. בלי מחיר. בלי פנייה. מוכר? מחשבון שירות ב-Bitrix פותר את זה: המשתמש מקבל עלות מיידית ומגיש פנייה. אנו מפתחים מודולים מותאמים אישית שמשתלבים באתר שלכם ועובדים עם CRM. אין פתרונות מוכנים — רק מותאמים ללוגיקה העסקית ולנוסחאות שלכם.
מחשבונים מוכנים ב-Bitrix marketplace כמעט לא קיימים, או שהם פרימיטיביים מדי. לעסק רציני — חברת ביטוח, קבלן בנייה, בית דפוס — נדרש מודול עם נוסחאות גמישות ואינטגרציית CRM. הניסיון שלנו מראה שמחשבון בנוי כראוי מגדיל את ההמרה פי 2–3: הלקוח מבין את התמחור ונותן אמון בחברה.
מתי נדרש מחשבון מותאם אישית?
אם העסק שלכם משתמש בתעריפים לא סטנדרטיים, במקדמי אזור, או תלוי בנתונים מ-1C, תוסף מוכן לא יספיק. מודול מותאם אישית נותן שליטה מלאה בנוסחאות ובאינטגרציות. השוו: פתרונות מוכנים מטפלים רק בתלות ליניארית, בעוד מודול מותאם אישית מטפל בהסתעפויות ובספריות חיצוניות. המרת לידים עם מחשבון כזה גבוהה פי 2 — הוכח בפרויקטים.
כיצד פועל מנוע הנוסחאות
הנוסחה מאוחסנת במבנה JSON שמפורש גם בשרת (PHP) וגם בלקוח (JavaScript). סנכרון הוא קריטי: הסכום הסופי בממשק חייב להתאים לסכום ב-CRM. המפרש PHP FormulaEvaluator::evaluate($formula, $fieldValues) עובר רקורסיבית על העץ ומחשב את התוצאה. בחזית נעשה שימוש במפרש JS זהה.
{ "type": "add", "operands": [
{ "type": "multiply", "operands": [
{"type": "field", "name": "area"},
{"type": "field", "name": "work_type_price"}
] },
{ "type": "if",
"condition": {"type": "gt", "left": {"type": "field", "name": "area"}, "right": 100},
"then": {"type": "multiply", "operands": [
{"type": "ref", "name": "subtotal"},
-0.1
]},
"else": 0
}
] } השוואה: פתרון מוכן לעומת מודול מותאם אישית
| פרמטר | פתרונות מוכנים | מודול מותאם אישית |
|---|---|---|
| גמישות נוסחאות | ליניארי בלבד | כל נוסחה עם תנאים והפניות |
| אינטגרציית CRM | מוגבלת | מלאה, עם יצירת לידים ועסקאות |
| קישור למחירי קטלוג | לא | כן, דרך { "type": "add", "operands": [ { "type": "multiply", "operands": [ {"type": "field", "name": "area"}, {"type": "field", "name": "work_type_price"} ] }, { "type": "if", "condition": {"type": "gt", "left": {"type": "field", "name": "area"}, "right": 100}, "then": {"type": "multiply", "operands": [{"type": "ref", "name": "subtotal"}, -0.1]}, "else": 0 } ] } |
| שדות תלויים | לא | כן, עם סינון דינמי |
| ממשק ניהול | סטנדרטי | תחת המותג והלוגיקה שלכם |
ארכיטקטורת המודול: טבלאות וסוגי שדות
המודול b_catalog_price כולל ארבע טבלאות עיקריות:
-
vendor.calculator— מחשבונים: id, name, slug, config (JSON של שדות ושלבים), formula (עץ חישוב JSON), crm_target (ליד/עסקה), is_active -
b_vendor_calc_calculator— שדות מחשבון: id, calculator_id, type, name, label, options (JSON), depends_on, validation_rules, sort -
b_vendor_calc_field— חישובים שמורים: id, calculator_id, session_id, user_id, params (JSON), result (סכום JSON), created_at -
b_vendor_calc_result— קישור בין חישוב לליד/עסקה ב-CRM: result_id, crm_type, crm_id
סוגי שדות:
-
b_vendor_calc_lead— שדה מספרי עם min/max/step -
number— סליידר עם טווח -
slider— תפריט נפתח עם קישור למקדם -
select— דגל עם עלות נוספת -
checkbox— בחירה יחידה -
radio— קלט דו-ממדי (רוחב × גובה) -
area— בחירת מוצר מאינפובלוק עם החלפה אוטומטית של מחיר
למה חישוב מחדש ראקטיבי חשוב
בחזית — חישוב מחדש ראקטיבי ללא טעינת עמוד. בכל שינוי שדה:
- נאספים הערכים הנוכחיים של כל השדות
- מחושבת עותק מקומי של הנוסחה ב-JS (אותה לוגיקה כמו PHP)
- התוצאה מתעדכנת מיידית בממשק
- בנוסף: בקשת AJAX לשרת לחישוב מדויק באמצעות מחירי מסד נתונים בפועל
// Пересчёт при изменении поля
document.querySelectorAll('.calc-field').forEach(field => {
field.addEventListener('change', () => {
const values = collectFieldValues();
const localResult = evaluateFormula(calculatorConfig.formula, values);
updateResultDisplay(localResult);
debounce(() => fetchServerResult(values), 500)();
});
}); שדות תלויים
התלות מתוארת בתצורת השדה:
{ "name": "material_type", "type": "select", "depends_on": { "field": "work_type", "map": { "painting": ["latex", "acrylic", "oil"], "wallpaper": ["paper", "vinyl", "non-woven"], "tile": ["ceramic", "porcelain", "mosaic"] } } } כאשר נבחר catalog_product, רשימת החומרים מסוננת ל-// Пересчёт при изменении поля document.querySelectorAll('.calc-field').forEach(field => { field.addEventListener('change', () => { const values = collectFieldValues(); const localResult = evaluateFormula(calculatorConfig.formula, values); updateResultDisplay(localResult); debounce(() => fetchServerResult(values), 500)(); }); }); . הלוגיקה פועלת גם בלקוח וגם מאומתת בשרת בעת שליחת הטופס.
שליחת CRM
לאחר החישוב, המשתמש ממלא פרטי יצירת קשר ומגיש את הפנייה. המודול יוצר ליד או עסקה:
$leadFields = [
'TITLE' => 'Расчёт из калькулятора: ' . $calculator['NAME'],
'NAME' => $formData['name'],
'PHONE' => [
['VALUE' => $formData['phone'], 'VALUE_TYPE' => 'WORK']
],
'EMAIL' => [
['VALUE' => $formData['email'], 'VALUE_TYPE' => 'WORK']
],
'COMMENTS' => $this->buildCalculatorComment($result),
'UF_CALC_SUM' => $result['total'],
'SOURCE_ID' => 'CALCULATOR',
];
$leadId = \Bitrix\Crm\LeadTable::add($leadFields)->getId();
פרמטרי החישוב נכתבים להערת הליד ולשדה המותאם אישית { "name": "material_type", "type": "select", "depends_on": { "field": "work_type", "map": { "painting": ["latex", "acrylic", "oil"], "wallpaper": ["paper", "vinyl", "non-woven"], "tile": ["ceramic", "porcelain", "mosaic"] } } } (JSON).
מה כלול
- ארכיטקטורת מסד נתונים ומתקין מודול
- בונה שדות וקונפיגורטור עם ממשק ניהול
- מנוע נוסחאות PHP + JavaScript
- חישוב מחדש ראקטיבי ושדות תלויים
- אינטגרציה עם מחירי קטלוג מסחרי
- שליחת פניות CRM (לידים/עסקאות)
- רכיב להצבה בעמוד
- תיעוד והדרכת עובד מטעמכם
- אחריות ל-30 יום לאחר המסירה
לוח זמנים לפיתוח
| שלב | משך |
|---|---|
| ארכיטקטורה, טבלאות, מתקין | יום אחד |
| בונה שדות וקונפיגורטור | יומיים |
| מנוע נוסחאות PHP + JS | 3 ימים |
| שדות תלויים, חישוב מחדש ראקטיבי | יומיים |
| אינטגרציית מחירי קטלוג | יום אחד |
| שליחת CRM | יום אחד |
| ממשק ניהול | יומיים |
| רכיב הצבה בעמוד | יום אחד |
סה"כ: 13 ימי עבודה. נוסחאות לא סטנדרטיות עם הפניות חיצוניות (טבלאות תעריפים, מקדמי אזור) — הוסיפו 2–3 ימים.
צרו קשר להערכת הפרויקט שלכם. מעל 10 שנות ניסיון בפיתוח Bitrix — אנו מבטיחים איכות ושקיפות. קבלו ייעוץ כדי לדון במשימה שלכם ולהכין הצעה מסחרית. למידע נוסף על מערכות CRM ו-Bitrix24 REST API.

