قالب تسلسل أب وابن من CSV (تفكيك كتالوج المنتجات)
تصدير PIM أو قائمة مواد يسمّي أب كل صف، فتشير أسهمه إلى أعلى. وعمود «الخط إلى» يسمّي الأبناء، فتشير إلى أسفل. وهذا القالب هو ذلك الانعكاس مرسوماً: خمسة مستويات عمق، وخمسة قرارات، وسبع أوراق.
ملف CSV الذي ينتج هذا المخطط
صف واحد لكل خطوة. الأرقام في عمود «خط إلى» هي أرقام صفوف — وهي ما يرسم الوصلات، وهي العمود الذي تفتقده معظم الملفات.
| # | الشكل | نص المربّع | الخط إلى | نص الخط | المسار الأفقي | المسار الرأسي |
|---|---|---|---|---|---|---|
| 1 | Start | كتالوج المعيشة الخارجية | 2, 3 | الجذر (خانة الأب فارغة) | سجل فئة | |
| 2 | Process | المقاعد | 4 | العمق 1 | سجل فئة | |
| 3 | Process | المظلات والمآوي | 7 | العمق 1 | سجل فئة | |
| 4 | Decision | هل تتفرّع الفئة أكثر؟ | 5, 6 | فئة فرعية, منتج قابل للبيع | العمق 1 | سجل فئة |
| 5 | Process | المقاعد الطويلة | 10 | العمق 2 | سجل فئة | |
| 6 | Process | طقم وسائد لمقعد طويل | 8 | العمق 2 | سجل منتج | |
| 7 | Process | مظلة كابولية 3 أمتار | 9 | العمق 2 | سجل منتج | |
| 8 | Decision | هل للمنتج تنويعات؟ | 11, 12 | نعم: صف لكل تنويعة, لا: صف المنتج هو رمز البيع | العمق 2 | سجل منتج |
| 9 | Decision | هل قطعة الغيار تُباع منفصلة؟ | 13, 14 | تُباع منفصلة, للصيانة فقط | العمق 2 | سجل منتج |
| 10 | Process | مقعد حديقة لثلاثة أشخاص | 15 | العمق 3 | سجل منتج | |
| 11 | Success | طقم وسائد، لون طبيعي | العمق 3 | سجل تنويعة | ||
| 12 | Success | طقم وسائد لمقعد طويل، رمز بيع واحد | العمق 3 | سجل منتج | ||
| 13 | Success | قماش مظلة بديل 3 أمتار | العمق 3 | سجل تنويعة | ||
| 14 | End | مجموعة أضلاع المظلة | العمق 3 | سجل مكوّن | ||
| 15 | Decision | مخزون أم يُصنع حسب الطلب؟ | 17, 16 | مخزون, يُصنع حسب الطلب | العمق 3 | سجل منتج |
| 16 | Decision | يُشترى جاهزاً أم يُصنع داخلياً؟ | 18, 19 | يُشترى جاهزاً, يُصنع داخلياً | العمق 3 | سجل مكوّن |
| 17 | Success | مقعد حديقة لثلاثة أشخاص، بلوط | العمق 4 | سجل تنويعة | ||
| 18 | End | طقم شرائح خشب صلب | العمق 4 | سجل مكوّن | ||
| 19 | End | هيكل مقعد من الحديد الزهر | العمق 4 | سجل مكوّن |
#,الشكل,نص المربّع,الخط إلى,نص الخط,المسار الأفقي,المسار الرأسي
1,Start,كتالوج المعيشة الخارجية,"2, 3",,الجذر (خانة الأب فارغة),سجل فئة
2,Process,المقاعد,4,,العمق 1,سجل فئة
3,Process,المظلات والمآوي,7,,العمق 1,سجل فئة
4,Decision,هل تتفرّع الفئة أكثر؟,"5, 6","فئة فرعية, منتج قابل للبيع",العمق 1,سجل فئة
5,Process,المقاعد الطويلة,10,,العمق 2,سجل فئة
6,Process,طقم وسائد لمقعد طويل,8,,العمق 2,سجل منتج
7,Process,مظلة كابولية 3 أمتار,9,,العمق 2,سجل منتج
8,Decision,هل للمنتج تنويعات؟,"11, 12","نعم: صف لكل تنويعة, لا: صف المنتج هو رمز البيع",العمق 2,سجل منتج
9,Decision,هل قطعة الغيار تُباع منفصلة؟,"13, 14","تُباع منفصلة, للصيانة فقط",العمق 2,سجل منتج
10,Process,مقعد حديقة لثلاثة أشخاص,15,,العمق 3,سجل منتج
11,Success,طقم وسائد، لون طبيعي,,,العمق 3,سجل تنويعة
12,Success,طقم وسائد لمقعد طويل، رمز بيع واحد,,,العمق 3,سجل منتج
13,Success,قماش مظلة بديل 3 أمتار,,,العمق 3,سجل تنويعة
14,End,مجموعة أضلاع المظلة,,,العمق 3,سجل مكوّن
15,Decision,مخزون أم يُصنع حسب الطلب؟,"17, 16","مخزون, يُصنع حسب الطلب",العمق 3,سجل منتج
16,Decision,يُشترى جاهزاً أم يُصنع داخلياً؟,"18, 19","يُشترى جاهزاً, يُصنع داخلياً",العمق 3,سجل مكوّن
17,Success,مقعد حديقة لثلاثة أشخاص، بلوط,,,العمق 4,سجل تنويعة
18,End,طقم شرائح خشب صلب,,,العمق 4,سجل مكوّن
19,End,هيكل مقعد من الحديد الزهر,,,العمق 4,سجل مكوّنكيف تعمل
جِد العمودين اللذين يحملان التسلسل الهرمي
كل ما عداهما في التصدير زينة لهذا الغرض. تحتاج العمود الحامل لمعرّف كل صف والعمود المسمّي لأبيه. ونادراً ما يُسمّيان id وparent_id: فابحث عن parent_sku، أو belongs_to، أو category_path، أو assembly. وإن كان الأب مساراً لا رمزاً، مثل «الرئيسية > المقاعد > المقاعد الطويلة»، فالمقطع الأخير هو الأب والباقي هو العمق. وإن لم يكن في التصدير عمود أب البتة وكان فيه رقم مستوى فانظر الملاحظة عن قوائم المواد المُزاحة أدناه.
اقلب عمود الأب إلى «الخط إلى»
هذه هي المهمة كلها. رتّب التصدير أو اجمعه على عمود الأب بحيث يجلس أبناء كل أب معاً، ثم اكتب أرقام صفوف أولئك الأبناء في خليّة «الخط إلى» الخاصة بالأب، مفصولةً بفواصل. والاتجاه ينعكس هنا: فالتصدير كان يقول الابن يسمّي أباه، والجدول يقول الأب يسمّي أبناءه. ونتيجة واحدة تستحق القول صراحةً: عمود الأب فيه قيمة واحدة لكل صف، و«الخط إلى» فيه من القيم بعدد أبناء ذلك الصف، فتنتقل المعلومة من صفوف كثيرة إلى صفوف أقل.
رقّم الصفوف أخيراً، وبعد أن يستقر الترتيب فقط
«الخط إلى» يحمل موضع الصف في الجدول لا معرّفه، فـSKU-1042 يجب أن يصير رقم الصف الحامل له. وأدرِج صفاً بعد ذلك فيصير كل رقم تحت موضع الإدراج مزاحاً بواحد. رتّب الصفوف ترتيبها النهائي أولاً، ثم حُلّ المعرّفات إلى أرقام في مرور واحد. وقيمة «الخط إلى» التي تسمّي صفاً غير موجود تُسقَط بصمت عند رسم المخطط، وهو ما يبدو مربعاً نسي أن يتصل بشيء.
اقتبس خليّة «الخط إلى» وتأكد من الفاصل
«الخط إلى» و«نص الخط» يحملان قوائم مفصولة بفواصل، ففي ملف مفصول بفواصل يجب وضع تينك الخليّتين بين علامتي اقتباس مزدوجتين («4,5» و«نعم,لا») وإلا اكتسب الصف حقلاً وانزاح كل عمود بعده موضعاً واحداً. والتصديرات الأوروبية مفصولة بفواصل منقوطة كثيراً، وهذا يجعل الفواصل داخل الخلايا غير ضارة لكنه يعني وجوب قراءة الملف كله على أنه مفصول بفواصل منقوطة. وأسماء المنتجات تجلب مشكلات اقتباسها الخاصة: فالفاصلة في «مقعد طويل، ثلاثة أشخاص» أو علامة البوصة في عمود 3" يجب تهريبها بالطريقة نفسها. وإن بدا عمود متجاهَلاً عند الاستيراد فافحص اسم الترويسة الأول، فالملف المكتوب بترميز UTF-8 مع علامة ترتيب بايتات يحمل ثلاثة بايتات غير مرئية أمامه.
اضبط «الشكل» مما يكونه الصف، و«المسار الأفقي» و«المسار الرأسي» من موضعه
صف واحد يأخذ «بداية»: الصف الذي خانة أبيه فارغة. والصفوف التي «الخط إلى» فيها فارغ أوراق، والورقة تحتاج شكل إنهاء: نهاية، أو نجاح، أو رفض، لأن الصف غير النهائي بلا وصلة خارجة طريق مسدود. واستخدم التقسيم الذي يستخدمه هذا القالب إن نفعك: «نجاح» للصفوف التي يستطيع العميل طلبها، و«نهاية» للصفوف التي لا توجد إلا داخل تجميعة. ثم املأ «المسار الأفقي» بالعمق الذي تتبّعته و«المسار الرأسي» بعمود النوع الموجود في التصدير سلفاً. واسم الشكل غير المعروف يُطبَّع إلى «خطوة» بلا شكوى، فافحص هجاء «قرار» بوجه خاص.
نظّف الأيتام والجذور الزائدة والحلقات قبل الاستيراد
ثلاثة فحوص، لكل واحد عَرَض متمايز. كل قيمة في عمود الأب يجب أن تظهر في عمود المعرّف؛ وما لا يظهر أيتام، عادةً لأن التصدير رُشِّح إلى فئة واحدة والآباء يعيشون فوقها. ويجب أن يكون لصف واحد بالضبط خانة أب فارغة، فإن كان لعدة صفوف ذلك فأنت تنظر إلى عدة شجرات. ولا يجوز لأي صف أن يبلغ نفسه عبر آبائه، وهو ما يقع بعد دمج سيئ، ويرسم بعد القلب وصلةً تلتف على نفسها.
الأسئلة الشائعة
كيف تحوّل عمودَي الأب والابن إلى مخطط انسيابي؟
بقلب العلاقة ثم ترقيمها. فالتصدير يعطيك: الابن يسمّي أباه؛ والجدول يريد: الأب يسمّي أبناءه. اجمع الصفوف على عمود الأب، واكتب لكل أب أرقام صفوف أبنائه في خليّة «الخط إلى» الخاصة به، مفصولةً بفواصل. وكل صف تكون خانة الأب فيه فارغة جذر ويأخذ شكل «بداية»؛ وكل صف لا يظهر في عمود أب أحد ورقة، يأخذ «الخط إلى» فارغاً وشكل إنهاء. واملأ «نص المربّع» من عمود الاسم، و«المسار الأفقي» من العمق الذي تحصل عليه بصعود سلسلة الآباء، و«المسار الرأسي» من عمود النوع الموجود في التصدير سلفاً. ثم أسقِط ملف .csv على منطقة جدول البيانات في المحرر، أو الصق نص CSV مباشرةً فيها. والاستيراد يطابق أسماء الترويسات، فترتيب الأعمدة في ملفك لا يهم، وأي أعمدة لا يعرفها تُنقل كما هي وتُتجاهل.
ما الفرق بين عمود الأب وعمود «الخط إلى»؟
الاتجاه، والعدد، وما تشير إليه القيمة. فعمود الأب يشير إلى أعلى: كل صف يسمّي الصف الواحد الذي فوقه، فهناك قيمة واحدة بالضبط لكل صف، والأوراق هي الصفوف التي لا يسمّيها أحد. وعمود «الخط إلى» يشير إلى أسفل: كل صف يسمّي الصفوف التي تحته، فالأب ذو الأربعة أبناء يحمل أربع قيم في خليّة واحدة، والأوراق هي الصفوف التي خليّتها فارغة. والقيمتان مختلفتان في النوع. فعمود الأب يحمل معرّفاً، شيئاً مثل SKU-1042 يبقى مع الصف أينما تحرّك. أما «الخط إلى» فيحمل موضعاً، رقم الصف بالعد من 1 في الجدول، وهو يتغيّر لحظة إدراج صف فوقه. ولهذا يجب حلّ المعرّفات إلى أرقام بعد استقرار ترتيب الصفوف لا قبله.
أعمدتي انزاحت في منتصف الملف. ماذا حدث؟
فاصلة غير مقتبسة في الغالب الأعم. فصف CSV يُشطر على الفاصل قبل أن ينظر إليه أي شيء آخر، فخليّة «الخط إلى» التي تحوي 4,5 في ملف مفصول بفواصل تُقرأ حقلين، فيصير الصف أطول من الترويسة بحقل، ويحطّ كل عمود بعد «الخط إلى» تحت عنوان جاره. ضع تلك الخلايا بين علامتي اقتباس مزدوجتين فيعيدها المحلل إلى وضعها. وينطبق الأمر نفسه على «نص الخط»، فهو أيضاً قائمة مفصولة بفواصل، وعلى أي اسم منتج فيه فاصلة. وإن بدأت الإزاحة من العمود الأول نفسه فالسبب عادةً المشكلة المعاكسة: الملف مفصول بفواصل منقوطة، كما هي حال معظم تصديرات الأنظمة الأوروبية، ويُقرأ على أنه مفصول بفواصل، أو أن عدم توافق ترميز ألصق علامة ترتيب بايتات باسم الترويسة الأول فلم يعد يطابق.
ماذا يحدث لصف أبوه مفقود من التصدير؟
يصير يتيماً، وهو أشيع عيب في تصدير مرشَّح. فقد طلبت من النظام فئة واحدة، أو الأصناف النشطة فقط، فأعطاك تلك الصفوف بالضبط: بما فيها معرّفات آبائها، وهي تشير إلى صفوف استبعدها المرشِّح. ولا شيء في الملف موسوم بأنه خاطئ. وحين يُقلب التسلسل الهرمي لا يُسرَد ذلك الصف في «الخط إلى» لأحد ببساطة، فيُرسم مربعاً لا يصل إليه شيء، جالساً خارج الشجرة. قرّر لكل صف ما هو قبل الاستيراد: فالصف الذي رُشِّح أبوه خارجاً ينبغي إعادة ربطه بأقرب سلف مشمول، والصف الذي لم يعد أبوه موجوداً في النظام المصدر عيب بيانات يُعاد لا يُرسم.
هل أستطيع استخدام قائمة مواد فيها عمود مستوى بدل عمود أب؟
نعم، وتتحول إلى الشيء نفسه، لكن التحويل يعتمد على ترتيب الصفوف لا على أي قيمة في الصف. فقائمة المواد المُزاحة تكرّر المستويات 1، 2، 2، 3، 1 نزولاً في الملف، والقاعدة أن أب الصف هو أقرب صف فوقه يكون مستواه أدنى بواحد بالضبط. وهذا يعني أن ترتيب التصدير الأصلي حامل للمعنى: رتّب الملف على رقم القطعة أولاً فيزول التسلسل الهرمي، بلا خطأ وبلا شيء يبقى لاستعادته. امشِ في الملف من أعلى إلى أسفل محتفظاً بآخر صف رأيته عند كل مستوى، وأسنِد الآباء وأنت تمضي، ثم اقلب إلى «الخط إلى» بعد ذلك فقط. وتستطيع الكميات والوحدات ورموز المورّدين البقاء في أعمدتها، فهي تُنقل عبر الاستيراد وتُتجاهل، أو الانتقال إلى عمود «ملاحظات» إن أردتها مرئية.