שילוב 1C-Bitrix עם מדפסות תוויות של Zebra

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

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

שאלות נפוצות

שילוב 1C-Bitrix עם מדפסות תוויות של Zebra

מדפסת תוויות חזקה של Zebra יעילה רק ככל שהשילוב שלה. ללא אוטומציה מתאימה, מפעילים מעתיקים נתונים ידנית מ-Bitrix ל-Excel ומדפיסים דרך ZDesigner. זה איטי ומועד לשגיאות – ברקודים מתערבבים, מחירים מתיישנים. צוות מפתחי Bitrix המוסמכים שלנו עם ניסיון של 10+ שנים ולמעלה מ-40 פרויקטים מוצלחים מאוטם הדפסת תוויות ישירות מהאתר שלך. כאשר המחיר משתנה, סחורה מגיעה, או מתרחשים משלוחים, תוויות נוצרות ונשלחות למדפסת Zebra ללא התערבות אנושית. אנו משתמשים ב-ZPL – שפת בקרת המדפסות התעשייתית – דרך TCP/IP RAW (פורט 9100). זה מפחית שגיאות תיוג ב-95% וחותך עלויות בעד 40% בהשוואה לתהליכים ידניים. עבור מחסן המעבד 1,000 תוויות ביום, זה חוסך כ-$15,000 בשנה בעלויות עבודה.

בעיות שאנו פותרים

העברת נתונים ידנית גורמת לשגיאות

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

אין הדפסה מונעת אירועים

ללא אוטומציה, הדפסה דורשת פעולה ידנית עבור כל שינוי מחיר או קבלת סחורה. אנו מצמידים מטפלים לאירועי Bitrix כמו function printZpl(string $printerIp, int $printerPort, string $zpl): bool { $socket = fsockopen($printerIp, $printerPort, $errno, $errstr, 5); if (!$socket) { \Bitrix\Main\Diag\Debug::writeToFile("Zebra: $errstr ($errno)", '', '/bitrix/zebra_errors.log'); return false; } fwrite($socket, $zpl); fclose($socket); return true; } ועיבוד מסמכים, כך שתוויות מודפסות אוטומטית.

ניהול תור וניסיונות חוזרים

אם מדפסת לא מקוונת או עסוקה, הדפסה ישירה נכשלת. תור ההדפסה שלנו מאחסן עבודות ממתינות ומנסה שוב – עד 5 ניסיונות – עם הודעות למנהל במקרה של כישלון.

איך אנחנו עושים את זה (צלילה טכנית)

השילוב שלנו משתמש ב-ZPL, השפה המקורית למדפסות Zebra. אנו שולחים ZPL גולמי דרך TCP/IP פורט 9100. הנה הפונקציה המרכזית:

function printZpl(string $printerIp, int $printerPort, string $zpl): bool {
    $socket = fsockopen($printerIp, $printerPort, $errno, $errstr, 5);
    if (!$socket) {
        \Bitrix\Main\Diag\Debug::writeToFile("Zebra: $errstr ($errno)", '', '/bitrix/zebra_errors.log');
        return false;
    }
    fwrite($socket, $zpl);
    fclose($socket);
    return true;
}

עבור מדפסות משותפות של Windows, אנו מספקים חלופה דרך סוכן מקומי (Python/Node.js) שמקבל בקשות HTTP מ-Bitrix ושולח למדפסת דרך WinSpool.

יצירת תוויות

אנו יוצרים תוויות מוצר באמצעות מחלקה ייעודית ZebraLabelGenerator:

class ZebraLabelGenerator {
    public function generatePriceLabel(array $product, string $priceType = 'BASE'): string {
        $price = \CCatalogProduct::GetOptimalPrice($product['ID'])['PRICE']['PRICE'] ?? 0;
        $barcode = $this->getBarcode($product['ID']);
        $name = mb_substr($product['NAME'], 0, 30);
        return implode("\n", [
            '^XA',
            '^CI28',
            '^PW464',
            '^LL200',
            '^FO20,10^A0N,24,24^FD' . $name . '^FS',
            '^FO20,40^A0N,18,18^FD' . ($product['PROPERTY_ARTICLE_VALUE'] ?? '') . '^FS',
            '^FO20,65^A0N,36,36^FD' . number_format($price, 2, '.', ' ') . ' руб.^FS',
            '^FO20,110^BY2^BCN,50,Y,N,N^FD' . $barcode . '^FS',
            '^XZ',
        ]);
    }

    private function getBarcode(int $productId): string {
        $row = \Bitrix\Catalog\ProductBarcodeTable::getList([
            'filter' => ['PRODUCT_ID' => $productId],
            'limit' => 1,
        ])->fetch();
        return $row['BARCODE'] ?? str_pad($productId, 12, '0', STR_PAD_LEFT);
    }
}

מערכת תבניות

אנו מאחסנים תבניות תוויות בטבלת מסד נתונים (class ZebraLabelGenerator { public function generatePriceLabel(array $product, string $priceType = 'BASE'): string { $price = \CCatalogProduct::GetOptimalPrice($product['ID'])['PRICE']['PRICE'] ?? 0; $barcode = $this->getBarcode($product['ID']); $name = mb_substr($product['NAME'], 0, 30); return implode("\n", [ '^XA', '^CI28', '^PW464', '^LL200', '^FO20,10^A0N,24,24^FD' . $name . '^FS', '^FO20,40^A0N,18,18^FD' . ($product['PROPERTY_ARTICLE_VALUE'] ?? '') . '^FS', '^FO20,65^A0N,36,36^FD' . number_format($price, 2, '.', ' ') . ' руб.^FS', '^FO20,110^BY2^BCN,50,Y,N,N^FD' . $barcode . '^FS', '^XZ', ]); } private function getBarcode(int $productId): string { $row = \Bitrix\Catalog\ProductBarcodeTable::getList([ 'filter' => ['PRODUCT_ID' => $productId], 'limit' => 1, ])->fetch(); return $row['BARCODE'] ?? str_pad($productId, 12, '0', STR_PAD_LEFT); } } ) במקום בקוד. זה מאפשר שינויי פריסה ללא פריסה מחדש. מצייני מקום כמו bl_zebra_templates, {{NAME}}, {{PRICE}} מוחלפים על ידי מחלקת {{BARCODE}}.

הדפסה מונעת אירועים

בשינוי מחיר, אנו מתחברים לאירוע ZebraTemplateEngine:

AddEventHandler('catalog', 'OnProductUpdate', function($productId) {
    $needPrint = \Bitrix\Main\Config\Option::get('zebra_module', 'auto_print_price_change', 'N');
    if ($needPrint !== 'Y') return;
    $product = \CIBlockElement::GetByID($productId)->GetNext();
    $printerIp = \Bitrix\Main\Config\Option::get('zebra_module', 'default_printer_ip');
    $zpl = (new ZebraLabelGenerator())->generatePriceLabel($product);
    ZebraPrinter::send($printerIp, 9100, $zpl);
});

לקבלת סחורה, לאחר עיבוד המסמך הנכנס, אנו יוצרים תור עבודות הדפסה:

foreach ($receiptItems as $item) {
    for ($i = 0; $i < $item['qty']; $i++) {
        $jobs[] = [
            'product_id' => $item['product_id'],
            'copies' => 1,
            'template' => 'warehouse_label',
            'printer_id' => $item['warehouse_printer_id'],
        ];
    }
}
ZebraPrintQueue::push($jobs);

תור הדפסה עם ניסיונות חוזרים

טבלת התור OnProductUpdate מעובדת על ידי סוכן כל דקה לאמינות:

CREATE TABLE bl_zebra_print_queue (
    id SERIAL PRIMARY KEY,
    printer_id INT NOT NULL,
    template_id INT NOT NULL,
    data_json JSONB NOT NULL,
    status VARCHAR(20) DEFAULT 'pending',
    attempts SMALLINT DEFAULT 0,
    scheduled_at TIMESTAMP DEFAULT NOW(),
    printed_at TIMESTAMP
);

בכישלון, הסטטוס הופך ל-AddEventHandler('catalog', 'OnProductUpdate', function($productId) { $needPrint = \Bitrix\Main\Config\Option::get('zebra_module', 'auto_print_price_change', 'N'); if ($needPrint !== 'Y') return; $product = \CIBlockElement::GetByID($productId)->GetNext(); $printerIp = \Bitrix\Main\Config\Option::get('zebra_module', 'default_printer_ip'); $zpl = (new ZebraLabelGenerator())->generatePriceLabel($product); ZebraPrinter::send($printerIp, 9100, $zpl); }); והניסיונות גדלים. לאחר 5 ניסיונות כושלים, הסטטוס הוא foreach ($receiptItems as $item) { for ($i = 0; $i < $item['qty']; $i++) { $jobs[] = [ 'product_id' => $item['product_id'], 'copies' => 1, 'template' => 'warehouse_label', 'printer_id' => $item['warehouse_printer_id'], ]; } } ZebraPrintQueue::push($jobs); והמנהל מקבל הודעה.

למה Zebra היא התקן למחסן

מדפסות Zebra משתמשות בהדפסה תרמית – ללא מחסניות, ללא מריחות. ZPL מאפשר פריסות גמישות עם לוגואים, שדות משתנים, ברקודים (EAN-13, Code 128, QR). התור המובנה מבטיח שאין תוויות אבודות גם במהלך תקלות רשת.

המפתח הראשי שלנו: "פרוטוקול ZPL כל כך גמיש שאתה יכול להדפיס כל תוכן תווית ללא שינוי בקוד."

תהליך עבודה והערכה

אנחנו לא מציעים מחירים קבועים – העלות נקבעת לאחר ניתוח. התהליך הסטנדרטי שלנו:

  1. איסוף נתונים – אנו אוספים את זרימת העבודה הנוכחית שלך, דגמי מדפסות ודרישות תוויות.
  2. ביקורת וניתוח – אנו בודקים את הגדרות Bitrix, מטפלי אירועים והגדרות החלפת 1C.
  3. עיצוב – אנו יוצרים תבניות ZPL עבור עד 5 סוגי תוויות.
  4. הערכה – אנו מספקים הצעת מחיר מפורטת. פרויקטים טיפוסיים מתחילים ב-$2,500, ולקוחות בדרך כלל רואים החזר השקעה תוך 3–6 חודשים.
  5. פיתוח – אנו בונים את המודול, התור והממשק הניהולי.
  6. בדיקות – אנו בודקים עם המדפסת בפועל ומדמים אירועים.
  7. פריסה – אנו פורסים לסביבת הייצור ומכשירים מפעילים (שעתיים אונליין).

הערכות לוחות זמנים

שלב משך
מחלקת שליחת ZPL יום אחד
מחולל תבניות עם מצייני מקום יומיים
תור הדפסה + סוכן יום אחד
מטפלי אירועים (שינוי מחיר, קבלה) יומיים
ממשק ניהולי לניהול מדפסות יומיים
בדיקות עם מדפסת אמיתית יום אחד
סה"כ 9–11 ימים

בעיות נפוצות ופתרונות

בעיה פתרון
המדפסת לא מגיבה דרך TCP בדוק פורט 9100, חומת אש, IP ייעודי
תווים קיריליים מעוותים ודא שהמדפסת תומכת ב-UTF-8 (Zebra GC420t ומעלה)
ניתוקים עם תור גדול הפעל ניסיונות חוזרים (עד 5) והודעות למנהל

מה כלול בעבודה

רכיב תיאור
פיתוח מודול שילוב מחלקות שליחת ZPL, מחולל תוויות, תור הדפסה
הגדרת תבניות תוויות עד 5 פריסות סטנדרטיות (מחיר, מחסן, משלוח)
חיבור מדפסות 1–5 מכשירים דרך TCP/IP או סוכן Windows
שילוב 1C סנכרון נתונים אוטומטי דרך CommerceML
הכשרת מפעילים הדגמה אונליין של שעתיים
תיעוד תיעוד טכני מלא
אחריות 6 חודשים על המודול, כולל תיקוני באגים

איך שילוב 1C מפשט הדפסה

הצמד 1C-Bitrix דרך CommerceML מבטל כפילות נתונים. מוצרים, מחירים ומלאי מסונכרנים אוטומטית. כאשר מחיר משתנה ב-1C, הנתונים מתעדכנים ב-Bitrix ומפעילים הדפסת תוויות – ללא התערבות ידנית.

קבל ייעוץ על שילוב – נבחן את הפרויקט שלך בשעה אחת. צור קשר כדי לדון בפרטי אוטומציית המחסן שלך.