פיתוח מודול ייצוא נתונים מותאם אישית לביטריקס

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

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

שאלות נפוצות

פיתוח מודול ייצוא נתונים מותאם אישית ל-Bitrix

לאחרונה פנה אלינו לקוח עם קטלוג של 500,000 מוצרים הדורש העלאות מלאי יומיות ל-Ozon ו-Wildberries. פתרונות סטנדרטיים של "טעינת הכל למערך" קרסו עם שגיאות מחוסר זיכרון (Out of Memory), גם לאחר הגדלת מגבלות. טעינת דף הניהול ארכה 40 שניות, וייצוא סינכרוני הקפיא את האתר ל-10 דקות. הם נזקקו למודול שמזרים נתונים ללא חסימת אזור הניהול ומייצר קבצים באופן אסינכרוני. תכננו ארכיטקטורה תלת-שכבתית: Collector, Transformer, Formatter. היא הוכחה כגמישה כל כך, עד כי אנו משתמשים בה כבסיס לכל משימות הייצוא.

תרחישים אופייניים שהמודול מכסה

  • העלאות קטלוג לשווקים (Ozon, Wildberries) בפורמט XML או JSON ספציפי
  • ייצוא הזמנות ל-1C:Enterprise באמצעות CommerceML או CSV
  • ייצוא לידים קבוע ל-Google Sheets או מערכות BI
  • העברת נתוני משתמשים ל-ESP (UniSender, SendGrid)
  • ייצוא נתוני גיבוי למיגרציה לפלטפורמה אחרת

לכל תרחיש יש מיפוי שדות ופורמט משלו. מודול יחיד מאפשר להגדיר את כל הייצואים במקום אחד, עם הרשאות גישה ורישום לוג.

כיצד פועל ייצוא אסינכרוני

מנהל המערכת לוחץ על 'הפעל ייצוא', נוצרת משימה בטבלת b_vendor_exporter_job עם סטטוס queued. הסוכן ExportAgent::run() רץ כל דקה ומעבד משימה אחת בכל פעם. הקובץ נכתב ישירות לדיסק ללא אחסון בזיכרון. עם סיום, הסטטוס משתנה ל-done וניתן להוריד את הקובץ, לשלוח אותו בדוא"ל או דרך FTP. השוואה: גישת 'בקשה-תגובה' סינכרונית הייתה קופאת למשך 5–10 דקות עבור 100,000 רשומות — אסינכרוני מאפשר למשתמש לעזוב בזמן שהקובץ מוכן תוך דקה. בהתבסס על הפרויקטים שלנו, ייצוא אסינכרוני מהיר פי 3 מפתרונות סטנדרטיים מבוססי רכיבים.

מדוע ייצוא אסינכרוני עדיף על סינכרוני

ייצוא סינכרוני חוסם את בקשת ה-HTTP וצורך זיכרון RAM יחסית לגודל הנתונים. עבור 500,000 מוצרים, אפילו מערך המזהים תופס 50 MB, נתונים מלאים עם מחירים ומאפיינים עד 1 GB. ייצוא אסינכרוני באמצעות מחוללי PHP (generators) משתמש בפחות מ-10 MB זיכרון שיא, אפילו עבור מיליוני רשומות. למידע נוסף על מחוללים, ראו תיעוד PHP.

מבנה המודול

למודול vendor.exporter יש שלוש שכבות:

  • Collector — מביא נתונים מהמקור (שאילתות ORM לטבלאות Bitrix)
  • Transformer — הופך נתונים גולמיים למבנה הנדרש
  • Formatter — מייצר את הקובץ הסופי בפורמט הנדרש

טבלאות המודול:

טבלה מטרה
b_vendor_exporter_profile פרופילי ייצוא: שם, source_config (JSON), פורמט, לוח זמנים, last_run, last_file
b_vendor_exporter_job משימות: profile_id, סטטוס, started_at, finished_at, file_path, rows_count, error
b_vendor_exporter_field מיפוי שדות: profile_id, source_field, target_field, transform_rule

אוספי נתונים

class CatalogProductCollector implements CollectorInterface {
    public function collect(array $filter, array $select): \Generator {
        $query = \Bitrix\Iblock\Elements\ElementTable::query()
            ->setFilter($filter)
            ->setSelect($select);

        foreach ($query->fetchAll() as $row) {
            // JOIN с ценами
            $prices = \Bitrix\Catalog\PriceTable::getList([
                'filter' => ['=PRODUCT_ID' => $row['ID']],
                'select' => ['PRICE', 'CURRENCY', 'CATALOG_GROUP_NAME'],
            ])->fetchAll();

            $row['PRICES'] = $prices;
            yield $row;
        }
    }
}

שימוש ב-class CatalogProductCollector implements CollectorInterface { public function collect(array $filter, array $select): \Generator { $query = \Bitrix\Iblock\Elements\ElementTable::query() ->setFilter($filter) ->setSelect($select); foreach ($query->fetchAll() as $row) { // JOIN с ценами $prices = \Bitrix\Catalog\PriceTable::getList([ 'filter' => ['=PRODUCT_ID' => $row['ID']], 'select' => ['PRICE', 'CURRENCY', 'CATALOG_GROUP_NAME'], ])->fetchAll(); $row['PRICES'] = $prices; yield $row; } } } במקום מערך הוא קריטי לייצוא של 100,000+ רשומות — הנתונים אינם נצברים בזיכרון.

מעצבי פורמט (Formatters)

CSV עם תמיכה במפריד ובקידוד:

class CsvFormatter implements FormatterInterface {
    public function format(\Generator $data, array $columns, string $outputPath): void {
        $handle = fopen($outputPath, 'w');
        fputs($handle, "\xEF\xBB\xBF"); // UTF-8 BOM для Excel
        fputcsv($handle, array_column($columns, 'label'), $this->delimiter);
        foreach ($data as $row) {
            fputcsv($handle, $this->extractValues($row, $columns), $this->delimiter);
        }
        fclose($handle);
    }
}

פורמט ה-CSV מוגדר ב-RFC 4180 ונמצא בשימוש נרחב להחלפת נתונים טבלאיים (ראו ויקיפדיה על CSV).

מעצב XML עבור סכמות שרירותיות — ניתן להגדרה באמצעות תבניות XSD או XSLT. XLSX באמצעות PhpSpreadsheet עם עיצוב תאים. JSON עם אפשרויות מבנה: מערך שטוח או אובייקטים מקוננים. ניתן להרחיב כל מעצב לדרישות ספציפיות של השוק.

סינון וייצוא חלקי

לכל פרופיל יש פילטר בסיסי. בהפעלה ידנית, מנהל המערכת יכול להוסיף פילטרים נוספים דרך טופס: טווח תאריכים, סטטוסים, מזהים ספציפיים. הפילטר מועבר ל-Collector דרך Generator:

$collector->collect(
    array_merge($profile->getBaseFilter(), $job->getFilterOverride()),
    $profile->getSelect()
);

אבטחה וביקורת

ייצוא של נתונים אישיים (משתמשים, הזמנות) זמין רק לקבוצות עם הרשאות מפורשות בהגדרות המודול. כל הפעלה מתועדת: מי, מתי, כמה רשומות, נתיב קובץ. הלוג נשמר ב-class CsvFormatter implements FormatterInterface { public function format(\Generator $data, array $columns, string $outputPath): void { $handle = fopen($outputPath, 'w'); fputs($handle, "\xEF\xBB\xBF"); // UTF-8 BOM для Excel fputcsv($handle, array_column($columns, 'label'), $this->delimiter); foreach ($data as $row) { fputcsv($handle, $this->extractValues($row, $columns), $this->delimiter); } fclose($handle); } } . זה מבטיח עמידה בתקנות הגנת מידע.

כיצד להגדיר פרופיל ייצוא

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

  1. בחירת ישות Bitrix (קטלוג, הזמנות, לידים) ומקור נתונים (בלוק מידע, HL-block, טבלה).
  2. הגדרת מיפוי שדות: מיפוי שדות מקור לשדות ייצוא. כללי טרנספורמציה זמינים: שרשור, המרת פורמט, החלפת ערכים.
  3. הגדרת פורמט קובץ (CSV, XML, XLSX, JSON) ופרמטרים נוספים (מפריד, קידוד, סכמה).
  4. ציון לוח זמנים (ביטוי cron) ושיטת משלוח (דוא"ל, FTP, POST webhook).

כל ההגדרות זמינות בממשק הניהול של המודול.

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

  • ארכיטקטורת מודול: פרופילים, אוספים, מעצבי פורמט
  • הטמעת תור אסינכרוני עם סוכן
  • ממשק ניהול לפרופילים ומשימות
  • הגדרת לוח זמנים (cron) ומשלוח אוטומטי (דוא"ל, FTP, POST)
  • בדיקות על הנתונים שלך (עד מיליון רשומות)
  • תיעוד התקנה והגדרה
  • אחריות לחודש לתיקונים במסגרת ההיקף המוסכם

לוח זמנים לפיתוח

שלב משך
ארכיטקטורה, ממשקים, טבלאות יום אחד
אוספים עבור ישויות Bitrix נדרשות יומיים
מעצבי פורמט (CSV, XML, XLSX, JSON) יומיים
ייצור אסינכרוני, סוכן יום אחד
לוח זמנים, משלוח אוטומטי (דוא"ל, FTP) יומיים
ממשק ניהול יומיים
סינון, הרשאות, לוג ביקורת יום אחד
בדיקות על מערכי נתונים גדולים יום אחד

סה"כ: 12 ימי עבודה עבור סט סטנדרטי של פורמטים ומקורות. פורמטים ספציפיים לשוק (במיוחד עם שדות הסמכה חובה) מוסיפים 1-2 ימים כל אחד.

למה לבחור בנו?

אנחנו צוות עם ניסיון של 5+ שנים ב-Bitrix ו-Bitrix24, לאחר השלמת למעלה מ-50 פרויקטי אינטגרציה וייצוא נתונים. אנו משתמשים ב-PHP 8.1 מודרני, ORM וקאשינג מתויג. הזמינו מודול ייצוא נתונים מותאם אישית — נעריך את הפרויקט שלכם תוך יום עסקים אחד. קבלו ייעוץ בנושא ארכיטקטורה ולוחות זמנים. הכל מוכן לשימוש, עם תיעוד ותמיכה.