الدروس · الدرس 1 من 5
الفراغ ليس صفراً
ماذا يفعل MerchandiserOS بالحقل الفارغ، وأين تظهر القيمة الغائبة لاحقاً، ولماذا الفراغ على سجلّ أساسي سؤال لا إعداد.
الدرس 1 من 5 · 20 د
الغرفة التي يجري فيها هذا المساق
معظم العمل في هذا النظام معلَّق على حفنة سجلّات صغيرة. مشترٍ، ومورّد، وملف مصنعك أنت، وبضع قوائم رموز. تبدو نماذج تملؤها مرة وتنساها. وهذا الدرس عمّا يحدث حين تترك جزءاً من واحد منها فارغاً.
Riche Terre Apparel مصنع ملابس علوية تريكو وقمصان منسوجة في Coromandel بجزيرة موريشيوس. يُشغّل ثلاثة خطوط خياطة، ويوظّف 265 شخصاً، ويصدّر إلى المملكة المتحدة وفرنسا. وقد بدأت مساحة عمله في MerchandiserOS في 6 كانون الثاني 2024، وكل ما في هذا المساق يجري داخلها.
يظهر أربعة أشخاص.
- Yashvin Bhugaloo يملك العمل وهو مالك مساحة العمل. والإعدادات له وحده.
- Devina Jhurry هي الميرشانديزر. وهي تملك سجلّات المشترين.
- Kavi Seebaluck مسؤول التوريد. وهو يملك المورّدين والمواد.
- Clency Perrine مدير الجودة.
قل الأساس مرة واحدة. كل المال في هذا المساق بالدولار الأمريكي، وهي العملة التي يمسك بها Riche Terre أوراق تكلفته. وحيث لا يفعل التطبيق شيئاً بعد، يقول الدرس ذلك صراحةً.
الشاشات الأربع
البيانات الأساسية ليست وحدة واحدة. بل أربعة أماكن، اثنان منها فقط داخل الإعدادات.
| الشاشة | المسار | من يفتحها | ماذا تحمل |
|---|---|---|---|
| العملاء (المشترون) | /buyers | كل من له صلاحية المشترين | العلامات التي تنتج لها، وملف الجودة لكلٍّ منها |
| الموردون | /suppliers | كل من له صلاحية المورّدين | المصانع وموردو الإكسسوارات والمقاولون، مع أوضاعهم |
| ملف المصنع | /settings/factory | المالك وحده | هويتك، وما تصنعه، وما تفعله داخلياً |
| القوائم والرموز | /settings/reference-data | المالك وحده | القوائم القابلة للتحرير خلف المنسدلات |
اثنتان من الأربع للمالك وحده، والصفحة تفرض ذلك. وهي لا تكتفي بإخفاء الرابط. فملف المصنع والقوائم والرموز كلاهما يفحص الجلسة ويرسل غير المالك إلى صفحة رفض. اعرف ذلك قبل أن تطلب من الميرشانديزر أن «يذهب ويضيفها ببساطة».
ماذا يفعل التطبيق بالخانة الفارغة
أنشئ مورّداً يعرض عليك النموذج عشرة عناصر: تسعة حقول ومربّع اختيار للمقاولة. ثلاثة منها بالضبط مطلوبة — الاسم والبلد والفئة. والحقول الستة الباقية يجوز تركها فارغة، وما يحدث حينها هو موضوع هذا الدرس كله.
الحقول الرقمية الثلاثة — زمن التوريد والحدّ الأدنى للطلب والطاقة اليومية — تمرّ بمحلّل واحد مشترك. وقاعدته للخانة الفارغة سطر واحد، وهو أهمّ سطر في هذا المساق.
case "intopt":
if (v === "") return { ok: true, value: null, display: "—" };الخانة الفارغة لا تصير صفراً. بل تصير قيمة فارغة، ويعرض السجلّ شرطة. واكتب صفراً تحصل على صفر، وهو واقعة أخرى عن العالم. فزمن توريد صفر يقول إن البضاعة متوفرة دائماً. وزمن توريد لا شيء يقول إن أحداً لم يسأل.
| الحقل | مطلوب | ماذا يكتب Kavi | المخزَّن | المعروض |
|---|---|---|---|---|
| الاسم | نعم | Palladam Knitfab | Palladam Knitfab | Palladam Knitfab |
| البلد | نعم | الهند | IN | IN |
| الفئة | نعم | قماش | قماش | قماش |
| زمن التوريد بالأيام | لا | لا شيء | قيمة فارغة | — |
| الحدّ الأدنى للطلب | لا | لا شيء | قيمة فارغة | — |
| شروط الدفع | لا | لا شيء | قيمة فارغة | — |
| جهة الاتصال | لا | لا شيء | قيمة فارغة | — |
| الطاقة بالقطع يومياً | لا | لا شيء | قيمة فارغة | — |
| ملاحظات | لا | لا شيء | قيمة فارغة | — |
ست شرطات على شاشة واحدة. ولا واحدة منها خطأ. كل واحدة سؤال لم يسأله أحد بعد، والتطبيق أمين: يعرض شرطة بدل أن يخترع جواباً.
القيمة العظمى التي لا ترى الفراغ
هنا تكفّ الشرطة عن كونها تجميلية.
موديل STY-127 لدى Riche Terre قميص قطني مصبوغ الغزل للمشتري Cazaubon Mode. وتعتمد قائمة مواده على ثلاثة مورّدين، ويحمل سجلّ كل مورّد زمن التوريد الخاص به.
- Palladam Knitfab في الهند يورّد قماش القمصان. زمن التوريد: فارغ.
- Beau Bassin Trims يورّد الأزرار والحشوة. زمن التوريد: 12 يوماً.
- Quatre Bornes Embroidery ينفّذ شعار الصدر. زمن التوريد: 10 أيام.
حين تُخطَّط طلبية، يمشي التطبيق على قائمة المواد، ويجمع المورّدين خلفها، ويأخذ أطول زمن توريد بينهم. ولخطوة الجمع حارس واحد:
if (s.leadTimeDays != null) leads.push(s.leadTimeDays);
if (leads.length) materialLeadDays = Math.max(...leads);الفراغ يُتخطّى ولا يُحسب. فأطول زمن توريد مواد على STY-127 يقرأ 12 يوماً، أي زمن مورّد الإكسسوارات، لأن صمت المصنع لم يدخل القائمة قط.
وتعمل الطلبية على القالب المزروع Woven Shirt / Blouse — 120 days. ومَعْلَمان منه يهمّان هنا. Bulk Fabric PO Confirmed عند 102 يوم عمل قبل الخروج من المصنع، وBulk Fabric In-House عند 38. والمهلة التي يتيحها القالب للتوريد هي الفارق بينهما: 102 − 38 = 64 يوم عمل.
ثم يضيف التطبيق علاوة للمواد المستوردة. ومورّدو Riche Terre الثلاثة كلهم مسجَّلون خارج مصر، فيُحسبون جميعاً مستوردين والعلاوة 14 يوماً.
فالخطة التي يبنيها التطبيق هي هذه.
| أطول زمن توريد مواد | زائد علاوة الاستيراد | مهلة القالب | التمديد المضاف | |
|---|---|---|---|---|
| وزمن المصنع فارغ | 12 | 26 | 64 | 0 |
| وبزمن المصنع الحقيقي | 75 | 89 | 64 | 25 |
مع الفراغ يكون تمديد التوريد صفراً. لا صغيراً. صفراً. فالمسار الحرج يقول إن مهلة القالب نفسها وافرة، ويقوله بلا أي تحذير، لأن شيئاً لم يتجاوز شيئاً في نظر الحساب.
ثم يتصل Kavi في النهاية بـ Palladam ويكتب الجواب: 75 يوماً لقماش القمصان المصبوغ الغزل بالجملة. فيصير أطول زمن 75، والزمن الفعّال 75 + 14 = 89، والتمديد 89 − 64 = 25 يوم عمل.
وذلك التمديد يقدّم كل مَعْلَم عند عتبته أو فوقها بالخمسة والعشرين يوماً نفسها. وأربعة معالم تقع عند 102 أو فوقها على هذا القالب، فتتحرّك أربعة. فينتقل Bulk Fabric PO Confirmed من 102 إلى 127 يوم عمل قبل الخروج من المصنع. أما Bulk Fabric In-House فعند 38، تحت العتبة، فلا يتحرّك البتة. والخمسة والعشرون يوماً كلها تخرج من مهلة التوريد، وهذا هو المقصود تماماً: 127 − 38 = 89، أي الزمن الحقيقي.
الصيغة الأمينة من الدرس
من المغري أن ننتهي هنا بجملة «الفراغ ليس صفراً، ولذلك كانت الخطة خاطئة». اشتغل بالحساب تجد ذلك غير دقيق.
لنفترض أن التطبيق قرأ الفراغ صفراً. عندها يكون أطول زمن هو الأكبر بين 0 و12 و10، وهو 12 كذلك. الجواب نفسه، والتمديد الغائب نفسه. فداخل قيمة عظمى، الغائب والصفر يتشابهان، لأن أياً منهما ليس الأكبر أبداً.
فما تمنحك إياه القيمة الفارغة ليس رقماً مختلفاً. بل شرطة على شاشة. فالصفر يبدو جواباً أعطاه أحدهم. والشرطة تبدو سؤالاً لم يسأله أحد، وهي الشيء الوحيد على صفحة المورّد القادر على إرسال Kavi إلى الهاتف. والغياب الأمين ينفع لأنه يبقى مرئياً، لا لأنه يغيّر المجموع.
وثمّة لسعة ثانية تستحقّ التسمية. فالمورّد الأرجح أن يكون زمن توريده فارغاً هو مصنع لم تشترِ منه قط. والمصنع الذي لم تشترِ منه قط هو الأرجح أن يكون أطول أزمنتك. فالثغرة ليست موزّعة بالتساوي. بل تقع بالضبط حيث تُحدث أكبر ضرر.
ماذا يكلّف الفراغ على صفحة مطبوعة
تفتح شاشة ملف المصنع على هوية الشركة والترويسة، اثني عشر حقلاً في ثلاث مجموعات.
| المجموعة | الحقل | مملوء في 6 كانون الثاني |
|---|---|---|
| الشركة | اسم المصنع القانوني | نعم — الحقل المطلوب الوحيد |
| الشركة | العنوان | نعم |
| الشركة | المدينة | نعم |
| الشركة | البلد | نعم |
| الشركة | الهاتف | لا |
| الشركة | البريد الإلكتروني | نعم |
| الضريبة والتسجيل | رقم السجلّ التجاري | لا |
| الضريبة والتسجيل | رقم التسجيل الضريبي | لا |
| بنك المستفيد | اسم البنك | لا |
| بنك المستفيد | اسم الحساب | لا |
| بنك المستفيد | رمز السويفت | لا |
| بنك المستفيد | رقم الآيبان أو الحساب | لا |
خمسة مملوءة وسبعة فارغة. ولا يُتحقَّق إلا من الاسم، فتحفظ الشاشة راضية.
وثمانية مستندات مطبوعة تقرأ هذا السجلّ: تأكيد الطلبية، وقائمة التعبئة، وورقة التكلفة، وطلب الشراء، وإشعار استلام البضاعة، وإشعار صرف المواد، وأمر الإنتاج، وتقرير فحص المقاسات. خمسة من الثمانية تطبع اسم المصنع وحده. وثلاثة منها — تأكيد الطلبية وورقة التكلفة وطلب الشراء — تطبع تحته سطر ترويسة كاملاً.
وذلك السطر مبنيّ بضمّ الأجزاء الموجودة وإسقاط الباقي.
[address, city, country, phone, email] → present parts joined by " · "
[CR + registration no., Tax/VAT + tax id] → present parts joined by " · "فبحقول Yashvin الخمسة، يطبع نصف الاتصال أربعة من أجزائه الخمسة، ولا يطبع النصف الضريبي شيئاً البتة. ولا فجوة ولا نائب ولا حقل أحمر. المستند ببساطة أقصر مما ينبغي، ويبدو منتهياً.
وورقة تكلفة بلا رقم تسجيل ضريبي مستند سيردّه قسم حسابات مشترٍ فرنسي. ولا شيء في التطبيق سيخبر Yashvin بذلك. وأول من يلاحظ أحدٌ في باريس، بعد أسابيع، ممسكاً بتأكيد طلبية لا يستطيع معالجته.
قاعدتان تأخذهما معك
الشرطة مهمّة لا حالة. فكل شرطة على سجلّ مشترٍ أو مورّد سؤال أحدهم بلا جواب. اقرأ السجلّ قائمةَ أسئلة تكفّ الشرطات عن كونها غير مرئية.
اسأل ما الذي يقرأ هذا الحقل. فالفراغ يهمّ بقدر ما يستهلكه. فراغ جهة الاتصال يكلّف رسالة. وفراغ زمن التوريد يكلّف مساراً حرجاً. وفراغ الرقم الضريبي يكلّف مستنداً سيرفضه موظف جمارك. والحقل يبدو نفسه في الحالات الثلاث. والعواقب ليست نفسها البتة.
اختبر فهمكزمن توريد مورّد فارغ، والحدّ الأدنى للطلب لدى المورّد نفسه مضبوط على 0. في أيّهما يكون التطبيق أميناً، وأيّهما ينبغي أن يقلقك؟أظهر الإجابة
كلاهما أمين، والصفر ينبغي أن يقلقك أكثر. فالفراغ مخزَّن قيمةً فارغة ومعروض شرطةً، وهي سؤال مرئي. أما الصفر فقيمة حقيقية كتبها أحدهم، ومعناها أن لا حدّ أدنى لهذا المورّد، وهو ادّعاء قوي. وإن لم يقصد أحد ذلك الادّعاء، فالصفر كذبة لا تستطيع الشاشة تمييزها عن واقعة. أما الشرطة فتعلن عن نفسها.
موجّه · حوّل كل شرطة في بياناتي الأساسية إلى سؤال
قبل بداية الموسم، وكلما بدت الخطة أسهل مما يبدو علماذا العمل.
ساعدني في قراءة بياناتي الأساسية كقائمة أسئلة بلا أجوبة، لا كقائمة سجلّات. سألصق لك، أو أصف: حقول هوية مصنعي وأيّها مملوء؛ وقائمة مورّهذهّ مع زمن التوريد واحتىّ الأدنى للطلب وشروط الدفع والطاقة لكلٍّ منهم، مع تحهذهد الفارغ منها بوضوح؛ وقائمة مواد موهذهل واحد أوشك على تخطيطه. أولاً، لكل حقل فارغ، قل لي ما الذي يقرؤه لاحقاً. سمِّ الشاشة أو المستند أو الحساب الذي يستهلكه بالتحهذهد، وقل ماذا يفعل ذلك الشيء حين يكون الحقل فارغاً. وميّز ثلاث حالات وسمِّ كلّاً منها: الفراغ لا يغيّر شيئاً، والفراغ يجعل شيئاً أقصر بهدوء، والفراغ يجعل حساباً خاطئاً في صمت. ثم أجرِ حساب زمن التوريد للموهذهل الذي أعطيتك إياه. خذ أطول زمن توريد مسجّل بين مورّهذه المواد على تلك القائمة، وقل لي أيّ المورّهذهن جرى تخطّيهم لأن زمنهم فارغ. واسألني عن الزمن الحقيقي لكل مورّد متخطّى. ثم أعد حساب الأطول، وقل لي كم يوماً تحرّك الجواب. ثم اسأل إن كان أكبر متحرّك مورّداً لم أشترِ منه من قبل. وثلاث قواعد. لا تملأ فراغاً برقم نمطي ولا بمتوسط قطاعي ولا برقم مورّد آخر — اكتب مجهول وقل لي بمن أتصل. ولا تعامل الفراغ صفراً ولا الصفر فراغاً، بل قل صراحةً أيّهما يحمل كل حقل وماذا يعني الفرق تجارياً. وحيث يكون الحقل فارغاً على مستند مطبوع، قل لي من أول من يلاحظ النقص وبعد كم من الوقت.
قد يخطئ الذكاء الاصطناعي — تحقّق من أي شيء ستتصرّف بناءً عليه.