מדריך מלא ומפורט להקמת שאילתה ב- ABAP QUERY

SAP ABAP QUERY 


הי חברים ,

פתחתי את האפשרות לכתוב תגובות, אשמח לשמוע את תגובתכם הארות והערות נוספות.

שימו לב המדריך הבא להקמת שאילתות ב- SAP QUERY קיבלתי אותו לפני כמה שנים מבחור שעבד איתי (סליחה אבל איני זוכרת את שמו..) והוא מאוד מאוד עזר לי , אני משתפת אותו איתכם , מקווה שתהנו :)


מה זה SAP QUERY  ?

מדובר במנגנון לבניית  דו"חות פשוטים באופן קל , ברור ומובנה ללא צורך בהתערבות של תוכניתן.
אבל קיימת אפשרות להוספת קוד ע"י המיישם - במידה ויש לו ידע בסיסי בכתיבת קוד ב- ABAP.
הנתונים מוצגים בתצוגת ALV סטנדרטית של SAP כולל פונקציות של הוצאה לדוח EXCEL או הורדה לקובץ.
 כדי לבנות SAP QUERY  יש צורך פעולות עיקריות :

  1. יצירת קבוצת משתמשים – קבוצת משתמשים נועדה כדי לשייך דו"חות לפי קבוצה של משתמשים. משתמש שרוצה להשתמש ב QUERY חייב להימנות על הקבוצה של ה QUERY.
  2. INFOSET - בחירת טבלאות והנתונים עבור הדוח .
  3. יצירת QUERY  מתוך ה- INFOSET  .
  4. יצירת טרנסאקציה לקשירת הדוח לטרנסאקציה .


דרישות קדם לפני בניית הדוחות :


הכרת  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.  בצד שמאל אפשר לסמן את השדות שאנו רוצים להוסיף:



ונגרור את השדות ל A1:





הערה : ב logical DB   כדאי לבחור את השדה מהטבלה שיש בה את השדה ושממוקמת הכי גבוה בהיררכיה של ה DB – שכן אם נבחר מהיררכיה נמוכה – יותר, אנו עלולים להיתקל במספר מופעים של השדה בדו"ח.


 הוספת שדות חיצוניים שלא נמצאים ב DB שבחרנו :

כדי לעשות זאת נלחץ בצד שמאל על הטבלה שאנו רוצים להוסיף לה שדות ( למשל נלחץ על  SKA1 ) ואז נלחץ על כפתור   'EXTRAS'



נלחץ על כפתור   'חדש'  נקבל חלון ונבחר להוסיף בו את טבלת SKAT:






נקבל חלון של בחירת נתונים (SELECT) לפי SKA1


נלחץ על כפתור 'FIELD GROUP '– כדי לחזור לחלון של השדות שבחרנו ואז נוסיף שדות מהטבלה 
SKAT 

נאשר את זה ואז השדות יתווספו בצד שמאל ואפשר יהיה להוסיף שדות מהטבלה : 



עכשיו נרצה נניח להוסיף שדה בודד לטבלת BSEG
נסמן בצד שמאל את BSEG כמו מקודם ונלך ל 'EXTRAS אם הוא לא פתוח כבר ואז נעשה שוב 'חדש:



בשם השדה נרשום   Correct_Amount – ונבחר ב ADDITIONAL FIELD ונאשר : 

נקבל חלון נוסף של נתונים : 


נכניס תיאור ואת ה Header Text ואז נכניס את הפורמט שיכול לבוא בתור הכנסה ידנית של הנתונים כמו TYPE, LENGTH וכו' או שיכולים להשתמש ב LIKE :



וכעת נאשר :





אבל עתה ערך השדה יהיה ריק. כדי שיביא נתונים צריך להכניס קוד. זה נעשה ע"י לחיצה על הלחצן המסומן 





נעבור ללשונית 'CODE' ונרשום את הקוד הבא :






זה אומר שבהתאם לכך שהרשומה היא זכות או חובה – הסכום יהיה חיובי או שלילי.


הערה :  ניתן גם לעשות כאן SELECT SINGLE מתוך טבלאות ולהביא נתון אל השדה הזה.

עכשיו נעשה SAVE ואז נוסיף את השדה ל A2:  כלומר נלחץ על כפתור 'FIELD GROUP' כדי לחזור 

לחלון של השדות ואז נגרור מצד שמאל את השדה אל A2 : 





הפעלת ה INFOSET – ( אקטיבציה ) : ולשם כך נלחץ על  

הערה : יש לעשות אקטיבציה גם בשפה העברית כלומר להיכנס ב 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 בלבד וזה סופר את מספר הפעמים שהופיע נתון עבור שדה זה בדו"ח.

כך נראה המסך:


כך ייראה הדוח ב- ALV :
לחיצה על 'TEST' מביאה להרצת נתוני TEST   לדוח.


וכך ב 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 אחד לבלוק שני.

סימון NewPGLIST בלבד) גורם לכל בלוק להיות בעמוד נפרד.

כך נראה החלון :



וכך נראים הדו"חות:




וב - 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:

כאן נלחץ על כפתור     'EXTRA'  וניגש ללשונית SELECTIONS:




אנו כבר רואים כמה פרמטרים כי הגדרנו את ה 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. בצילום המסך הבא רואים למטה את הנתונים בטבלת הפרמטרים.




עתה נשמור.

אם עתה נריץ את הטרנזקציה שיצרנו והיא תביא אותנו ישירות לדו"ח.


אין תגובות: