تاريخ المقال طول المقال تتطلب قرائته
1269 كلمة 8 دقيقة
في موضوعي السابق (كيف تسوق سيرتك الذاتية) حدثني أحد أصدقائي هاتفيا معاتبا لي عدم ذكري التفاصيل التقنية في القصتين التي ذكرتها في الموضوع , مستندا على أني شخص تقني و يجب أن أتحدث بلغته لكي أضيف المزيد من الفائدة لمقالي و خصوصا للمبرمجين .
أحاول دائما أن أتجنب الدخول في أعماق التقنية لان مدونتي عامة و ليست متخصصة في التقنية و لذا فأن شريحة القراء التقنيين النهمين ليسوا هم الشريحة المستهدفة , لذا لم أحب أن أقوم بتضييع وقت القراء بأمور لربما هم في غنى عنها
و لكن لا ضير من بعض التفاصيل التقنية و التي سوف أشرح بها العمل أو الحل التطبيقي و لن أدخل في الأعماق أكثر – أكواد – لان الهدف هو توضيح للمشكلة و وضع تصور للحل
القصة الأولى (شركة التجزئة و طباعة الباركود)
أغلب متاجر التجزئة المتوسطة و العملاقة بدئت في الاعتماد على التقنيات الحديثة مثل (POS) و هي اختصارا (Point of Sale) و ترجمتها العربية (وحدة بيع) , فمحلات التجزئة الكبيرة تحتوي على عشرات الممرات و التي يتواجد عليها موظف مزود بمجموعة من الأجهزة الكفيلة في إتمام عملية البيع بسهولة عليه كبائع و بسرعة لكي لا ينتظر المشتري طويلا
و من أهم هذه الأجهزة هو جهاز قارئ الباركود و الملحق بوحدة كمبيوتر مرتبطة عبر شبكة بتطبيق مخصص للبيع , و بما أن كل مادة مسجلة في النظام لديه و معرف بيان سعرها و كذلك الحال رقم تعريف الباركود الدولي الوحيد الخاص بكل مادة , فبمجرد مرور رقعة الباركود أمام القارئ (Barcode Tag) فانه يعطي الكمبيوتر رقم المنتج الوحيد للبحث عنه في قاعدة البيانات و استحضار كامل بياناته الأخرى و الأهم هنا (اسم المنتج – و سعره)
السؤال الأول:لماذا يحتاجون إلى طباعة الباركود بما أنه متواجد تقريبا بشكل افتراضي على كافة البضائع من المصنع؟
الجواب : بسبب أن هناك نسبة قليلة من البضائع ليس عليها رقعة باركود و لكن ليس هذا هو الهدف بل الهدف هو عند عمل العروض الترويجية, فبالعادة هذه المحلات تقوم بعمل عروض ترويجية لبعض المنتجات على حساب منتجات أخرى , مثلا لو قلنا أنها تود أن تقوم بتصريف مخزون من علب الحليب طويلا الأجل قبل انتهاء صلاحيته بـ 3 أشهر فعليها إما أن تخفض سعره و بهذه الحالة يعني تخفيض السعر في النظام و هذا كفيل في وجود خطاء لان النظام لا يفرق بين علب الحليب التي قاربت مدتها على الانتهاء أو بين الأخرى الجديدة فكلها تملك نفس الرقم المصنعي!, ماذا لو قاموا بدمج منتج أخر مثلا , بسكويت قارب على الانتهاء أيضا و يباع الاثنان معا بسعر مخفض , فهل سوف يتم حساب كل منتج على حدا ؟
بسبب الحالتين السابقتين نحن بحاجة لملصقات البار كود ,بالطبع هناك حالات أخرى و لكن هذه هي الأهم , فمن الممكن أن يتم تعريف صنف جديد باسم (حليب طويل الأجل), مع إضافة كلمة (مخفض) ,و تعريف سعر جديد برقم جديد و يتم وضع رقعة الباركود الجديدة المطبوعة ,على الرقعة الأصلية للحليب , أو في حال تم دمج الصنفين مع بعضهما البعض فيتم وضع ملصق, أو غلاف بلاستيكي خارجي ,و يتم وضع الملصق عليه ,و الذي هو تعريف لمادة جديدة مثلا (عرض ترويجي رقم 222)
الآن فهمنا السبب , فلنبداء في المزيد من التحليل ..... ماذا نحتاج لطباعة الملصق؟
طابعة باركود , و بالمناسبة فإن أي طابعة هي طابعة باركود فالطابعة تقوم بطباعة مع يوجه لها من الجهاز و لا يعني هذا أن طابعات الباركود تطبع فقط باركود, بل هي طابعات عادية, بمقاس ورق أصغر, و تفاصيل فنية مخصصة, بشكل تخدم طباعة ملصقات رقع الباركود ( Barcode Tag sticker) بشكل أفضل
ماذا نحتاج أيضا ؟
نحن بحاجة إلى البيانات التي سوف تطبع و برنامج وسيط ليترجم هذه البيانات إلى رقعة باركود و يقوم بإرسالها للطابعة لطباعتها
بالعودة إلى مثالنا و عند البحث وجدت أن قاعدة البيانات الخاصة بالمحل هي قاعدة بيانات (MS SQL Server) و عندما تم الدخول عليها بحساب الادمين الخاص بالسيرفر , وجد أنه يوجد الكثير من الجداول في النظام و التي تحتوي الكثير منها على نفس البيانات ,كما انه لا يوجد توثيق للنظام ,أو علاقات واضحة بين الجداول ,فلذا تم الطلب منهم تعريف مادة جديدة في النظام الفعلي تحت مسمى (badwi999) ,و تم تحليل الجداول و ملاحقة العلاقات حتى تم إيجاد المكان (الجدول), الذي احتاج منه إلى معلوماتي, (سعر البيع + رقم المنتج + رقم تعريف المنتج المصنعي + اسم المنتج)
ألان لو قمت بإتمام العمل فكل ما كان علي القيام به هو عمل هذا التطبيق البسيط الذي سوف يحتوي على شاشة بها مربعين إدخال (نص) و زر أمر فقط , فمربع النص الأول مخصص لإدخال رقم المادة المطلوبة (يدويا أو بواسطة الباركود) و المربع الثاني (لعدد الملصقات التي نود طباعاتها) و بشكل افتراضي يحتوي المربع الثاني على مجموع الأصناف المتواجدة بالمخزن و يمكن للشخص تغييره للرقم الذي يريد , و بالطبع هذه البيانات يتم الوصول لها فقط للقراءة عبر اتصال مع قاعدة البيانات بواسطة ADO (أو بتقنية RDO في ذلك الوقت) لتنفيذ استعلام بسطر واحد للحصول على بيان المنتج المراد عبر رقم التعريف الخاص به
عند الضغط على الزر هناك شاشة تقوم بتأكيد الشكل النهائي الذي سوف تظهر عليه الرقعة (بيانات الصنف) و بمجرد التأكيد ترسل البيانات إلى الطابعة بعدد مرات الطباعة و الباقي على الطابعة
ولا أبسط من ذلك , فحرفيا هذا التطبيق لن يحتاج مني إلى أكثر من ساعة عمل حاليا و لربما في ذلك الوقت كان يحتاج إلى حوالي 5 أيام بسبب حاجتي لبناء (عنصر رسم الباركود) و لكنه الآن متواجد و جاهز لدي فلا حاجة لبنائه , فهل التطبيق يستأهل (خمسة ألاف ريال) ؟ أم أني كنت طماعا في ذلك الوقت و طلبت الكثير : )
القصة الثانية (تبديل نماذج أوراكل ORACLE Form ) إلى نماذج (ASP)
كانت هذه الشركة تقوم ببناء تطبيق يتم الدخول عليه من 7 مواقع مختلفة موزعة داخل مدينة الرياض و يتم استخدام الانترنت كوسيط للدخول على السيرفر الذي يحتوي على التطبيق و بما أن اكبر سعة للانترنت في ذلك الوقت كانت 1 أو 2 ميجا فقط فلم تكن كافية لدخول جميع الأطراف على النظام في نفس الوقت , بل أن أي طرف سوف يقوم بالدخول على النظام وحيدا كان يأخذ منه الكثير من الوقت للعرض و التنفيذ
المشكلة الثانية هي أن شاشات النظام كانت قد بنيت بواسطة ORACLE Developer Form و كانت تستخدم هذه الشاشات لإدخال البيانات و استرجاعها فقط و باقي الحمل و العمل يتم داخل محرك قاعدة البيانات و المخزن بشكل (Stored Procedure) , لتنجح العملية أنت بحاجة إلى تحميل (Forms Developer 6i Patch 2) و الذي بدوره يقوم بتمكين النموذج من العمل كتطبيق ويب بواسطة تقنية (IAS) اختصارا لي (Internet Application Server) و ما يتم فعله تقريبا هو توفير طبقة (Layer) تعمل بواسطة (Java Applets) تمكن تحويل نماذج أوراكل لتمكينها من العمل بنفس الشكل على الويب
المشاكل هي أنه و عند الانتقال من أي عنصر (مربع نص مثلا) إلى أخر يتم تنفيذ سلسلة من الأحداث (قبل انتقال المؤشر) (Pre Query) للعنصر و (بعد خروج المؤشر) (Post Query) و الكثير من الأحداث (Triggers/Events) الأخرى التي تتم على مستوى تحرك مؤشر الفأرة أو ضغطات لوحة المفاتيح و كل من هذه العمليات تؤدي بسلسلة من الأحداث من و إلى السيرفر مما تزيد الحمل و تؤخر انتقال المؤشر من مكان إلى أخر , كما أن هناك مشكلة أخرى قد تواجههم ألا و هي حاجتهم للذهاب إلى المواقع السبعة لتركيب آلة جافا الافتراضية (JVM) ترجمة (Java Virtual Machine ) على الأجهزة لتتمكن تطبيقات (Java Applets) من العمل
الحل ببساطة هو بتركيب خادم معلومات انترنت (IIS) على نفس الشبكة و يتم استضافة صفحات انترنت مبرمجة بتقنية (ASP) اختصارا (Active Server Page) أو حتى (PHP) و لكني كنت متقنا للـ (ASP) فقط في ذلك الوقت , وظيفة هذه الصفحات العمل كطبقة (Layer) أو واجهة لإدخال و استرجاع البيانات الموجودة في قاعدة بيانات أوراكل (ORACLE Database)
حيث أن تطبيق الويب يقوم بعمل التنفيذ على جهة السيرفر (Server Side) و يعطي المستخدم جهة العميل (Client Side) صفحة (HTML) فأنت بحاجة فقط إلى متصفح انترنت , و بما أنه يقطع الاتصال بك بمجرد استلامك للصفحة فهذا يعني أنه لا مزيد من التحميل على السيرفر و بمجرد انتهائك من تحديث البيانات فانك تقوم بإرسالها كدفعة واحدة للمعالجة داخل السيرفر بواسطة الـ (Stored Procedure) و بهذا تكون استفدت من قوة أوراكل كقاعدة بيانات و استفدت من ميزة (ASP) كصفحات انترنت
إن أضجرتكم بهذه المعلومات التقنية الكثيرة فسامحوني , و إن أفدتكم بها فأخبروني : )