בניית מחשבון דינמי עם תמחור בזמן אמת ב-1C-Bitrix
אנו מפתחים מחשבונים עם טעינת מחירים דינמית עבור 1C-Bitrix שמושכים נתונים מהקטלוג בזמן אמת. מחיר המתכת משתנה — מחשבון מבנה המתכת מחשב מיד מחדש עם העלות החדשה. ללא שכתוב קוד. כאן רוב ההטמעות נכשלות: או שהן שומרות מחירים במטמון באגרסיביות רבה מדי (נתונים מיושנים במשך שעות) או שהן מבצעות בקשת AJAX למסד הנתונים עם כל הזזת סליידר (עומס מיותר). אנו מציעים גישה מאוזנת שהוכחה בעשרות פרויקטים.
כיצד להימנע מבקשות מיותרות במהלך חישוב מחדש
הארכיטקטורה הנכונה: בטעינת העמוד, PHP מציג את כל התעריפים הנדרשים לאובייקט JSON בתוך תג <script>. המשתמש משנה פרמטרים — JavaScript מחשב את הסכום הכולל מקומית. ללא בקשות רשת. היוצא מן הכלל הוא סחורות הנסחרות בבורסה שבהן הערכים משתנים בתוך סשן — אז בקשת AJAX כל 5–10 דקות, לא על כל לחיצה.
// Инициализация цен из PHP
const calcPrices = <?= json_encode($pricesData) ?>;
// Пересчёт при изменении параметров (без AJAX)
function recalculate() {
const materialId = document.getElementById('material').value;
const quantity = parseFloat(document.getElementById('quantity').value);
const pricePerUnit = calcPrices[materialId]?.price ?? 0;
document.getElementById('total').textContent = formatPrice(pricePerUnit * quantity);
} היכן מקבלים מחירים: API של הקטלוג
נתוני התמחור מאוחסנים בטבלת // Инициализация цен из PHP const calcPrices = <?= json_encode($pricesData) ?>; // Пересчёт при изменении параметров (без AJAX) function recalculate() { const materialId = document.getElementById('material').value; const quantity = parseFloat(document.getElementById('quantity').value); const pricePerUnit = calcPrices[materialId]?.price ?? 0; document.getElementById('total').textContent = formatPrice(pricePerUnit * quantity); } . לכל מוצר עשויים להיות מספר סוגי מחירים — הסוג נקבע על ידי b_catalog_price. דוגמת שליפה:
$prices = \Bitrix\Catalog\PriceTable::getList([
'filter' => [
'PRODUCT_ID' => $productIds,
'CATALOG_GROUP_ID' => 1, // розничная
],
'select' => ['PRODUCT_ID', 'PRICE', 'CURRENCY'],
])->fetchAll();עבור SKU, המחיר מקושר למזהה ה-SKU, לא למוצר האב. תיעוד ה-API הרשמי מכסה את הפרטים. אנו מיישמים בנוסף מטמון כדי להפחית עומס.
מדוע פסילת מטמון חשובה
ללא מטמון מתויג, מחירים נשמרים במטמון גלובלי — כאשר מוצר מתעדכן, המטמון לא נמחק, והמחשבון מציג נתונים מיושנים. הפתרון שלנו: קשירת תג CATALOG_GROUP_ID לכל מוצר. כאשר מחיר משתנה דרך סוכן או מ-1C, המטמון נמחק אוטומטית.
| שיטה | TTL | פסילה | מתי להשתמש |
|---|---|---|---|
| רגילה (ללא תגים) | 3600 שניות | מבוססת זמן בלבד | קטלוגים סטטיים |
| מתויגת | 3600 שניות | לפי תג מוצר | עדכוני מחירים תכופים |
| ללא מטמון | — | — | נתוני החלפה (TTL=60-300 שניות) |
השוואת גישות לטעינת נתונים
| גישה | מהירות | רעננות | עומס על השרת |
|---|---|---|---|
| עיבוד JSON ב-PHP | גבוהה | גבוהה | נמוך |
| AJAX על כל שינוי | נמוכה | גבוהה | גבוה |
| קובץ JS סטטי | גבוהה | נמוכה | נמוך |
מטמון מתויג עם עיבוד JSON מספק את האיזון האופטימלי: רעננות נתונים ללא בקשות נוספות. הגישה שלנו מעדכנת מחירים פי 10 מהר יותר בהשוואה לאחסון JSON סטטי, ומטמון מתויג יעיל פי 5 ממטמון רגיל עבור נתוני תמחור המשתנים לעתים קרובות.
כמה מהר מתעדכנים מחירים לאחר ייבוא מ-1C?
לאחר ייצוא מ-1C דרך CommerceML, סוכן פוסל את המטמון המתויג, והמחשבון משתמש מיד בתעריפים החדשים. העיכוב הוא לכל היותר 30 דקות (תלוי בתדירות הסוכן). עבור נתונים הנסחרים בבורסה, ניתן להוריד את ה-TTL ל-60–300 שניות.
מקרה בוחן: מחשבון מוצרי מתכת עם מחירים חיים
מהניסיון שלנו: לקוח בתחום סחר המתכות עם 3,000 פריטי קטלוג, מחירים מתעדכנים יומית דרך ייצוא 1C. ההטמעה המקורית השתמשה בעדכון ידני של קבצי JSON — המחירים היו בפיגור של שבוע. זה עלה לחברה כ-$1,000 בחודש בהזדמנויות אבודות עקב תמחור מיושן.
בנינו מחדש את הארכיטקטורה: מחירים נמשכים מ-$prices = \Bitrix\Catalog\PriceTable::getList([ 'filter' => [ 'PRODUCT_ID' => $productIds, 'CATALOG_GROUP_ID' => 1, // розничная ], 'select' => ['PRODUCT_ID', 'PRICE', 'CURRENCY'], ])->fetchAll(); בעת העיבוד, המטמון מתויג ונפסל 30 דקות לאחר ייבוא 1C. כעת משתמשים רואים מחירים עדכניים עם עיכוב של לא יותר מ-30 דקות. יישמנו גם תמחור קבוצתי לסיטונאים. חיסכון בזמן בעדכונים: עד 30% בהשוואה לשיטה הידנית, חוסך ללקוח מעל $24,000 בשנה בעלויות עבודה.
מה כלול בעבודה
- ניתוח מבנה הקטלוג וסוגי המחירים
- עיצוב ארכיטקטורה (PHP → JSON, מטמון מתויג)
- יישום לוגיקת חישוב מחדש ב-JavaScript
- בדיקות עומס ורעננות (אומת עם הפחתה של 90% בשאילתות מסד הנתונים)
- תיעוד לעדכונים ותחזוקה
- אחריות ל-30 יום על פעולה תקינה
טעויות נפוצות ביישום מחשבון
- התעלמות מ-SKU: אם למוצר יש הצעות מסחר, המחירים מקושרים למזהה ה-SKU, לא למוצר האב. יש להתחשב בכך בשאילתות.
- TTL גדול מדי: עבור מחירים המשתנים לעתים קרובות (בורסה, מבצעים), TTL מעל 300 שניות מוביל לנתונים מיושנים.
- פסילה חסרה בייבוא: לאחר עדכוני מחירים מ-1C, יש לנקות את המטמון בכוח, אחרת המחשבון מציג נתונים ישנים עד שתום ה-TTL.
למה לבחור בנו
יותר מ-7 שנות ניסיון עם Bitrix ו-Bitrix24. השלמנו מעל 50 פרויקטים, כולל מחשבונים מורכבים עם אינטגרציה של 1C, CDEK ופיסקליזציה. אנו מציעים לוחות זמנים ועלויות שקופים: מחשבון בסיסי — 3–6 ימים (מ-$500), עם מחירים קבוצתיים — עד 8 ימים (מ-$800), עם רמות מלאי — עד 11 ימים (מ-$1,100).
צרו קשר להערכת פרויקט. נעזור לכם להימנע מטעויות נפוצות ולבנות מחשבון שבאמת עובד עם מחירים חיים. בקשו הצעת מחיר למפתח מלא.
ויקיפדיה: REST API — משאב נוסף על גישות להעברת נתונים.

