פורטל ספקים לדרופשיפינג על 1C-Bitrix

ספקים מבזבזים שעות על סנכרון ידני של מלאי והזמנות, ושגיאות החלפת נתונים גדלות עם המגוון. אנו מפתחים חשבון אישי לספק על 1C-Bitrix שמבצע אוטומציה של משימות שגרתיות ומבדיל גישה למוצרים והזמנות. הצוות שלנו מוסר את הפרויקט במפתח מלא—מביקורת תהליכים ועד הטמעה ותמיכה שוטפת.
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
פורטל ספקים לדרופשיפינג על 1C-Bitrix
בינוני
~1-2 שבועות

הכישורים שלנו:

שאלות נפוצות

פורטל ספקים לדרופשיפינג על 1C-Bitrix

בפרויקט אחד עם 60 ספקים, מנהל בילה 3 שעות ביום בסנכרון מלאי באמצעות Excel. לאחר הטמעת פורטל ספקים, הזמן הזה ירד ל-10 דקות. חנויות דרופשיפינג רבות מתמודדות עם אותו כאב: ספקים לא יכולים לראות את ההזמנות שלהם, מעדכנים מחירים באמצעות דוא"ל, ושגיאות הזנה ידניות מגיעות ל-12%. בניית אזור אישי נפרד לכל ספק על 1C-Bitrix פותרת את הבעיות האלה: הרשאות מבודדות, מוצרים והזמנות משלהם, העלאת CSV בכמות גדולה. אנו הופכים את השגרה לאוטומטית כך שספק מבלה 15 דקות במקום 4 שעות—והשגיאות מתקרבות לאפס.

הניסיון שלנו: מעל 10 שנות פיתוח Bitrix, יותר מ-50 פרויקטים של מסחר אלקטרוני. אנו מבטיחים פעילות יציבה של האזור האישי בעומס של עד 100 ספקים פעילים בו-זמנית. נבחן את הפרויקט שלך תוך יומיים: צור קשר לייעוץ.

כיצד לארגן הפרדת הרשאות לספקים

ב-Bitrix, הפרדת הרשאות מיושמת באמצעות קבוצות משתמשים. אנו יוצרים קבוצת "ספקים" דרך ה-API:

$groupId = CGroup::Add([ 'ACTIVE' => 'Y', 'NAME' => 'Поставщики', 'STRING_ID' => 'SUPPLIERS', ]); 

קישור ספק ספציפי למוצרים שלו נעשה דרך בלוק HL $groupId = CGroup::Add([ 'ACTIVE' => 'Y', 'NAME' => 'Поставщики', 'STRING_ID' => 'SUPPLIERS', ]); או מאפיין בלוק מידע SupplierProduct מסוג "קישור למשתמש" (SUPPLIER_ID). אזור הספק מוגן על ידי בדיקת הקבוצה:

if (!$USER->IsAuthorized() || !$USER->IsInGroup($supplierGroupId)) {
    LocalRedirect('/auth/?backurl=' . urlencode($_SERVER['REQUEST_URI']));
}

מידע נוסף על קבוצות משתמשים בתיעוד.

רכיבי האזור האישי: מוצרים, הזמנות, מחירים

מה כולל הבלוק "המוצרים שלי"?

רשימת המוצרים של הספק עם מלאי ומחיר עדכניים. שאילתה דרך E מסוננת לפי if (!$USER->IsAuthorized() || !$USER->IsInGroup($supplierGroupId)) { LocalRedirect('/auth/?backurl=' . urlencode($_SERVER['REQUEST_URI'])); } :

$userId = $USER->GetID();
$res = CIBlockElement::GetList(
    ['NAME' => 'ASC'],
    [
        'IBLOCK_ID' => CATALOG_IBLOCK_ID,
        'ACTIVE' => 'Y',
        'PROPERTY_SUPPLIER_ID' => $userId,
    ],
    false,
    false,
    ['ID', 'NAME', 'DETAIL_PAGE_URL', 'PREVIEW_PICTURE', 'PROPERTY_SUPPLIER_ID']
);

עבור כל מוצר, אנו מציגים מלאי עדכני מ-CIBlockElement::GetList ומחיר מ-SUPPLIER_ID. לכל ספק יש מחסן משלו ($userId = $USER->GetID(); $res = CIBlockElement::GetList( ['NAME' => 'ASC'], [ 'IBLOCK_ID' => CATALOG_IBLOCK_ID, 'ACTIVE' => 'Y', 'PROPERTY_SUPPLIER_ID' => $userId, ], false, false, ['ID', 'NAME', 'DETAIL_PAGE_URL', 'PREVIEW_PICTURE', 'PROPERTY_SUPPLIER_ID'] ); )—זה מאפשר מעקב מלאי עצמאי.

כיצד ספק מעדכן מחירים ומלאי?

הספק שולח בקשת AJAX מטופס. המטפל בודק בעלות על המוצר ומבצע את העדכון:

// /local/ajax/supplier-update.php
$productId = (int)$_POST['product_id'];
$newPrice = (float)$_POST['price'];
$newQty = (int)$_POST['quantity'];

$ownerCheck = CIBlockElement::GetProperty(
    CATALOG_IBLOCK_ID,
    $productId,
    'sort',
    'asc',
    ['CODE' => 'SUPPLIER_ID', 'VALUE' => $USER->GetID()]
);
if (!$ownerCheck->Fetch()) {
    echo json_encode(['error' => 'Доступ запрещён']);
    die();
}

$priceRow = CCatalogPrice::GetList(
    [],
    ['PRODUCT_ID' => $productId, 'CATALOG_GROUP_ID' => BASE_PRICE_GROUP_ID]
)->Fetch();
if ($priceRow) {
    CCatalogPrice::Update($priceRow['ID'], ['PRICE' => $newPrice, 'CURRENCY' => 'RUB']);
} else {
    CCatalogPrice::Add([
        'PRODUCT_ID' => $productId,
        'CATALOG_GROUP_ID' => BASE_PRICE_GROUP_ID,
        'PRICE' => $newPrice,
        'CURRENCY' => 'RUB',
    ]);
}

$storeProductRow = CCatalogStoreProduct::GetList(
    [],
    ['PRODUCT_ID' => $productId, 'STORE_ID' => getSupplierStoreId($userId)]
)->Fetch();
if ($storeProductRow) {
    CCatalogStoreProduct::Update($storeProductRow['ID'], ['AMOUNT' => $newQty]);
} else {
    CCatalogStoreProduct::Add([
        'PRODUCT_ID' => $productId,
        'STORE_ID' => getSupplierStoreId($userId),
        'AMOUNT' => $newQty,
    ]);
}

echo json_encode(['success' => true]);

כיצד ספק רואה את ההזמנות שלו?

הספק רואה רק הזמנות המכילות את המוצרים שלו. שאילתה ישירה ל-b_catalog_store_product אינה מתאימה—אנחנו צריכים קישור דרך סל הקניות:

$supplierId = $USER->GetID();
$connection = \Bitrix\Main\Application::getConnection();
$orders = $connection->query("
    SELECT DISTINCT o.ID, o.DATE_INSERT, o.PRICE, o.STATUS_ID, o.USER_ID, u.NAME, u.LAST_NAME, u.EMAIL
    FROM b_sale_order o
    JOIN b_sale_basket b ON b.ORDER_ID = o.ID
    JOIN b_iblock_element_property ep ON ep.IBLOCK_ELEMENT_ID = b.PRODUCT_ID AND ep.IBLOCK_PROPERTY_ID = " . SUPPLIER_PROP_ID . " AND ep.VALUE_NUM = {$supplierId}
    LEFT JOIN b_user u ON u.ID = o.USER_ID
    WHERE o.DATE_INSERT >= DATE_SUB(NOW(), INTERVAL 90 DAY)
    ORDER BY o.DATE_INSERT DESC
    LIMIT 100
");

בדף פרטי ההזמנה, הספק רואה רק את פריטי הסל שלו.

אישור משלוח וסטטוסים

הספק מאשר משלוח של חלקו בהזמנה דרך הממשק. הסטטוסים נשמרים בבלוק HL b_catalog_price עם שדות: b_catalog_store, // /local/ajax/supplier-update.php $productId = (int)$_POST['product_id']; $newPrice = (float)$_POST['price']; $newQty = (int)$_POST['quantity']; $ownerCheck = CIBlockElement::GetProperty( CATALOG_IBLOCK_ID, $productId, 'sort', 'asc', ['CODE' => 'SUPPLIER_ID', 'VALUE' => $USER->GetID()] ); if (!$ownerCheck->Fetch()) { echo json_encode(['error' => 'Доступ запрещён']); die(); } $priceRow = CCatalogPrice::GetList( [], ['PRODUCT_ID' => $productId, 'CATALOG_GROUP_ID' => BASE_PRICE_GROUP_ID] )->Fetch(); if ($priceRow) { CCatalogPrice::Update($priceRow['ID'], ['PRICE' => $newPrice, 'CURRENCY' => 'RUB']); } else { CCatalogPrice::Add([ 'PRODUCT_ID' => $productId, 'CATALOG_GROUP_ID' => BASE_PRICE_GROUP_ID, 'PRICE' => $newPrice, 'CURRENCY' => 'RUB', ]); } $storeProductRow = CCatalogStoreProduct::GetList( [], ['PRODUCT_ID' => $productId, 'STORE_ID' => getSupplierStoreId($userId)] )->Fetch(); if ($storeProductRow) { CCatalogStoreProduct::Update($storeProductRow['ID'], ['AMOUNT' => $newQty]); } else { CCatalogStoreProduct::Add([ 'PRODUCT_ID' => $productId, 'STORE_ID' => getSupplierStoreId($userId), 'AMOUNT' => $newQty, ]); } echo json_encode(['success' => true]); , b_sale_order (ממתין/אושר/נשלח/נמסר), $supplierId = $USER->GetID(); $connection = \Bitrix\Main\Application::getConnection(); $orders = $connection->query(" SELECT DISTINCT o.ID, o.DATE_INSERT, o.PRICE, o.STATUS_ID, o.USER_ID, u.NAME, u.LAST_NAME, u.EMAIL FROM b_sale_order o JOIN b_sale_basket b ON b.ORDER_ID = o.ID JOIN b_iblock_element_property ep ON ep.IBLOCK_ELEMENT_ID = b.PRODUCT_ID AND ep.IBLOCK_PROPERTY_ID = " . SUPPLIER_PROP_ID . " AND ep.VALUE_NUM = {$supplierId} LEFT JOIN b_user u ON u.ID = o.USER_ID WHERE o.DATE_INSERT >= DATE_SUB(NOW(), INTERVAL 90 DAY) ORDER BY o.DATE_INSERT DESC LIMIT 100 "); , SupplierShipment. כאשר כל הספקים להזמנה קבעו סטטוס UF_ORDER_ID, סוכן משנה אוטומטית את סטטוס ההזמנה ב-Bitrix ל"נשלח".

העלאה בכמות גדולה דרך CSV

עבור ספקים עם מבחר גדול (5000+ פריטים), אנו מספקים טופס העלאת CSV עם עמודות: SKU, מחיר, מלאי. המטפל ב-PHP מוצא את המוצר לפי UF_SUPPLIER_ID, בודק בעלות ספק, ומעדכן מחיר ומלאי אם הכל תקין. מגבלת שורות (עד 5000) מונעת פסק זמן של PHP. עבור קבוצות גדולות יותר, אנו משתמשים בסוכני רקע.

השוואת גישות לניהול ספקים

גישה ניהול ידני פורטל הספקים שלנו
זמן לעדכון 100 מוצרים שעתיים 5 דקות
סיכון לשגיאות 12% <1%
גישה לנתונים גישת אדמין מלאה רק מוצרים והזמנות משלו
מדרגיות עד 10 ספקים 100+ ספקים

שלבי פיתוח

שלב משך תוצאה
אנליטיקה 1–2 ימים דרישות, אבות טיפוס, מודל תפקידים
עיצוב 2–3 ימים ארכיטקטורת DB, מבנה רכיבים
יישום 5–10 ימים פונקציונליות מוכנה: רכיבים, AJAX, אינטגרציות
בדיקות 2–3 ימים אימות הרשאות, בדיקת עומס עד 100 סשנים
פריסה ותיעוד 1–2 ימים התקנה, קאשינג, הדרכת מנהלים

ציר זמן כולל: בין שבוע ל-4 שבועות בהתאם למורכבות (אזור אישי בסיסי—1–1.5 שבועות, מלא עם מחסן ו-CSV—2–3 שבועות, רב-לשוני עם אנליטיקה—3–4 שבועות).

למה חשבון אישי רגיל לא מתאים?

המודול המובנה UF_STATUS ב-Bitrix מיועד לקונים: עגלת קניות, היסטוריית הזמנות, נתונים אישיים. ספק צריך ישויות שונות—ניהול מלאי, העלאה בכמות גדולה, מעקב משלוחים. יתר על כן, ללא הגדרה נוספת, לא ניתן להגביל ספק רק למוצרים שלו. לכן, נדרש פתרון רכיבים נפרד עם מערכת הרשאות משלו.

טעויות נפוצות שאנו מונעים

  • חוסר בדיקות הרשאות על בקשת AJAX—תוקף יכול לעדכן מחירים של אחרים. כל המטפלים מאמתים SUPPLIER_ID.
  • אין קאשינג מתויג—עם 100 ספקים, טעינת עמוד עולה על 10 שניות. אנו משתמשים בקאשינג עם תגי משתמש.
  • מחסן ספק לא נוצר אוטומטית—המלאי של כל הספקים מתערבב. אנו יוצרים מחסן בעת רישום ספק דרך אירוע OnBeforeUserRegister.

יתרונות האוטומציה

החלפת נתונים אוטומטית עם ספקים מהירה פי 5 מהזנה ידנית. שגיאות בעדכונים ידניים מתרחשות ב-12% מהעסקאות—עם הפורטל שלנו, שיעור זה מתקרב לאפס. כל ספק חוסך לפחות 3 שעות ביום על התאמת מלאי.

קבל ייעוץ על ארכיטקטורת האזור האישי—תאר את המצב שלך, ואנו נציע את הפתרון האופטימלי. הזמן פורטל ספקים סוהר והתחל לקבל הזמנות תוך 1–2 שבועות.