ספק שולח מחירון עם 3000 מחירי רכישה חדשים. מרווח הקמעונאי שלך קבוע על 40%. צריך לעדכן את המחירים הקמעונאיים עד הבוקר. עדכון ידני אינו ריאלי: 8–10 שעות של עבודה מייגעת עם שגיאות עיגול. ייבוא דרך 1C לא תמיד זמין. עדכון מחירים המוני דרך Bitrix API הוא הפתרון שהקמנו תוך שעות. סקריפט PHP המשתמש ב-D7 ORM מעבד 3000 רשומות תוך 2–3 דקות. סוגי מחירים, קישורי אינפובלוק, תלות בכמויות, ניקוי מטמון מתויג—כל אלה דורשים קוד מדויק. לצוות שלנו יש ניסיון של 10+ שנים במשימות כאלה והוא מספק תוצאות יציבות. מפתחי 1C-Bitrix מוסמכים מציעים פתרון סוהר. צור קשר כדי לדון בקטלוג שלך.
בעיות שעדכון מחירים המוני פותר
עריכה ידנית של אלפי מוצרים לוקחת ימים; סקריפט מטפל בזה תוך דקות. שגיאות עיגול בחישוב מרווח ידני—אוטומציה מבטלת טעויות הקלדה. תלות ב-1C—כאשר החלפת CommerceML אינה מוגדרת או זמנית לא זמינה, ה-API מציל את המצב. קטלוגים עד 100,000 מוצרים מעובדים ללא השבתה.
איך עדכון המוני עובד דרך D7 ORM
מחירים מאוחסנים ב-b_catalog_price. שדות מפתח: PRODUCT_ID, CATALOG_GROUP_ID (סוג מחיר), PRICE, CURRENCY, QUANTITY_FROM, QUANTITY_TO (לטווחי מחירים). סוגי מחירים נמצאים ב-b_catalog_group: BASE הוא הבסיס, אחרים נוספים (קמעונאי, סיטונאי, רכישה). CATALOG_GROUP_ID = 1 בדרך כלל אומר מחיר בסיס, אבל זה תלוי בהגדרה הספציפית.
השוואת שיטות עדכון
עדכון ישיר דרך API מהיר פי 50 מ-CommerceML לעדכונים חד-פעמיים—יתרון מרכזי למשימות דחופות.
| שיטה | מהירות | מיומנות נדרשת | מתאים ביותר ל |
|---|---|---|---|
| ייבוא דרך 1C CommerceML | בינונית, תלוי בסנכרון | ידע ב-1C ו-CommerceML | עדכונים קבועים עם 1C |
| עדכון ישיר דרך API עם D7 ORM | גבוהה—3000 רשומות תוך דקות | PHP, Bitrix API | עדכונים המוניים חד-פעמיים |
| CSV/Excel + סקריפט | גבוהה, אבל דורש ניתוח | PhpSpreadsheet, Bitrix D7 | כל עדכון עם קבצי ספק |
עבודה עם PriceTable API
קבל מזהה סוג מחיר לפי שם:
$priceType = \Bitrix\Catalog\GroupTable::getList([
'filter' => ['NAME' => 'Розничная'],
'select' => ['ID'],
])->fetch();
$priceTypeId = $priceType['ID'];לפרטים נוספים, ראה את התיעוד הרשמי.
יישום: מטעינת מחירון ועד ניקוי מטמון
טעינה מ-Excel/CSV וחישוב מרווח
מחירוני ספקים מגיעים בדרך כלל ב-Excel או CSV. לניתוח Excel, אנו משתמשים ב-PhpSpreadsheet:
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load('/path/to/price.xlsx');
$sheet = $spreadsheet->getActiveSheet();
foreach ($sheet->getRowIterator(2) as $row) {
// со второй строки (пропускаем заголовок)
$cells = $row->getCellIterator();
$cells->setIterateOnlyExistingCells(false);
$rowData = [];
foreach ($cells as $cell) {
$rowData[] = $cell->getValue();
}
$articul = $rowData[0]; // A: артикул
$newPurchase = (float)$rowData[3]; // D: закупочная цена
// Найти товар по артикулу
$productId = findProductByArticul($articul);
if ($productId) {
updatePrice($productId, PURCHASE_PRICE_TYPE_ID, $newPurchase);
updatePrice($productId, RETAIL_PRICE_TYPE_ID, calcRetailPrice($newPurchase, 40.0));
}
}חישוב מחיר קמעונאי לפי מרווח:
function calcRetailPrice(float $purchasePrice, float $markup): float {
return round($purchasePrice * (1 + $markup / 100), 2);
} ניקוי מטמון ויומן שינויים
לאחר עדכון מחירים המוני, דפי הקטלוג מציגים מחירים ישנים במטמון. נקה מטמון עבור כל הקטלוג:
\Bitrix\Main\Application::getInstance()->getTaggedCache()->clearByTag('catalog');
// или сброс по инфоблоку
\Bitrix\Main\Application::getInstance()->getTaggedCache()->clearByTag('iblock_id_' . $iblockId);לחלופין, אל תנקה מטמון גלובלית וחכה לתפוגת TTL טבעית. אבל אם המחירים השתנו למבצע מוגבל בזמן, ניקוי הוא חובה.
לצורכי ביקורת, אנו ממליצים לשמור מחירים ישנים לפני העדכון בטבלה מותאמת אישית $priceType = \Bitrix\Catalog\GroupTable::getList([ 'filter' => ['NAME' => 'Розничная'], 'select' => ['ID'], ])->fetch(); $priceTypeId = $priceType['ID']; עם שדות $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load('/path/to/price.xlsx'); $sheet = $spreadsheet->getActiveSheet(); foreach ($sheet->getRowIterator(2) as $row) { // со второй строки (пропускаем заголовок) $cells = $row->getCellIterator(); $cells->setIterateOnlyExistingCells(false); $rowData = []; foreach ($cells as $cell) { $rowData[] = $cell->getValue(); } $articul = $rowData[0]; // A: артикул $newPurchase = (float)$rowData[3]; // D: закупочная цена // Найти товар по артикулу $productId = findProductByArticul($articul); if ($productId) { updatePrice($productId, PURCHASE_PRICE_TYPE_ID, $newPurchase); updatePrice($productId, RETAIL_PRICE_TYPE_ID, calcRetailPrice($newPurchase, 40.0)); } } . זה מאפשר גלגול לאחור של עדכונים שגויים וניתוח דינמיקת מחירים.
תהליך עדכון שלב אחר שלב
- הכן את המחירון בפורמט Excel או CSV.
- נתח את הקובץ עם PhpSpreadsheet, חלץ SKU ומחירים.
- אמת ומפה SKU למזהי מוצרים באינפובלוק.
- הרץ לולאת אצווה של 100 רשומות עם הפסקה של 50ms לעדכון מחירים דרך PriceTable API.
- חשב מחיר קמעונאי לפי מרווח וכתוב את שני סוגי המחירים.
- נקה את המטמון המתויג של הקטלוג.
- כתוב יומן שינויים לטבלת
function calcRetailPrice(float $purchasePrice, float $markup): float { return round($purchasePrice * (1 + $markup / 100), 2); }.
איך להימנע משגיאות במהלך עדכון המוני
בדוק את הסקריפט על עותק של הקטלוג לפני הייצור. הפעל רישום שגיאות ב-PHP והשתמש בטרנזקציות MySQL לאטומיות. אנו כוללים את כל האלמנטים האלה בהיקף העבודה הסטנדרטי.
שגיאות אופייניות
- מזהה סוג מחיר שגוי—מחירים הולכים למקום הלא נכון.
- אין אצווה—MySQL קורסת על 10,000 מוצרים.
- חוסר ניקוי מטמון—מחירים ישנים נשארים בחנות.
- אין טרנזקציה—עדכון חלקי במקרה של כשל.
אם העדכון נכשל, הפעל מחדש את הסקריפט—הוא מדלג על רשומות שכבר עודכנו אם יש דגל \Bitrix\Main\Application::getInstance()->getTaggedCache()->clearByTag('catalog'); // или сброс по инфоблоку \Bitrix\Main\Application::getInstance()->getTaggedCache()->clearByTag('iblock_id_' . $iblockId); . או גלגל לאחור באמצעות טבלת catalog_price_history אם נוצרה.
מה כלול בהגדרת עדכון המוני ואילו ערבויות אנו מספקים
- ניתוח מבנה הקטלוג הנוכחי וסוגי מחירים.
- פיתוח סקריפט ייבוא מ-Excel/CSV עם חישוב מרווח אוטומטי.
- יישום אצווה לנפחים גדולים (עד 100,000 מוצרים).
- הגדרת ניקוי מטמון מתויג.
- יצירת טבלת יומן שינויים.
- בדיקה על עותק של הקטלוג.
- תיעוד סקריפט והוראות הפעלה.
- ערבות ל-30 יום לפעולה יציבה.
צור קשר להערכת פרויקט. בממוצע, אנו מקצרים את זמן העדכון משעות לדקות עבור קטלוגים של 10,000+ פריטים.

