כאשר הזמנות מועברות ידנית מחנות מקוונת ל-1C, רואה החשבון מבלה 2–3 שעות ביום, ובערך כל שורה עשירית מכילה שגיאה. ייצוא אוטומטי מהאתר ל-1C באמצעות CommerceML מבטל זאת: הנתונים מועברים באופן מיידי, ללא שגיאות הקלדה או אובדן. פתרון הייצוא האוטומטי שלנו ל-1C מבטיח החלפת נתונים חלקה עם 1C. אנו מטפלים ביצירת sale.xml ובעדכון סטטוס מ-1C לייצוא CommerceML חזק. לצוות שלנו ניסיון של 7+ שנים באינטגרציה עם 1C, כולל תצורות סטנדרטיות ומותאמות אישית. אנו מבטיחים העברת נתונים נכונה ורישום מלא לניפוי באגים.
אחד הפרויקטים שלנו היה חנות מקוונת עם 10,000 הזמנות בחודש. בעבר, רואה החשבון בילה 3 שעות ביום בהזנה ידנית, מה שעלה לחברה 4.5–6.5 אלף דולר בשנה בשכר. לאחר יישום ייצוא הזמנות באמצעות CommerceML2, הזמן ירד ל-10 דקות ביום. הלקוח חסך 3.6–5.2 אלף דולר בשנה הראשונה.
במאמר זה נסקור אילו נתונים ניתן לייצא, כיצד להגדיר יצירת sale.xml, לטפל באישורי קבלה ולעדכן סטטוסים. נדון גם במלכודות טיפוסיות וכיצד להימנע מהן.
המורכבות של ייצוא הזמנות ל-1C
האתגר אינו יצירת XML—זה פשוט. הקשיים מתחילים בהתאמת מזהים: אם מוצר נוצר באתר (ללא GUID מ-1C), לא ניתן פשוט להעביר אותו—יש ליצור פריט ב-1C או להתאים לפי SKU. בעיה נוספת היא קידוד: חלק מגרסאות 1C מצפות לקבצים ב-Windows-1251, בעוד שאתרים משתמשים בדרך כלל ב-UTF-8. לבסוף, בדיקות דורשות גישה למסד נתונים של 1C לבדיקות, שלא תמיד זמין בתחילת הדרך.
אילו נתונים מועברים ל-1C?
התרחישים הנפוצים ביותר לייצוא:
| נתונים | קובץ CommerceML | תדירות |
|---|---|---|
| הזמנות חדשות | sale.xml |
בעת אירוע / כל N דקות |
| שינויי סטטוס הזמנה | sale.xml |
בעת אירוע |
| מלאי באתר | offers.xml |
מתוזמן |
| לקוחות (קונים) | import.xml |
מתוזמן |
עבור כל תרחיש, אנו מגדירים לוגיקה ספציפית: אילו נתונים נכנסים ל-XML, באיזו תדירות הם מועברים, וכיצד מטפלים בשגיאות.
כיצד אנו יוצרים sale.xml
אנו מיישמים מחלקה SaleXmlGenerator שבונה את עץ המסמכים КоммерческаяИнформация עם מסמכי הזמנה:
class SaleXmlGenerator {
public function generate(Collection $orders): string {
$xml = new \DOMDocument('1.0', 'UTF-8');
$root = $xml->createElement('КоммерческаяИнформация');
$root->setAttribute('ВерсияСхемы', '2.10');
$xml->appendChild($root);
foreach ($orders as $order) {
$orderNode = $xml->createElement('Документ');
$this->addElement($xml, $orderNode, 'Ид', $order->uuid);
$this->addElement($xml, $orderNode, 'Номер', $order->number);
$this->addElement($xml, $orderNode, 'Дата', $order->created_at->format('Y-m-d'));
$this->addElement($xml, $orderNode, 'Сумма', number_format($order->total, 2, '.', ''));
$this->addElement($xml, $orderNode, 'Валюта', 'USD');
// Контрагент
$client = $xml->createElement('Контрагенты');
$agent = $xml->createElement('Контрагент');
$this->addElement($xml, $agent, 'Наименование', $order->customer_name);
$this->addElement($xml, $agent, 'Роль', 'Покупатель');
$client->appendChild($agent);
$orderNode->appendChild($client);
// Товары
$products = $xml->createElement('Товары');
foreach ($order->items as $item) {
$product = $xml->createElement('Товар');
$this->addElement($xml, $product, 'Ид', $item->product->onec_guid);
$this->addElement($xml, $product, 'Наименование', $item->product->name);
$this->addElement($xml, $product, 'Количество', $item->quantity);
$this->addElement($xml, $product, 'ЦенаЗаЕдиницу', number_format($item->price, 2, '.', ''));
$this->addElement($xml, $product, 'Сумма', number_format($item->total, 2, '.', ''));
$products->appendChild($product);
}
$orderNode->appendChild($products);
$root->appendChild($orderNode);
}
return $xml->saveXML();
}
} תהליך היצירה שלב אחר שלב
- צור מופע של
class SaleXmlGenerator { public function generate(Collection $orders): string { $xml = new \DOMDocument('1.0', 'UTF-8'); $root = $xml->createElement('КоммерческаяИнформация'); $root->setAttribute('ВерсияСхемы', '2.10'); $xml->appendChild($root); foreach ($orders as $order) { $orderNode = $xml->createElement('Документ'); $this->addElement($xml, $orderNode, 'Ид', $order->uuid); $this->addElement($xml, $orderNode, 'Номер', $order->number); $this->addElement($xml, $orderNode, 'Дата', $order->created_at->format('Y-m-d')); $this->addElement($xml, $orderNode, 'Сумма', number_format($order->total, 2, '.', '')); $this->addElement($xml, $orderNode, 'Валюта', 'USD'); // Контрагент $client = $xml->createElement('Контрагенты'); $agent = $xml->createElement('Контрагент'); $this->addElement($xml, $agent, 'Наименование', $order->customer_name); $this->addElement($xml, $agent, 'Роль', 'Покупатель'); $client->appendChild($agent); $orderNode->appendChild($client); // Товары $products = $xml->createElement('Товары'); foreach ($order->items as $item) { $product = $xml->createElement('Товар'); $this->addElement($xml, $product, 'Ид', $item->product->onec_guid); $this->addElement($xml, $product, 'Наименование', $item->product->name); $this->addElement($xml, $product, 'Количество', $item->quantity); $this->addElement($xml, $product, 'ЦенаЗаЕдиницу', number_format($item->price, 2, '.', '')); $this->addElement($xml, $product, 'Сумма', number_format($item->total, 2, '.', '')); $products->appendChild($product); } $orderNode->appendChild($products); $root->appendChild($orderNode); } return $xml->saveXML(); } }. - העבר אוסף של הזמנות (עם מוצרים ולקוחות טעונים).
- קרא ל-
SaleXmlGenerator– תקבל מחרוזת XML. - אמת את ה-XML באמצעות
generate(). - הגש את הקובץ בנקודת קצה HTTP ש-1C מבקש.
כיצד פועל אישור קבלה
לאחר טעינת ההזמנות, 1C שולח רשימה של מזהי GUID של מסמכים שעובדו בהצלחה. האתר מסמן אותם כ-DOMDocument::validate. זה מונע שידור חוזר ומספק היסטוריית סנכרון שקופה:
public function markAsSent(Request $request): Response
{
$guids = explode("\n", $request->getContent());
Order::whereIn('uuid', array_filter($guids))
->update(['sent_to_1c' => true, 'sent_to_1c_at' => now()]);
return response('success');
} כיצד סטטוסים מתעדכנים מ-1C
1C יכול להחזיר סטטוסי הזמנה מעודכנים (שולם, נשלח, בוטל). האתר מקבל אותם באמצעות בקשת POST ומעדכן את שדות ההזמנה:
public function processSaleResponse(string $xmlPath): void {
$xml = simplexml_load_file($xmlPath);
foreach ($xml->Документ as $doc) {
$guid = (string) $doc->Ид;
$status = (string) $doc->Статус;
Order::where('uuid', $guid)->update([
'status' => $this->mapOnecStatus($status),
'onec_status' => $status,
'status_updated_at' => now(),
]);
}
}
private function mapOnecStatus(string $onecStatus): string {
return match($onecStatus) {
'Оплачен' => 'paid',
'Передан на склад' => 'processing',
'Отгружен' => 'shipped',
'Отменён' => 'cancelled',
default => 'unknown',
};
} מה כלול בעבודה
השירות שלנו כולל את התוצרים הבאים:
- פיתוח מחולל XML המותאם למבנה ההזמנות שלך
- טיפול באישורי קבלה ועדכוני סטטוס
- מנגנון התאמת מוצרים לפי SKU כאשר GUID חסר
- בדיקות על מסד נתונים של 1C לבדיקות (מסופק על ידי הלקוח)
- תיעוד מפורט המסביר את תהליך הייצוא וה-API
- גישה לסביבת ארגז חול לבדיקות
- הדרכה לצוות שלך (2 מפגשים)
- שבועיים של תמיכה לאחר ההשקה
התמחור נקבע באופן אישי לפי מורכבות האינטגרציה. עלות פרויקט טיפוסית נעה בין 1.5–3 אלף דולר. חיסכון שנתי בהזנה ידנית יכול להגיע ל-4.5–6.5 אלף דולר.
מלכודות טיפוסיות
בעיות נפוצות: מזהי GUID ריקים של מוצרים (אם המוצר נוצר באתר), אי-התאמת קידוד (Windows-1251 לעומת UTF-8), וקשיים בבדיקות ללא מסד נתונים של 1C לבדיקות. אנו פותרים这些问题 באמצעות התאמת SKU, המרת קידוד וסיוע בהקמת סביבת בדיקות.
השוואה: CommerceML2 לעומת הזנה ידנית
| קריטריון | ייצוא CommerceML2 | הזנה ידנית |
|---|---|---|
| זמן עיבוד 50 הזמנות | 2 דקות | 2–3 שעות |
| הסתברות שגיאה | 0.1% | 10% |
| עלות | כלול באינטגרציה | עד 4.5–6.5 אלף דולר/שנה חיסכון |
ייצוא CommerceML2 מהיר פי 5 מהזנה ידנית ומפחית שגיאות ב-90%. ייצוא הזמנות במפתח פתוח – קבל ייעוץ הנדסי.
אימות ייצוא נכון
ראשית, ודא ש-sale.xml מכיל את כל ההזמנות עם סכומים ומזהי GUID נכונים. אנו יוצרים XML במצב בדיקה, טוענים אותו ל-1C ומשווים מספרי מסמכים. שנית, ודא שלאחר אישור הקבלה, סטטוס ההזמנה באתר משתנה ל"הועבר ל-1C." שלישית, עדכן סטטוס מ-1C ואשר שהאתר מקבל אותו.
לוח זמנים ועלות
פיתוח ייצוא הזמנות עם אישורי קבלה ועדכוני סטטוס אורך 8–14 ימי עסקים. הערכה מדויקת ניתנת לאחר ניתוח מערכת החשבונאות שלך.
כדי לדון בפרטים, השאר בקשה – ניצור איתך קשר תוך יום.







