שינוי אוטומטי של סטטוס הזמנה ב-1C-Bitrix

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

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

שאלות נפוצות

מצב: חנות מקוונת על 1C-Bitrix גדלה ל-200 הזמנות ביום, ומנהלים מבלים 6 שעות בשינוי סטטוסים ידני: אישור תשלום, ביטול הזמנות באיחור, סימון כנמסרו. זה מגביר את עומס העבודה, לקוחות מתלוננים על עיכובים, והחזרות עולות ב-20% עקב החמצת הודעות. אנו מבצעים אוטומציה של שינוי סטטוסים במפתח מלא—מאירוע פשוט על תשלום ועד אינטגרציה מלאה עם חברות שילוח ותהליכים עסקיים. הגישה שלנו מפחיתה התערבות ידנית ב-70% וחוסכת משמעותית בתקציב משרות מנהלים. אנו מבצעים אוטומציה של Bitrix כבר למעלה מ-5 שנים והעברנו פרויקטים ל-50+ חנויות.

כיצד פועל שינוי סטטוס הזמנה אוטומטי

המערכת מגיבה לאירועי מפתח במחזור חיי ההזמנה. נבחן שלוש גישות עיקריות.

שינוי סטטוס אוטומטי בעת תשלום

האירוע OnSalePaymentPaid מופעל כאשר מודול התשלום מסמן תשלום כהושלם—גם כאשר מנהל מאשר ידנית וגם באמצעות IPN אוטומטי ממערכת תשלום (לדוגמה, YooKassa או Sber):

AddEventHandler('sale', 'OnSalePaymentPaid', function(\Bitrix\Main\Event $event) {
    $payment = $event->getParameter('ENTITY');
    $order = $payment->getOrder();
    if ($payment->isPaid() && $order->getField('STATUS_ID') === 'WAIT_PREPAY') {
        $order->setField('STATUS_ID', 'F');
        $order->save();
    }
});

ביטול אוטומטי לאחר פסק זמן

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

// Регистрация агента (разово)
\CAgent::AddAgent(
    'Local\\Sale\\OrderAgents::cancelUnpaidOrders();',
    'local',
    'N',
    3600, // каждый час
    '',
    'Y',
    \ConvertTimeStamp(time() + 3600, 'FULL'),
);

class OrderAgents
{
    public static function cancelUnpaidOrders(): string
    {
        $deadline = new \Bitrix\Main\Type\DateTime();
        $deadline->add('-24 hours');

        $result = \Bitrix\Sale\Internals\OrderTable::getList([
            'filter' => [
                'STATUS_ID' => 'WAIT_PREPAY',
                '<DATE_INSERT' => $deadline,
            ],
            'select' => ['ID'],
            'limit' => 50,
        ]);

        while ($row = $result->fetch()) {
            $order = \Bitrix\Sale\Order::load($row['ID']);
            if ($order) {
                $order->setField('STATUS_ID', 'CANCEL');
                $order->save();
            }
        }

        return 'Local\\Sale\\OrderAgents::cancelUnpaidOrders();';
    }
}

אוטומציה באמצעות תהליכים עסקיים

לשרשראות מורכבות עם תנאים ועיכובים—השתמש בתהליכים עסקיים של Sale (חנות → תהליכים עסקיים של הזמנות). טריגרים זמינים:

  • לפי סטטוס—מופעל בעת כניסה לסטטוס ספציפי
  • לפי תשלום—בעת אישור תשלום או החזר
  • לפי זמן—אחרי N שעות/ימים מיצירה או שינוי סטטוס

דוגמה: "שעתיים אחרי מעבר ל'נמסר לשליח'—שלח SMS עם בקשה לדירוג." מיושם ללא קוד באמצעות עורך התהליכים העסקיים.

למה לבצע אוטומציה של שינוי סטטוסים?

מעבר לחיסכון בזמן, אוטומציה מפחיתה את הסיכון לשגיאות אנוש (תשלום שהוחמץ, ביטול שנשכח) ומשפרת את חוויית המשתמש—לקוחות מקבלים מידע עדכני ללא עיכובים. הלקוחות שלנו מדווחים על הפחתה של 70% בזמן עיבוד ההזמנות וירידה של 15% בהחזרות עקב הודעות בזמן. לתרחישים פשוטים, סוכנים מעבדים הזמנות פי שניים מהר יותר מתהליכים עסקיים, אך תהליכים עסקיים נוחים יותר ללוגיקה מורכבת.

איזו גישה: סוכנים או תהליכים עסקיים?

קריטריון סוכנים (קוד) תהליכים עסקיים (BP)
גמישות שליטה מלאה בלוגיקה מוגבל על ידי תבניות
מהירות פיתוח שעות דקות (אם התבנית מוכנה)
נדרש מפתח כן לא (מנהל יכול לבצע)
אינטגרציה עם API חיצוני פשוטה קשה יותר (דרך REST)
קנה מידה 50 הזמנות לכל שלב תלוי בביצועים

אילו אירועים משמשים לשינוי סטטוס אוטומטי?

תרחישים וטריגרים אופייניים מסוכמים בטבלה:

סטטוס נוכחי אירוע סטטוס חדש
WAIT_PREPAY תשלום F (הושלם)
WAIT_PREPAY 24 שעות ללא תשלום CANCEL (בוטל)
D (נמסר) 14 ימים ללא תלונות CLOSED (סגור)

פרטים נוספים על האירוע AddEventHandler('sale', 'OnSalePaymentPaid', function(\Bitrix\Main\Event $event) { $payment = $event->getParameter('ENTITY'); $order = $payment->getOrder(); if ($payment->isPaid() && $order->getField('STATUS_ID') === 'WAIT_PREPAY') { $order->setField('STATUS_ID', 'F'); $order->save(); } }); נמצאים בתיעוד הרשמי. אוטומציה בכלל מתוארת בויקיפדיה.

תהליך העבודה

  1. ניתוח—בחינת סטטוסים נוכחיים, תרחישים, לוגיקת החלפת 1C.
  2. עיצוב—בחירת גישה (אירועים/סוכנים/BP) לכל תרחיש.
  3. יישום—כתיבת קוד או הגדרת BP, בדיקה על הזמנת דוגמה.
  4. בדיקה—הרצת כל התרחישים (תשלום, ביטול, משלוח) בסביבת בדיקות.
  5. פריסה—מעבר לסביבת ייצור, ניטור לוגים ב-24 השעות הראשונות.

תוצרים

  • יצירת // Регистрация агента (разово) \CAgent::AddAgent( 'Local\\Sale\\OrderAgents::cancelUnpaidOrders();', 'local', 'N', 3600, // каждый час '', 'Y', \ConvertTimeStamp(time() + 3600, 'FULL'), ); class OrderAgents { public static function cancelUnpaidOrders(): string { $deadline = new \Bitrix\Main\Type\DateTime(); $deadline->add('-24 hours'); $result = \Bitrix\Sale\Internals\OrderTable::getList([ 'filter' => [ 'STATUS_ID' => 'WAIT_PREPAY', '<DATE_INSERT' => $deadline, ], 'select' => ['ID'], 'limit' => 50, ]); while ($row = $result->fetch()) { $order = \Bitrix\Sale\Order::load($row['ID']); if ($order) { $order->setField('STATUS_ID', 'CANCEL'); $order->save(); } } return 'Local\\Sale\\OrderAgents::cancelUnpaidOrders();'; } } עם מטפלי אירועים (במידת הצורך).
  • הגדרת סוכנים עם מחזוריות מוגדרת.
  • הגדרת תהליכים עסקיים (במידת הצורך) דרך פאנל הניהול.
  • אינטגרציה עם webhook של חברת שילוח (לדוגמה, CDEK API או Russian Post API).
  • תיעוד: תיאור כל המעברים האוטומטיים.
  • גישה למאגר git עם הקוד.
  • הדרכת מנהל (שעה אחת).
  • אחריות ל-14 ימים על פעילות תקינה של הסקריפט.

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

אינטגרציה עם סטטוסים של חברת שילוח

// Webhook от ТК — POST /bitrix/tools/delivery_webhook.php
$trackNumber = $_POST['track'];
$deliveryStatus = $_POST['status'];
$shipmentResult = \Bitrix\Sale\Internals\ShipmentTable::getList([
    'filter' => ['TRACKING_NUMBER' => $trackNumber],
    'select' => ['ORDER_ID'],
]);
if ($shipment = $shipmentResult->fetch()) {
    $order = \Bitrix\Sale\Order::load($shipment['ORDER_ID']);
    $statusMap = ['delivered' => 'D', 'returned' => 'RETURN_INIT', 'lost' => 'PROBLEM'];
    $newStatus = $statusMap[$deliveryStatus] ?? null;
    if ($newStatus && $order) {
        $order->setField('STATUS_ID', $newStatus);
        $order->save();
    }
}

השלמה אוטומטית של הזמנות שנמסרו

מעבר ל"סגור" 14 ימים אחרי מסירה ללא תלונות:

public static function completeDeliveredOrders(): string {
    $deadline = new \Bitrix\Main\Type\DateTime();
    $deadline->add('-14 days');
    $result = \Bitrix\Sale\Internals\OrderTable::getList([
        'filter' => ['STATUS_ID' => 'D', '<DATE_STATUS' => $deadline],
        'select' => ['ID'],
        'limit' => 100,
    ]);
    while ($row = $result->fetch()) {
        $order = \Bitrix\Sale\Order::load($row['ID']);
        if ($order) {
            $order->setField('STATUS_ID', 'CLOSED');
            $order->save();
        }
    }
    return 'Local\\Sale\\OrderAgents::completeDeliveredOrders();';
}

לוחות זמנים

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