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

