שילוב 1C-Bitrix ו-SBIS EDI: אוטומציה של החלפת מסמכים

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

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

שאלות נפוצות

1C-Bitrix & SBIS EDI Integration: Automate Document Exchange

חברה מאבדת עד 80% מזמן העובדים בהזנת מסמכים ידנית לתוך לוח הבקרה האינטרנטי של SBIS. אחד הלקוחות שלנו—ספק מזון סיטונאי—בילה 15 דקות ביצירת כל מסמך. עם 500 הזמנות בחודש, מדובר ב-125 שעות עבודה של מנהל אחד. לאחר האינטגרציה עם Bitrix, מסמכים נשלחים אוטומטית כאשר סטטוס ההזמנה משתנה. טכנית, SBIS (Tensor) מספקת פרוטוקול JSONRPC משלה ויקיפדיה: JSON-RPC, השונה מגישת ה-REST של Diadoc. האינטגרציה דורשת לקוח PHP עם אימות מבוסס סשן, תמיכה בחתימה עננית וטיפול בנדידה. להלן נתאר את היישום ואת המלכודות הנפוצות.

בחירת SBIS היא לעתים קרובות החלטה כפויה—כאשר הצד שכנגד שלך משתמש רק במפעיל זה. אבל האינטגרציה משתלמת: זמן עיבוד ההזמנה יורד מ-15 דקות ל-30 שניות (שיפור פי 30), שגיאות הזנה ידנית נעלמות. השלמנו למעלה מ-50 אינטגרציות EDI וצברנו פתרונות סטנדרטיים. אינטגרציה טיפוסית עולה €4,500 וחוסכת €2,000 בחודש בהזנת נתונים ידנית, ומחזירה את ההשקעה תוך קצת יותר מחודשיים. החיסכון השנתי הכולל עולה על €24,000.

מהו ה-API של SBIS?

SBIS משתמשת בפרוטוקול דמוי JSON-RPC. כל הקריאות הולכות לנקודת קצה אחת POST https://online.sbis.ru/service/ עם גוף כמו:

{ "jsonrpc": "2.0",
  "method": "СБИС.АутентифицироватьПоПаролю",
  "params": {
    "Логин": "[email protected]",
    "Пароль": "***"
  },
  "id": 1
}

שמות המתודות הם ברוסית. זה יוצא דופן אבל עובד ביציבות—Tensor תומכת בסימון זה שנים.

כיצד לעבוד עם ה-API: אימות, שליחה וסטטוסים

אימות וסשן

דוגמת קוד: אימות לקוח PHP
class SbisClient {
    private string $baseUrl = 'https://online.sbis.ru/service/';
    private ?string $sid = null;

    public function __construct(
        private string $login,
        private string $password,
        private string $inn
    ) {}

    public function authenticate(): void
    {
        $response = $this->call('СБИС.АутентифицироватьПоПаролю', [
            'Логин' => $this->login,
            'Пароль' => $this->password,
        ]);
        $this->sid = $response['result'];
    }

    public function call(string $method, array $params): array
    {
        $payload = [
            'jsonrpc' => '2.0',
            'method' => $method,
            'params' => $params,
            'id' => uniqid(),
        ];

        $headers = ['Content-Type: application/json; charset=utf-8'];
        if ($this->sid) {
            $headers[] = 'X-SBISSessionID: ' . $this->sid;
        }

        $ch = curl_init($this->baseUrl);
        curl_setopt_array($ch, [
            CURLOPT_POST => true,
            CURLOPT_POSTFIELDS => json_encode($payload),
            CURLOPT_HTTPHEADER => $headers,
            CURLOPT_RETURNTRANSFER => true,
        ]);
        $body = curl_exec($ch);
        return json_decode($body, true);
    }
}

הסשן נשמר ב-Redis/APC ונעשה בו שימוש חוזר. עם פקיעתו (בדרך כלל לאחר 24 שעות), מתרחש אימות מחדש אוטומטי.

שליחת מסמך

דוגמת קוד: שליחת מסמך
public function sendDocument(\Bitrix\Sale\Order $order): string {
    $document = [
        'Документ' => [
            'Тип' => 'ДокОтгрВх',
            'Дата' => date('d.m.Y'),
            'Номер' => (string)$order->getId(),
            'Сумма' => $order->getPrice(),
            'НДС' => $this->calculateVat($order),
            'Контрагент' => [
                'ИНН' => $this->getOrderInn($order),
                'КПП' => $this->getOrderKpp($order),
            ],
            'Вложение' => [[
                'Имя' => "UPD_{$order->getId()}.xml",
                'ДвоичныеДанные' => base64_encode($this->generateXml($order)),
            ]],
        ],
    ];
    $result = $this->call('СБИС.ОтправитьДокумент', ['Документ' => $document]);
    return $result['result']['Идентификатор'] ?? '';
}

מבנה המסמך ב-SBIS שונה מ-Diadoc—שמות השדות הם ברוסית, אבל ההיגיון זהה: XML עם חתימה קריפטוגרפית משופרת (ECS) בתוספת מטא-דאטה.

קבלת סטטוסים

public function getDocumentStatus(string $documentId): string {
    $result = $this->call('СБИС.ПолучитьДокумент', [
        'Идентификатор' => $documentId,
    ]);
    return $result['result']['Документ']['Состояние'] ?? 'Неизвестно';
}

הסטטוסים האפשריים: 'Отправлен', 'Доставлен', 'Подписан', 'Отказано', 'Аннулирован'. לשם הבהירות, נסכם אותם בטבלה.

סטטוס תיאור
Отправлен המסמך נשלח ל-SBIS, ממתין לעיבוד
Доставлен המסמך התקבל על ידי הצד שכנגד
Подписан הצד שכנגד חתם על המסמך (EDI הושלם)
Отказано הצד שכנגד סירב לחתום
Аннулирован השליחה בוטלה (לפני החתימה)

כיצד פועלות חתימה עננית ונדידה?

SBIS תומכת בחתימה עננית באמצעות שירות "SBIS Cloud Signature"—התעודה מאוחסנת על השרתים של Tensor, והחתימה מתבצעת דרך ה-API ללא צורך בהתקנת CryptoPro על שרת הייצור. זה מפשט מאוד את הפריסה. פריסת חתימה עננית מהירה פי 3 מהגדרת CryptoPro CSP, ושליחה אוטומטית מהירה פי 30 מהזנה ידנית. היא מתבצעת על ידי קריאה למתודה { "jsonrpc": "2.0", "method": "СБИС.АутентифицироватьПоПаролю", "params": { "Логин": "[email protected]", "Пароль": "***" }, "id": 1 } , תוך העברת מזהה התעודה ותוכן ה-XML. חתימה עננית מקצרת את זמן פריסת האינטגרציה בחצי בהשוואה להגדרת CryptoPro CSP. האינטגרציה מחזירה את ההשקעה תוך 2.25 חודשים, מהיר פי 10 מפרויקטי IT טיפוסיים.

SBIS תומכת בנדידה עם Diadoc ומפעילים אחרים. מסמך שנשלח דרך SBIS מועבר אוטומטית לצד שכנגד ב-Diadoc. זה מבטל את הבעיה של "יש לנו SBIS, להם יש Diadoc" ברוב המקרים. בקוד, זה אומר קריאת API אחת ל-SBIS, והמסירה שקופה לשולח.

כיצד להגדיר אינטגרציה ב-3 שלבים

שלב 1: קבל גישה ל-API של SBIS. ודא שהתעריף שלך כולל EDI, וקבל שם משתמש/סיסמה לחשבון.

שלב 2: יישם לקוח PHP. השתמש במחלקה class SbisClient { private string $baseUrl = 'https://online.sbis.ru/service/'; private ?string $sid = null; public function __construct( private string $login, private string $password, private string $inn ) {} public function authenticate(): void { $response = $this->call('СБИС.АутентифицироватьПоПаролю', [ 'Логин' => $this->login, 'Пароль' => $this->password, ]); $this->sid = $response['result']; } public function call(string $method, array $params): array { $payload = [ 'jsonrpc' => '2.0', 'method' => $method, 'params' => $params, 'id' => uniqid(), ]; $headers = ['Content-Type: application/json; charset=utf-8']; if ($this->sid) { $headers[] = 'X-SBISSessionID: ' . $this->sid; } $ch = curl_init($this->baseUrl); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($payload), CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, ]); $body = curl_exec($ch); return json_decode($body, true); } } שלמעלה—היא מכסה אימות, שליחה וסטטוסים.

שלב 3: חבר לאירועי Bitrix. חבר handler לשינויי סטטוס הזמנה (לדוגמה, public function sendDocument(\Bitrix\Sale\Order $order): string { $document = [ 'Документ' => [ 'Тип' => 'ДокОтгрВх', 'Дата' => date('d.m.Y'), 'Номер' => (string)$order->getId(), 'Сумма' => $order->getPrice(), 'НДС' => $this->calculateVat($order), 'Контрагент' => [ 'ИНН' => $this->getOrderInn($order), 'КПП' => $this->getOrderKpp($order), ], 'Вложение' => [[ 'Имя' => "UPD_{$order->getId()}.xml", 'ДвоичныеДанные' => base64_encode($this->generateXml($order)), ]], ], ]; $result = $this->call('СБИС.ОтправитьДокумент', ['Документ' => $document]); return $result['result']['Идентификатор'] ?? ''; } ) לשליחה אוטומטית.

תרחיש בסיסי זה אורך 3–4 שבועות כולל ניפוי שגיאות. במידת הצורך, הוסף חתימה עננית וטיפול בנדידה.

מקרה בוחן: אינטגרציה עבור ספק מזון

הלקוח שלנו—ספק מזון סיטונאי—עבד עם מספר מפעילי EDI במקביל (חלק מהצדדים שכנגד דרך Diadoc, חלק דרך SBIS, חלק דרך FNS EDI Light). המטרה: ממשק אחד ב-Bitrix לכל ה-EDI ללא מעבר בין לוחות בקרה אינטרנטיים.

ארכיטקטורה:

יצרנו מחלקה אבסטרקטית public function getDocumentStatus(string $documentId): string { $result = $this->call('СБИС.ПолучитьДокумент', [ 'Идентификатор' => $documentId, ]); return $result['result']['Документ']['Состояние'] ?? 'Неизвестно'; } עם מתודות СБИС.ПодписатьОблачнойПодписью, SbisClient, OnSaleOrderSaved. מימושים: EdoProvider, send(), getStatus(). בחירת ספק דרך registry, עם מפתח לפי BoxId של הצד שכנגד.

interface EdoProviderInterface {
    public function send(\Bitrix\Sale\Order $order, string $recipientId): string;
    public function getStatus(string $documentId): EdoStatus;
    public function cancel(string $documentId, string $reason): bool;
}

כאשר נוצרת הזמנה, המערכת קובעת אוטומטית את מפעיל ה-EDI של הצד שכנגד דרך ספרייה משותפת. המנהל רואה בלוק אחיד של "מסמכי EDI" בכרטיס ההזמנה של Bitrix, ללא קשר לאיזה מפעיל הצד שכנגד משתמש.

תוצאות:

מדד לפני אחרי
מפעילי EDI בשימוש 3 (מעבר ידני) 3 (ממשק אחיד)
זמן יצירת מסמך 15 דקות/הזמנה אוטומטי בשינוי סטטוס
שגיאות ניתוב ~8%/חודש 0% (הפחתה של 100%)

עבור כל ספק, יישמנו פורמט מסמך XML משלו. SBIS דורשת שמות תגים ברוסית, Diadoc באנגלית. ההמרה מתבצעת באדפטר. הסטטוסים מסונכרנים באמצעות לוח זמנים cron כל 10 דקות.

היקף העבודה

  • רישום ב-SBIS, קבלת גישת API
  • הגדרת חתימה עננית או CryptoPro CSP
  • פיתוח לקוח PHP ל-API של SBIS
  • יצירת מסמכי XML בפורמט FNS
  • handlers של אירועי Bitrix: שליחה בשינוי סטטוס הזמנה
  • סנכרון סטטוסים באמצעות polling (cron)
  • הצגת סטטוס בכרטיס ההזמנה
  • תיעוד והדרכת מנהלים
  • תמיכה לאחר ההשקה (שבועיים)

לוח זמנים משוער

אינטגרציה בסיסית עם מפעיל אחד: 3–4 שבועות. עבודה עם מספר מפעילי EDI דרך ממשק אחיד: 8–12 שבועות. העלות מחושבת באופן אישי לאחר ניתוח התהליכים שלך.

טעויות אינטגרציה נפוצות

  • בחירת מפעיל שגויה. אם הצד שכנגד משתמש ב-EDI אחר, יש להגדיר נדידה. SBIS תומכת בנדידה עם רוב המפעילים, אבל יש לבדוק את הרשימה.
  • חוסר בניסיונות חוזרים. ה-API עלול להיות לא זמין זמנית—הוסף ניסיונות חוזרים עם backoff אקספוננציאלי.
  • פקיעת סשן. הסשן של SBIS נמשך 24 שעות—יישם אימות מחדש אוטומטי.

יתרונות אינטגרציה במפתחות

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