SAP ABAP QUERY
הי חברים ,
פתחתי את האפשרות לכתוב תגובות, אשמח לשמוע את תגובתכם הארות והערות נוספות.
שימו לב המדריך הבא להקמת שאילתות ב- SAP QUERY קיבלתי אותו לפני כמה שנים מבחור שעבד איתי (סליחה אבל איני זוכרת את שמו..) והוא מאוד מאוד עזר לי , אני משתפת אותו איתכם , מקווה שתהנו :)
מה זה SAP QUERY ?
מדובר במנגנון לבניית דו"חות פשוטים באופן קל , ברור ומובנה ללא צורך בהתערבות של תוכניתן.
אבל קיימת אפשרות להוספת קוד ע"י המיישם - במידה ויש לו ידע בסיסי בכתיבת קוד ב- ABAP.
הנתונים מוצגים בתצוגת ALV סטנדרטית של SAP כולל פונקציות של הוצאה לדוח EXCEL או הורדה לקובץ.
כדי לבנות SAP QUERY יש צורך פעולות עיקריות :
- יצירת קבוצת משתמשים – קבוצת משתמשים נועדה כדי לשייך דו"חות לפי קבוצה של משתמשים. משתמש שרוצה להשתמש ב QUERY חייב להימנות על הקבוצה של ה QUERY.
- INFOSET - בחירת טבלאות והנתונים עבור הדוח .
- יצירת QUERY מתוך ה- INFOSET .
- יצירת טרנסאקציה לקשירת הדוח לטרנסאקציה .
דרישות קדם לפני בניית הדוחות :
הכרת DATA DICTIONARY – SE11 כדי לדעת אילו נתונים להביא. כמו כן ידע בסיסי
בתכנות עשוי לעזור בעת הוספת שדות שלא נמצאים בהכרח בטבלאות שבוחרים מהם. באם חסר
ידע רצוי להיעזר במפתח במיוחד בנושא ה INFOSETS שהוא נושא טכני.
כמה הערות חשובות :
INFOSETS אפשר לבנות בשני אופנים : STANDARD AREA ו GLOBAL AREA.
כדי לקבוע באיזה סביבת עבודה אנו עובדים ניגשים למעלה לתפריט ENVIRONMENT ובוחרים ב QUERY AREAS וזאת בכל אחת משלושת הטרנזקציות – SQ01 – SQ02 – SQ03.
ההבדל ביניהם הוא שה GLOBAL AREA עובד על Cross-clinet ויוצר request ואילו ה STANDARD לא דורש request בכלל!!! כלומר אפשר ב PRODUCTION לבנות QUERY מאפס.
יש לשים לב שאם אנו למשל ב-GLOBAL אנו לא נראה את הדברים ששייכים ל STANDARD כך שאם פתאום נניח ב SQ02 לא רואים את רשימת ה INFOSETS יכול להיות שנדרש לעבורAREA.
יצירת INFOSET - כניסה ל - SQ02
נרשום ב INFOSET את שם ה INFOSET שאנו רוצים : למשל בדוגמא זה ZZ_GL_DETAIL:
אפשר ליצור בכמה דרכים:
1.
JOIN.
2.
טבלה אחת.
3.
LOGICAL DATABASE.
4.
לפי תוכנית : וזה אומר שה infoset
פונה לקוד כדי להביא נתונים.
a) בנייה לפי LOGICAL DB : זה אומר שיש לנו כבר מעין
"תוכנית קדם" שלמעשה מכינה את הנתונים ומביאה אותם באופן שכבר מתאים לנו
– זה ממש מאגר נתונים קטן שבנוי מכמה טבלאות בעלות קשר מסויים.
נבחר SDF שזה DB של G/L.
עכשיו ניצור את קבוצת השדות שאנו רוצים לראות את הנתונים
שלהם בדו"ח :
לוחצים בחלון הימני העליון על 'צור' – ונקבל חלון ליצירת קבוצות של שדות (FIELD GROUP)
ניצור שתי קבוצות : A1, A2
כך נראות שתי הקבוצות החדשות :
עתה נרצה לשייך את השדות שלנו. נניח שאנו כרגע רוצים נתונים
מ SKA1 שזה נתוני MASTER. בצד שמאל
אפשר לסמן את השדות שאנו רוצים להוסיף:
הערה : ב logical DB כדאי לבחור את השדה מהטבלה שיש בה את
השדה ושממוקמת הכי גבוה בהיררכיה של ה DB –
שכן אם נבחר מהיררכיה נמוכה – יותר, אנו עלולים להיתקל במספר מופעים של השדה
בדו"ח.
הוספת שדות חיצוניים שלא נמצאים ב DB שבחרנו :
כדי לעשות זאת נלחץ בצד שמאל על הטבלה שאנו רוצים להוסיף לה
שדות ( למשל נלחץ על SKA1 ) ואז
נלחץ על כפתור 'EXTRAS'
נלחץ על כפתור 'חדש' נקבל חלון ונבחר להוסיף
בו את טבלת SKAT:
נקבל חלון של בחירת נתונים (SELECT) לפי SKA1 :
נלחץ על כפתור 'FIELD GROUP '– כדי לחזור לחלון של השדות שבחרנו ואז נוסיף שדות מהטבלה
SKAT
נאשר את זה ואז השדות יתווספו בצד שמאל ואפשר יהיה להוסיף
שדות מהטבלה :
עכשיו נרצה נניח להוסיף שדה בודד לטבלת BSEG :
נסמן
בצד שמאל את BSEG כמו מקודם ונלך ל 'EXTRAS' אם הוא לא פתוח כבר ואז
נעשה שוב 'חדש' :
נכניס תיאור ואת ה Header Text ואז נכניס את הפורמט שיכול
לבוא בתור הכנסה ידנית של הנתונים כמו TYPE, LENGTH וכו' או שיכולים להשתמש ב LIKE :
וכעת נאשר :
אבל עתה ערך השדה יהיה ריק. כדי שיביא נתונים צריך להכניס קוד. זה נעשה ע"י לחיצה על הלחצן המסומן
נעבור ללשונית 'CODE' ונרשום את הקוד הבא :
זה אומר שבהתאם לכך שהרשומה היא זכות או חובה – הסכום יהיה
חיובי או שלילי.
הערה : ניתן גם
לעשות כאן SELECT
SINGLE
מתוך טבלאות ולהביא נתון אל השדה הזה.
עכשיו נעשה SAVE ואז נוסיף את השדה ל A2: כלומר נלחץ על כפתור 'FIELD GROUP' כדי לחזור
לחלון של השדות ואז נגרור מצד שמאל את השדה אל A2 :
הערה : יש לעשות
אקטיבציה גם בשפה העברית כלומר להיכנס ב LOG ON עברי למערכת ולעשות אקטיבציה. אחרת עלול להיות DUMP בהרצה של ה QUERY.
כשנצא נוכל לראות את זה ב SQ02 בחלון הראשי:
יצירת INFOSET באמצעות טבלה בודדת.
ניכנס ל SQ02 ונבנה INFOSET בשם ZZ_LFA1 :
נלחץ על :
ונשלים את הפרטים הבאים :
נלחץ 'ENTER'
ונקבל את החלון הבא ליצירת קבוצות שדות :
אם נבחר ב KEY FIELDS נקבל בחלון הבא של השדות :
כלומר קיבלנו קבוצה שכוללת כבר את מפתחות הטבלה.
ניתן להוסיף קבוצות שדות ועוד שדות וכל מה שרוצים להוסיף כמו
ב logical DB רק שכאן יש טבלה אחת בלבד.
בניית INFOSET לפי JOIN :
אחד השימושים הנפוצים בקרב מיישמים :
בנייה לפי JOIN מכמה טבלאות :
ניתן לעבוד עם INNER JOIN ועם LEFT OUTER JOIN. ההבדל ביניהם זה שב- INNER JOIN אם אין נתונים בטבלה הימנית
ויש בטבלה השמאלית אז הנתונים לא נשלפים. ב- LEFT OUTER JOIN הם כן נשלפים.
נבנה דוגמא : ZZ_mara_mgef , נעשה CREATE ונשים תיאור ואת MARA בתור
טבלת בסיס.
נקבל חלון לבניית MARA לפי JOIN:
בעיקרון המערכת מציעה לנו איזה שהיא הצעה לחיבור בין שתי הטבלאות , כפי שמוצג בתרשים הבא, הצעה זו יכולה להיות נכונה ואמיתית ולעתים היא אינה נכונה - עליך לבקר את החיבור בין הטבלאות. אלה שניתן לסמן את הקו המחבר בין שתי הטבלאות קליק ימני עם העכבר ולמחוק את החיבור. לאחר מכן תצטרך לחבר בין שתי הטבלאות הצעה משלך .
שים לב ! לא כל חיבור בין הטבלאות יכול להתקבל ע"י המערכת ! רק מה שיכול להיות הגיוני .
שבמקרה זה זה השדה STOFF.
אפשר להוסיף עוד טבלה:
ואז אפשר לגרור מצד ימין לצד שמאל
ולעשות JOIN לפי עוד שדה :
אם נלחץ קליק ימני על אחד החיבורים –
נקבל תפריט ובו יהיה ניתן לבחור לשנות את סוג ה JOIN :
אם עכשיו נלחץ קליק ימני על אותו לינק
נקבל אפשרות לשנות חזרה ל INNER JOIN.
הכפתור מימין לכפתור INFOSET מבצע בדיקה של הקשרים.
לאחר מכן ניתן ללחוץ על כפתור INFOSET ולהגיע לחלון של בחירה האם לעשות FIELD GROUPS :
נבחר לעשות ריקים ואז נקבל :
ומכאן כבר אפשר להוסיף את השדות שרוצים,
ADDITIONAL FIELDS וכו'.
יצירת INFOSET לפי מבנה או טבלה
באמצעות קוד:
גישה זו דורשת פיתוח ולכן לא מיועדת עבור מיישמים. אני אציג את הגישה בהמשך.
יצירת קבוצת משתמשים – SQ03:
חייבים לשייך INFOSET לקבוצת משתמשים כדי שיוכלו להשתמש בו.
ניכנס ל SQ03:
נכניס text ונלחץ על SAVE:
נחזור לחלון המקורי ונקבל הודעה למטה
שזה נשמר.
נכניס text ונלחץ על SAVE:
נחזור לחלון המקורי ונקבל הודעה למטה
שזה נשמר.
עתה נכניס USERS שיכולים להשתמש ( חובה להכניס לפחות
אחד אבל זה בעצם לא רלוונטי להרשאות כי ההרשאות נקבעות ב SU01 ).
נלחץ על SAVE ואז זה נשמר.
עכשיו ניתן לבנות QUERY ב SQ01.
הערה : בעיקרון צריך להכניס לפחות USER אחד אולם
הלכה למעשה ההרשאות נקבעות ע"י ROLES שמכניסים
במערכת לגבי המשתמשים.
יצירת ה QUERY – הצגת נתונים –
SQ01:
ניכנס עתה ל SQ01 :
כאן נרצה קודם כל לוודא שאנו עובדים ב GROUP- הנכון.
בתפריט הסמלים נלחץ על ' USER GROUP' שמשמעותו לעבור ל USER GROUP אחר:
תיפתח רשימה ונבחר שם את ה USER GROUP שאנו רוצים:
כעת אנו יכולים לבחור לעבוד עם GRAPHICAL PAINTER או בחלונות שיתנו את כל הפרטים
:
כדי לבחור אנו נלך ל :
ושם ניתן לבחור :
אנו נעבוד ללא ה GRAPHICAL PAINTER – ולכן נבחר להוריד את
הסימון באם הוא מסומן.
לאחר מכן ניתן שם ל - QUERY
נקבל חלון המבקש את ה INFOSET שעליו מתבססים:
בדוגמא יש רק את זה שיצרנו – נבחר אותו.
נקבל חלון שבו נכניס טקסט כותרת
לדו"ח – וניתן להכניס שם גם הערות.
ב LIST FORMAT : בשדה COLUMNS – נכניס את רוחב העמודה – וב LINES נכניס את מספר השורות להצגה. אלו בעצם
גם פרמטרים שרלוונטיים למקרה של הדפסה של הדו"ח.
בדוגמא זו יש את ה- INFOSET שיצרנו – נבחר אותו.
נקבל חלון שבו נכניס טקסט כותרת
לדו"ח – וניתן להכניס שם גם הערות.
ב LIST FORMAT : בשדה COLUMNS – נכניס את רוחב העמודה – וב LINES נכניס את מספר השורות להצגה. אלו בעצם
גם פרמטרים שרלוונטיים למקרה של הדפסה של הדו"ח.
דברים נוספים שיש בחלון זה הם VARIANT שאפשר להכניס ו OUTPUT FORMAT שזה אופן התצוגה של הדו"ח – למשל SAP LIST VIEWER משמעו תצוגה של GRID ו ABAP LIST זה כשמו כן הוא – תצוגת LIST.
עכשיו נוכל לבחור באילו שדות נשתמש ב QUERY .
אם יש יותר שדות ממה שמופיע על המסך –
יש למטה כפתורים שניתן לדפדף לעוד שדות באם יש.
הערה : במקרה שיצרנו נתונים עם DB לוגי – השדות שלו מגיעים למסך הבחירה
אוטומטית ולכן אולי נראה אותם פעמיים ואז צריך לחזור למסך הזה ולהוריד את הסימון
משדות אלו.
כעת נלחץ על כפתור ' BASIC LIST ':
ונתחיל להכניס את הפרמטרים של
עיצוב הדו"ח.
חלק מהנתונים כאן יהיו עבור תצוגה של LIST וחלק עבור תצוגה של GRID ו LIST.
הערה : בכל המסכים של ה BASIC LIST ניתן לראות למטה את חלון ה LINE STRUCTURE שמראה מעין PREVIEW של הדו"ח ב LIST.
בחלון שהגענו אליו ניתן להכניס את מספר
השורה שאנו רוצים שהנתון יהיה (רלוונטי רק ל LIST ) ואת המיקום (SEQUENCE) בשורה – כלומר את סדר הנתונים
בדו"ח.
אפשר לבחור גם את סדר המיון של הנתונים,
וכן אם השדה הוא סכום אז אפשר לסמן TOTAL ואז לקבל
שורת סכום למטה וכן אפשר לבחור COUNTER עבור שדה
שזה ב LIST בלבד וזה סופר את מספר הפעמים
שהופיע נתון עבור שדה זה בדו"ח.
כך נראה המסך:
וכך ב LIST:
נא לשים לב שב LIST רואים למטה בחלק הצהוב את ה COUNTER.
עתה נעבור למסך הבא על ידי לחיצה על כפתור 'הבא'.
אם בחרנו אפשרות של SORT זה יביא אותנו למסך CONTROL LEVEL . אם לא, זה יקפיץ אותנו למסך
LIST LINE OUTPUT OPTIONS.
במסך CONTROL LEVELS
- אם נסמן שדה ב TEXT –
נקבל את שם השדה והערך שלו בכל ערך חדש בשדה המיון ( ב LIST בלבד ).
סימון TOTAL עבור השדה יביא לסכומים חלקיים בשדות הסכום עבור
שדה זה.
בדוגמא הסכומים החלקיים יהיו עבור כל
נתון חדש של GL ACCOUNT NUMBER. האופציה
הזאת תעבוד רק אם בחרנו TOTAL עבור שדה כלשהו שיש לו את האופציה הזאת בחלון
הקודם.
סימון CNT נותן את מספר השורות שיש בהם נתונים
עבור הבלוק של ה SORT הנוכחי
(במקרה שלנו עבור ה GL NUMBER הנוכחי(ב
LIST בלבד).
סימון BLANK LINE נותן שורת רווח ( ב LIST בלבד) בין בלוק הנתונים של SORT אחד לבלוק שני.
סימון NewPG (ב LIST בלבד) גורם לכל בלוק להיות בעמוד נפרד.
כך נראה החלון :
עתה במידה וסימנו את TEXT, TOTAL או CNT נקבל מסך נפרד לכל שדה שסימנו
עבורו את אחד מהסימנים.
ניתן לתקן כאן את הטקסט – למשל של Total G/L Account Number שרואים בחלון למעלה (בתחילת
הבלוק הצהוב) ולהחליף אותו בטקסט אחר.
בדוגמא שלנו יש את שלושתם ולכן קיבלנו
חלון שמאפשר לשנות את הטקסט שלהם:
בחלון LIST LINE OUTPUT OPTIONS:
אם לא נסמן V על HEADER LINE לא נראה את הכותרות של השורה ( ב LIST בלבד).
כפתור REF : אם למשל נשים שם 02 – זה יגרום לכך
ששורות שאין להם נתונים בשורה השנייה לא יוצגו בכלל – כלומר לא תוצג גם השורה
הראשונה.
אפשר באמצעות COLOR לבחור את הצבע של כל השורה.
אם שורות הנתונים הם יותר מעמוד אחד (ב LIST בלבד) עוברים את הגודל של הדף – אז
בכותרת של הדף הבא יודפסו הנתונים של השורה הראשונה בכותרת. נראה זאת בתמונה:
הדו"ח ב LIST נראה עתה כך:
וב - ALV
עתה נעבור לחלון הבא :
הגענו לחלון FIELD OUTPUT OPTIONS:
בחלון זה במצב list בלבד לשנות את האורך של השדה ואת המקום (POS) שממנו הוא מתחיל.
זהירות – אם שדה עולה על שדה אז את אחד
מהם לא יראו( ב LIST).
עתה נגיע לחלון המאפשר לנו לשנות את
כותרות השורות – ולקבוע HEADER ו FOOTER (HEADER ו FOOTER רק ב LIST ). אם נלחץ לחיצה כפולה על אחד משמות
השדות נקבל חלון עריכה קטן לטקסט
נוכל להחליף את ה HEADING ולהוסיף טקסט. למשל כאן שינינו את
הטקסט ל AMOUNT
בכותרת למשל אפשר להכניס תאריך ומספר
עמוד ואם נלחץ לחיצה כפולה בשורה שהכנסנו תיפתח עוד שורה ואז נכניס שם TIME.
ועתה ניתן לראות זאת בדו"ח:
עכשיו ניתן לעשות SAVE וה QUERY מוכן!!!!
הערה : יש לעשות SAVE גם בשפה העברית כלומר להיכנס ב LOG ON עברי למערכת ולעשות אקטיבציה. אחרת עלול להיות DUMP בהרצה של ה QUERY.
הרצת ה QUERY :
נכנסים לטרנסאקציה SQ01:
בוחרים את ה QUERY ולוחצים על כפתור ההרצה - אם לא רואים את ה QUERY בטבלה למטה בSQ01 כדאי לנסות אולי לבדוק אם אנו בקבוצת
המשתמשים הנכונה.
וקיבלנו :
כאן אפשר לשים לב שה G/L NUMBER נמצא פעמיים ולכן נוריד אותו ב
SQ01 בחלון של השדות של ה SELECTION SCREEN.
עכשיו יהיה לנו :
ניתן לשים נתונים וניתן לשים וריאנט
קבוע כמו בכל דו"ח.
כאן בגלל שזה LOGICAL DB גם יש אפשרות ל OUTPUT FORMAT ואז
כשלוחצים על הלחצן הכחול זה יפתח אופציות ל LIST, דוחות גרפים וכו'.
בניית קישור לדו"ח אחר DRILL DOWN :
ניתן לבנות גם DRILL DOWN בשלב מתקדם יותר לדוחות אחרים ( ללכת ב
SQ01 לאחר שלחצנו
CREATE או CHANGE למעלה בתפריט ל - GOTO -> REPORT ASSIGNMENT.
ונקבל :
ניתן להוסיף כאן או עוד QUERY או ללחוץ על הכפתור 'OTHER REPORT TYPE ' ולבחור הרבה
אפשרויות כמו דוח"ות ABAP.
ואז אפשר לבחור את הדו"ח.
אפשרויות נוספות / מתקדמות :
יצירת פרמטרי בחירה עבור מסך בחירה – תלויי
INFOSET :
כשיוצרים דו"ח QUERY – ב SQ01 יוצרים את מסך הפרמטרים (בהמשך) ואולם –
אפשר ליצור פרמטרי בחירה שיופיעו בכל מקרה בכל דו"ח שיתבסס על ה INFOSET.
ניכנס ל SQ02: ניבחר שם את ה INFOSET שאנו רוצים ונלחץ על CHANGE:
כשיוצרים דו"ח QUERY – ב SQ01 יוצרים את מסך הפרמטרים (בהמשך) ואולם –
אפשר ליצור פרמטרי בחירה שיופיעו בכל מקרה בכל דו"ח שיתבסס על ה INFOSET.
ניכנס ל SQ02: ניבחר שם את ה INFOSET שאנו רוצים ונלחץ על CHANGE:
אנו כבר רואים כמה פרמטרים כי הגדרנו את
ה INFOSET באמצעות DB לוגי. במקרים אחרים הטבלה תהיה ריקה.
עתה נרצה להוסיף ולכן נלחץ על 'CREATE' :
פה אפשר לקבוע גם אם זה יהיה בחירה
מרובה ( SELECTION CRITERIA) או
יחידה (PARAMETERS).
עתה ניתן שם לפרמטר( השם חייב להתחיל באות ABC). נקרא לזה נניח COST_CTR.
כשנאשר נקבל חלון נוסף:
נכניס תיאור וטקסט עבור מסך הבחירה. ב FOR נכניס על איזה שדה זה מתבסס וב 'EXTRAS 'נכניס אפשרויות נוספות : למשל OBLIGATORY זה אומר שדה חובה .
MATCHCODE OBJECT זה להכניס עזרה ב F4 – כמובן שצריך לדעת איזו
עזרה להכניס (ניתן להיעזר בתוכניתן או מיישם מנוסה).
עתה בהרצת הדו"ח יהיה אפשר לראות
את זה במסך הפרמטרים:
שיוך TRANSACTION ל - QUERY :
נלך ל SE93 שזה בונה ה transactions:
ניתן שם לטרנזקציה :
נלחץ על CREATE :
נקבל חלון שבו נכניס טקסט קצר ונבחר את
סוג הטרנזקציה – במקרה זה נבחר בטרנזקציה עם פרמטרים :
לאחר מכן נקבל חלון שבו נתבקש להכניס
נתונים לגבי הטרנזקציה :
נכניס ב TRANSACTION : - WTYORשזוהי
טרנזקציה להפעלת QUERYS, נסמן את
SKIP FIRST SCREEN כדי לא לקבל את המסך הראשון של
טרנזקצית WTYOR.
בחלק התחתון של המסך יש טבלת פרמטרים :
נכניס שם את הפרטים הבאים : P_UGROUP שזה קבוצת המשתמשים שלנו (מה שיצרנו ב SQ03),
P_QUERY שזה שם הדו"ח שיצרנו ב SQ01, P_VARI שזה VARIANT שיצרנו
לדו"ח – אם יצרנו כזה ו P_WSID שאם נסמן
אותו ב X זה לקחת מ GLOBAL AREA ואם זה ריק אז זה לקחת מה STANDARD AREA. בצילום המסך הבא רואים למטה
את הנתונים בטבלת הפרמטרים.
עתה נשמור.
אם עתה נריץ את הטרנזקציה שיצרנו והיא
תביא אותנו ישירות לדו"ח.
אין תגובות:
הוסף רשומת תגובה