בניית דוחות בפריוריטי – חלק 1

שלום לכולם וברוכים הבאים לאתר ולבלוג.

הבלוג יעסוק באפיון ופיתוח לפריוריטי בתקווה שהמידע הזה יועיל לרבים מאיתנו. אני מתכוון לפתוח בסדרת מאמרים העוסקת בבניית דוחות. בתחתית הדף תוכלו לספר לי מה דעתכם, להציע הצעות וכו'. אתם יכולים להשתמש במעטפה בצד שמאל למעלה כדי לשלוח לינק למאמרים לקולגות שלכם.

 

מדוע כדאי לדעת לפתח דוחות בפריוריטי ?  ובכן, התשובה היא מאוד פשוטה. האם המעגל הבא מוכר לכם ?הבוסים שלכם שואלים אתכם , או שאתם שואלים את עצמכם שאלה עסקית. חופרים קצת בבעיה, ומגיעים למסקנה שצריך לפתח דוח חדש. מזמינים אפיון, לוקח שבוע, שבועיים עד שמסכימים על האפיון ועל המחיר, מושיבים תוכניתן,  עוד שבועיים חולפים והוא מוציא גרסה ראשונה של הדוח, עד שאתם מספיקים למצוא כמה באגים בדוח או באפיון הוא נסע למילואים ויחזור רק עוד חודש. בסוף הוא חוזר,יושב עוד שבוע על הריג'קטים ובשעה טובה הדוח מוכן. אחרי מבט קצרצר, פתאום צצה לה שאלה חדשה,  ושוב כל הסיפור מחדש. חוץ מהתסכול הרב הנובע מהידיעה שהמידע הדרוש לכם נמצא אי שם בנבכי המערכת, גם לא מעט כסף כרוך בכל איטרציה כזו. מטרת המאמרים הללו היא לחסוך לכם את התסכול, ואת העלות הרבה הכרוכה במעגל הקסמים הזה. לתת לכם, המשתמשים, את היכולת לדלות מתוך המערכת את המידע הנחוץ לכם בכוחות עצמכם.
 
לפתח דוחות זה קל.
אם תעקבו  אחר השיטה שאפרט בהמשך. לפני שתסיימו לקרוא את המאמר, אתם תסיימו לפתח את הדוח הראשון שלכם. עם זאת, חשוב להפנים שדוח יכול לעיתים להגיע לרמת מורכבות גבוהה. הדוחות הראשונים שלכם יהיו בדרך כלל פשוטים וטריוויאליים, אך ככל שתתמידו, ותרכשו ניסיון, זה יהפוך קל יותר, מהנה יותר, ורמת מורכבות הדוחות שלכם תעלה. התועלת היא עצומה: סברות ותחושות בטן – OUT.  מציאות ועובדות – IN.

הכנות
עליכם להעתיק או לבקש מאנשי הסיסטם שלכם להעתיק את סביבת ה-Production לסביבת פיתוח בה תפתחו את הדוחות שלכם. לעיתים קרובות מדי אני נתקל בתוכניתנים עזי נפש שמפתחים על מערכת ה Production . כמו עישון סיגריות, זה הרגל מגונה, קשה להפטר ממנו וכל מי שעושה את זה מתישהו מצטער שהוא בכלל התחיל. למה ? כי הפריוריטי היא ברוב המקרים עורק המידע העיקרי בחברה ואף אחד לא היה רוצה למצוא את עצמו בסיטואציה שבה הוא אחראי ל"בעיות באספקת חמצן". כאשר אתם מפתחים דוחות אתם יכולים לגרום לתקלות. על אחת כמה וכמה כאשר אתם לומדים את הנושא.

שנו את שם האייקון של סביבת הפיתוח  ל"פריוריטי- סביבת פיתוח" או כל שם אחר פרי דמיונכם הקודח, כדי למנוע בלבול עם סביבת האמת.
היכנסו לסביבת הפיתוח עם שם המשתמש tabula אם הפריוריטי שלכם עובד על SQL Server או Oracle. אם הפריוריטי עובד על Tabula, כנסו עם שם המשתמש Manager. עליכם לקבל את הסיסמאות ממנהלי המערכת אצלכם בחברה.
היכנסו למסך מנהל המערכת > תחזוקת מערכת > טיפול בחברות > חברות. שנו את צבע כל החברות לצבע מזעזע ככל שניתן אשר לא קיים באף חברה מהחברות בסביבת ה Production. בדקו איזו חברה מסומנת בדגל "משאבי אנוש". סגרו את המסך ועברו לחברה שמצאתם.
היכנסו למסך מנהל המערכת > תחזוקת מערכת > משתמשי מערכת > משתמשי מערכת, שלפו את שם המשתמש שלכם ועדכנו את ראש הקבוצה שלכם להיות tabula אם הפריוריטי שלכם עובד על בסיס נתונים SQL Server או Oracle. מי שהפריוריטי שלו עובד על בסיס הנתונים tabula צריך לרשום בראש הקבוצה את השם Manager.
עברו לעמודת מס. עובד, לחצו פעמיים F6, נכנסתם לכרטיס העובד. עברו ללשונית "הרשאות" וסמנו את כל הדגלים בלשונית. סגרו את המסך.

פתחו משתמש חדש באמצעות: מנהל המערכת > תחזוקת מערכת > משתמשי מערכת > הוספת משתמש חדש. תנו לו את השם temp.
שנו את סיסמת המשתמש שלכם ואת סיסמת מנהל המערכת (tabula או Manager) באמצעות הפרוצדורה: מנהל המערכת > תחזוקת מערכת > משתמשי מערכת > שנוי סיסמאות. צאו מהמערכת והיכנסו מחדש.
 
לחץ להגדלה 
 הריצו את הפרוצדורה: מנהל המערכת > מחוללים > פרוצדורות > סביבת פיתוח SQL. נפתח לכם חלון שכותרתו Tabula SDK. הדביקו את הטקסט הבא בחלק הלבן של החלון.
UPDATE SYSCONST SET VALUE = 1 WHERE NAME = 'ESHBAL';
בתפריט הנמצא בראש החלון לחצו על Execute>SQL interpreter. אתם אמורים לקבל את ההודעה : Execution OK. סגרו את החלון. לחצו  No בהודעה שנפתחה. אנחנו מוכנים להתחיל.
 
 
 
 
 
 
הדוח הראשון שלנו
ההכנות הסתיימו, ואנחנו מתחילים בבניית הדוח הראשון שלנו. הדוח שלנו צריך לשמש כלי לבקרה על אספקת הזמנות לקוח. אוכלוסיית הדוח היא הזמנות לקוח פתוחות. עמודות הדוח הרצוי הן: תאריך אספקה, מספר לקוח, מספר הזמנה, מק"ט ויתרה לאספקה. הדו"ח ימוין לפי תאריך אספקה בסדר עולה. הקלטים לדו"ח יהיו: תאריך אספקה, מספר לקוח, ומק"ט. כלומר יהיה ניתן להפיק את הדו"ח לפי אחד או יותר מהחתכים הללו.
 
טבלאות על קצה המזלג. בסיס הנתונים של הפריוריטי בנוי מאוסף של טבלאות. טבלה מכילה נתונים אודות פרטים בעלי מכנה משותף. לדוגמא: "פריטים", "לקוחות", "ספקים", "אנשי קשר", "הזמנות", "מחסנים", "סניפים". כל טבלה מורכבת מאוסף של עמודות. העמודות מאחסנות את המידע על אותו פרט שהטבלה מייצגת. במקרה של לקוח, העמודות של טבלת לקוחות הן שם הלקוח, מספרו, כתובתו וכו'. רק לצורך ההמחשה, דמיינו קובץ אקסל המכיל גיליון "לקוח", גיליון "פריט" ,גיליון "מחסן" וכו'. המידע בכל גליון מסודר בעמודות. לדוגמא: בגיליון הלקוח נמצא את עמודת מספר לקוח, עמודת כתובת, עמודת טלפון וכו' . לכל לקוח שורה יחידה בגיליון. בשביל למצוא את מספר הטלפון של לקוח ספציפי אנחנו צריכים לעמוד על השורה שלו ולעבור לעמודת "מספר טלפון". כך, עקרונית, מאוחסן המידע בפריוריטי. רק שהוא אינו מאוחסן באקסל, אלא בבסיס נתונים (Data base). נרחיב עליו בהזדמנות אחרת.

כדי שנוכל לדבר בשפה משותפת עלינו לשחזר את תצוגת ברירת המחדל של מסך "פירוט הזמנות לקוח פתוחות". (אם אתם רוצים לשמור על האפשרות לחזור לעיצוב הנוכחי, העתיקו למשתמש temp את העיצוב של המסך באמצעות התוכנית: מנהל המערכת > תחזוקת מערכת > עיצוב מתקדם > תוכניות עזר > העתקת עיצוב של מסכים. בסיום הפיתוח העתיקו חזרה את העיצוב למשתמש שלכם). כנסו ל- שווק ומכירות > הזמנות > פירוט הזמנות לקוח פתוחות. לחצו קליק ימני על שטח כלשהו במסך, בחרו ב"עיצוב שדות" ,לחצו על הכפתור "שחזר ברירת מחדל".

 
כנסו למסך מחולל המסכים. לא, זו לא טעות. מחולל המסכים הוא הכלי שבאמצעותו בונים מסכים בפריוריטי.
לחץ להגדלה 
הוא גם משמש אותנו לזיהוי הנתונים המוצגים במסכים מול המקור שלהן בטבלאות. המסך נמצא ב- מנהל המערכת > מחוללים > מסכים > מחולל מסכים. החדשות הטובות הן שהמחוללים הם מסכים רגילים לכל דבר ועניין. ממשק המשתמש במחוללים הוא זהה לחלוטין לממשק בשאר מסכי המערכת.  הערה חשובה: הזהרו לא לבצע שום שינוי במסך מחולל המסכים אלא אם כן אתם יודעים מה שאתם עושים. שינוי של נתון כלשהו יכול לגרום לקלקול של מסך. שלפו את מסך "פירוט הזמנות לקוח פתוחות" באמצעות החיפוש בעמודת "שם המסך".  נשים לב לעמודה במחולל "טבלת יסוד". כשמה כן היא. המסך מבוסס על טבלה זו. נפרט על התפקיד המיוחד שלה בהמשך כשנעסוק בקישורים בין טבלאות.
 
 
 
 
לחץ להגדלה 
נרד למסך הבן "עמודות המסך" (הראשון מימין). כל שורה מגדירה שדה ב"פירוט הזמנות לקוח פתוחות". אנחנו נשנה קצת את סדר העמודות לשם הנוחות. לחצו קליק ימני בעכבר על שטח ריק בתוך "עמודות המסך", ובחרו "עיצוב שדות". סדרו את השדות בסדר הבא: "כותרת", "כותרת חדשה", "עמודת טבלה", "שם טבלה", "מזהה עמודה", "עמודת חיתוך", "טבלת חיתוך", "מזהה חיתוך", "עמודת מסך" ו-"מיקום". התוכן  של העמודות הראשונות: "כותרת" ו"כותרת חדשה", אמור להיות מוכר לכם ממסך "פירוט הזמנות לקוח פתוחות" כאשר הוא מופעל מהתפריט. מה משמעות העמודה: "כותרת חדשה" ? לכל עמודת טבלה במערכת יש כותרת ברירת מחדל והכותרת שלה היא עמודת "כותרת".  לעיתים קרובות מי שבונה את המסך זקוק לכותרת אחרת מכותרת ברירת המחדל. או שלפעמים השדה במסך מבוסס על חישוב כלשהו ולא על עמודת טבלה ספציפית. הכותרת האחרת נרשמת בעמודת "כותרת חדשה". הכלל הוא כזה: אם יש ערך בעמודה "כותרת חדשה" זהו שם השדה המופיע במסך(הרגיל, לא המחולל). אם אין ערך, מופיע במסך הערך הרשום בעמודת "כותרת".  "עמודת טבלה" ו-"שם טבלה" מכילות את שמות העמודה והטבלה אשר מהן מגיעים הערכים המוצגים במסך. נכון. ישנן שורות שלא רשום בהן כלום ב"עמודת טבלה" וב-"שם טבלה". אלו עמודות חישוביות. נעסוק בהן בהמשך.

חדי העין ודאי מבחינים כי במסך "פירוט הזמנות לקוח" משתתפות טבלאות רבות. מסך וטבלה הם שני מגרשי משחקים שונים. לכל מסך יש טבלת יסוד שהיא הטבלה העיקרית עליה הוא מבוסס. אך הוא גם מציג נתונים מטבלאות אחרות . איך זה מתבצע? ניקח לדוגמא את הקשר בין הזמנות לקוח ללקוחות. נתוני ההזמנות נרשמים בטבלת הזמנות הלקוח, ואילו נתוני הלקוחות נרשמים בטבלת הלקוחות. בטבלת ההזמנות יש עמודה מיוחדת שרשומים בה מספרי הלקוחות בלבד של כל הזמנה והזמנה. לרוב, מספרים אלו אינם מוצגים למשתמש. מספרו הפנימי של הלקוח שונה ממספרו החיצוני(זה שמוצג במסכים השונים). המערכת מקשרת את מספר הלקוח מההזמנה עם מספר הלקוח בטבלת הלקוחות ומציגה את נתוני הלקוח בכל רשומת הזמנה. גם קשרים אלו מוגדרות ב"עמודות המסך". נסביר איך למצוא אותם בהמשך.

 
לחץ להגדלה 
הכנסו למחולל הדוחות. הוא נמצא ב: מנהל המערכת > מחוללים > דו"חות > מחולל דו"חות. השאירו את מחולל המסכים פתוח. בעמודה "שם דוח" רשמו את שם הדוח הפנימי. שם הדוח חייב להתחיל באות ויכול להכיל רק מספרים ,אותיות וקו תחתי. דוחות פרטיים צריכים להתחיל ב 4 תווים וקו תחתון. לשם הדוגמא: רשמו את השם: PFOR_ORDERSDUEDATES.  בעמודה כותרת רשמו את הכותרת: "דוח אספקת הזמנות לקוח". זה השם שיופיע בתפריט. בעמודת יישום רשמו:  "PFOR", ובשם המודול בחרו ב "פיתוח פרטי".
עברו למסך הבן "עמודות הדו"ח". כל שורה במסך מגדירה עמודת בדוח שאנחנו מפתחים. אנחנו נכיר את המסך תוך כדי בניית הדוח שלנו. גם פה נשנה את סדר  העמודות. לחצו קליק ימני בעכבר על שטח ריק בתוך "עמודות הדוח", ובחרו "עיצוב שדות". סדרו את השדות בסדר הבא: "כותרת", "כותרת חדשה", "עמודת טבלה", "שם טבלה", "מזהה עמודה", "עמודת חיתוך","טבלת חיתוך", "מזהה חיתוך" ,"קלט", "הסתרת עמודה", "ע. מיון", "סדר עולה/יורד", "מיקום".

 
לחץ להגדלה 
כדי שהדוח יציג את הנתונים הרצויים, אנחנו צריכים למצוא את הטבלה ואת העמודה של כל עמודת דוח. לשם כך, נחזור למחולל המסכים. עברו לשורה שכותרתה: "מס. לקוח".  העתיקו את "עמודת טבלה" ו"שם טבלה" ממחולל המסכים למחולל הדוחות בהתאמה.  שימו לב שהכותרת "מס. לקוח" נכנסה אוטומטית במחולל הדוחות בעמודת "כותרת". גם כאן קיימת עמודה "כותרת חדשה" המשמשת לשינוי כותרת ברירת המחדל.  יש הרבה דמיון בין שני המחוללים. סמנו את הדגל "קלט" כדי ש"מס. לקוח" יופיע בחלון הקלט לדוח. בעמודת מיקום הכניסו את הערך 10. עמודה זו קובעת את סדר הצגת עמודות הדוח מימין לשמאל (או משמאל לימין אם אתם עובדים באנגלית). אני אוהב לתת מרווחים של 10 בין עמודה אחת לחברתה כדי שאוכל לשחק בסדר הצגת העמודות בצורה נוחה. אבל אפשר לתת כל מספר בין 1 ל 999. נרד שורה במחולל הדוחות ונחזור על הפעולה שנית עבור השורה במחולל המסכים שכותרתה "הזמנה". כאן לא נסמן את "קלט" כי איננו רוצים שמספר הזמנה יופיע כקלט לדוח. הפעם רשמו במיקום את המספר 20. נחזור על הפעולה כדי להכניס את שאר עמודות הדוח.
 
סיימנו להגדיר את עמודות הדוח, אך יש עוד עבודה. עלינו להגדיר את הקשרים בין הטבלאות המשתתפות בדוח. כלומר להצליב בין עמודות טבלאות כמו בדוגמא על הקשר בין לקוחות והזמנות. הטבלאות המשתתפות בדוח רשומות בעמודה שם טבלה שהעתקנו. אין חשיבות למספר הפעמים שטבלה מופיעה. בדוגמא שלנו, אנו צריכים לקשר את הטבלאות ORDERITEMS, CUSTOMERS, ORDERS ו- PART. גם את הקשרים הללו אנו נעתיק ממחולל המסכים. נחזור למחולל המסכים ולמסך הבן "עמודות המסך".
 
לחץ להגדלה 
ניתן לראות שטבלת היסוד של המסך היא ORDERITEMS – טבלת פירוטי ההזמנות. מספר ההזמנה – ORDNAME, לעומת זאת מאוחסן בטבלת ORDERS – טבלת כותרות ההזמנות. נבצע שאילתה על "עמודות המסך" ונרשום ב"טבלת חיתוך" את ORDERS. ביצוע השאילתה הציג שורה יחידה. השורה מציגה את עמודת הטבלה ORD  מטבלת  ORDERITEMS. תפקידה של עמודה זו הינו, לאחסן בכל שורת הזמנה את מספר ההזמנה אליה היא קשורה. שימו לב ל"עמודת חיתוך" ו"טבלת חיתוך". עמודת ORD בטבלת ORDERS מכילה את המספרים המזהים של ההזמנות. כך מתבצע קישור בין שתי טבלאות במחולל המסכים. הדגל "הסתרת עמודה" בשורה זו מסומן. כי זה לא מעניינו של המשתמש לדעת מהו המספר הפנימי של ההזמנה.

 
 
 
 
לחץ להגדלה 
הקישור במחולל הדוחות עובד בדיוק באותו אופן. העתיקו את הנתונים הרשומים תחת "עמודת טבלה", "שם טבלה", "עמודת חיתוך", "טבלת חיתוך" מהשורה במחולל המסכים לשורה חדשה במחולל הדוחות. סמנו את הדגל "הסתרת עמודה" והכניסו ערך כלשהו בעמודת מיקום. (אני נותן לכל העמודות המוסתרות את אותו מספר).
עתה נקשר את טבלת PART אשר "תורמת" לדוח שלנו את עמודת המק"ט – PARTNAME. נחזור למחולל המסכים למסך הבן "עמודות המסך". נבצע שאילתה ונרשום PART ב"טבלת החיתוך" . ביצוע השאילתה החזיר שורה בודדת. העתיקו את הנתונים הרשומים תחת "עמודת טבלה", "שם טבלה", "עמודת חיתוך", "טבלת חיתוך" למחולל הדוחות,  הסתירו את העמודה באמצעות סימון "הסתרת עמודה", ורשמו מספר כלשהו ב "מיקום".
נחזור על הפעולה עבור טבלת CUSTOMERS אשר תורמת לדו"ח שלנו עמודת מספר הלקוח. כשנבצע את השאילתה נמצא ש "שם הטבלה" הוא ORDERS.  זאת אומרת הקישור של  CUSTOMERS "עובר" דרך טבלת ההזמנות ולא ישירות מטבלת פירוטי ההזמנות – ORDERITEMS. מדוע ? כי לכל הזמנה יש לקוח יחיד ולכן אין טעם לאחסן את מספרו הפנימי בכל שורת הזמנה. את הקישור של שורות ההזמנה לכותרת כבר ביצענו.

 

לחץ להגדלה 
כאשר עולים למסך האב הראשי במחולל הדוחות מופיעות, באיזור של ההפעלות הישירות מספר פרוצדורות. הראשונה מימין היא "הרצת דו"ח/פרוצדורה". היא משמשת אותנו להרצת הדוח מתוך המחולל. כשבונים דוח, זה מאוד לא נוח לחזור לתפריט בשביל כל הרצה שלו, ולכן הפרוצדורה הזו מאוד שימושית. אם נפעיל את הפרוצדורה, הדוח שלנו יציג את כל שורות ההזמנות במערכת, כולל הסגורות. אם כמות השורות מגיעה לכמה אלפים, ייתכן שלאחר ההרצה, תתקבל הודעת חיפוש כבד במסד הנתונים, והדוח ייפתח רק לאחר דקות ארוכות.
איך מגבילים את הדוח להציג רק שורות הזמנות פתוחות ? ובכן, אני אגלה לכם שיש עמודה ששמה CLOSED בטבלת ORDERITEMS – טבלת פירוטי ההזמנה. נמצא את השורה שמגדירה אותה  במחולל המסכים. שימו לב שזו עמודה מוסתרת במסך. נעמוד  עם הסמן העל השורה של CLOSED ונרד למסך הבן (נכד ביחס למסך האב הראשי) : "עמודות המסך – הרחבה".  בשדה "ביטוי/תנאי" נמצא את הביטוי  'C' <>. הסימן <> משמעותו – "שונה מ". המסך מציג רק שורות פתוחות, ולכן אנו מסיקים ששורה ב ORDERITEMS אשר מופיעה בה האות C בעמודה CLOSED ,היא בעצם שורה סגורה. המסך מציג את כל השורות ב OREDRITEMS שהעמודה CLOSED בהן אינה מכילה את האות C.
 

לחץ להגדלה 
העתיקו את השורה ממחולל המסכים למחולל הדוחות כפי שביצענו לשאר עמודות הדוח. נסמן את דגל "הסתרת עמודה" במחולל הדוחות, נרשום
מספר כלשהו בעמודת "מיקום", ונרד למסך הבן "עמודות הדו"ח-הרחבה " (נכד של המסך הראשי). את התנאי הרשום ב "עמודות המסך- הרחבה" בשדה "ביטוי/תנאי" נעתיק לשדה "ביטוי/תנאי" ב"עמודות הדו"ח-הרחבה".  נצא מ"עמודות הדו"ח-הרחבה" ומ "עמודות הדו"ח" ונריץ את הדוח באמצעות ההפעלה הישירה "הרצת דו"ח פרוצדורה".
 
 
 
 
 
 
 
 נקודה אחת עדיין חסרה – איך הייתם אמורים לדעת על קיומה עמודה CLOSED אלמלא סיפרתי לכם אודותיה ? במאמר הבא נדון בכך.
 
 
לחץ להגדלה 
כעת נקשר את הדוח לתפריט. דרך התפריט הראשי, הגיעו לתפריט בו אתם מעוניינים למקם את הדוח. לחצו על F6 לפתיחת מחולל התפריטים. עיברו למסך הבן "הרצות התפריט". הכניסו שורה חדשה. רישמו את המיקום אשר קובע את סדר הצגת הפריטים בתפריט, תחת "שם ישות" הכניסו את שם הדו"ח הפנימי – PFOR_ORDERSDUEDATES,  רשמו R תחת "טיפוס" על מנת לציין שמדובר בדו"ח  וצאו מהמסך.
 
 
 
 
 
 

לחץ להגדלה 
עכשיו כבר אפשר להפיק את הדוח מתוך התפריט שבחרנו. הריצו את הדוח כדי לוודא שהוא עובד בצורה תקינה. כשנריץ את הדוח, נקבל את התוצאה הבאה:
אל תתנו לפשטות הדוח להטעות אתכם. באמצעותו רכשנו מושגי יסוד הכרחיים בדרך להפקת דוחות מורכבים ויפים הרבה יותר.
 
 
 
 
 
 
 
   
 
בפורום הפיתוח פה באתר, נוכל לקיים דיון חופשי בנושא המדריך הזה בפרט, ובכל נושא טכני הקשור בפריוריטי בכלל. אשמח לענות לשאלות הגולשים.
בהצלחה.
0
0