You are on page 1of 39

MY LEARNINGS IN ABAP

SUDEEP NAG VEMULAPATI UNIVERSITY OF MASSACHUSSETTS DARTMOUTH

1.

FOR STANDARD TABLE..BOTH APPEND AND INSERT WORKS AS THE SAME WAY..THEY APPEND THE DATA AT THE END OF THE INTERNAL TABLE. FOR SORTED TABLE, APPEND STATEMENT WILL WORK AS LONG AS THE SORT SEQUENCE IS SATISFIED..IF IT IS NOT SATISFIED ..THEN IT WILL GIVE A SHORT DUMP. RATHER USE INSERT STATEMENT IN SORTED TABLE.

2.

EXAMPLE: 1 DATA: IT_MAKT TYPE SORTED TABLE OF TY_MAKT WITH UNIQUE KEY MATNR, WA_MAKT TYPE TY_MAKT. WA_MAKT-MATNR = 100. WA_MAKT-SPRAS = S. WA_MAKT-MAKTX = DEMO. APPEND WA_MAKT TO IT_MAKT. WA_MAKT-MATNR = 300. WA_MAKT-SPRAS = S. WA_MAKT-MAKTX = DEMO. APPEND WA_MAKT TO IT_MAKT. WA_MAKT-MATNR = 200. WA_MAKT-SPRAS = S. WA_MAKT-MAKTX = DEMO. APPEND WA_MAKT TO IT_MAKT. HERE 200 SHOULD COME AFTER IT APPENDS 100..SO THERE WILL BE AN INTERNAL CONFLICT AND GIVES A SHORT DUMP.

DATA: IT_MAKT TYPE SORTED TABLE OF TY_MAKT WITH UNIQUE KEY MATNR, WA_MAKT TYPE TY_MAKT. WA_MAKT-MATNR = 100. WA_MAKT-SPRAS = S. WA_MAKT-MAKTX = DEMO. INSERT WA_MAKT TO TABLE IT_MAKT. WA_MAKT-MATNR = 300. WA_MAKT-SPRAS = S. WA_MAKT-MAKTX = DEMO. INSERT WA_MAKT TO TABLE IT_MAKT. WA_MAKT-MATNR = 200. WA_MAKT-SPRAS = S. WA_MAKT-MAKTX = DEMO. INSERT WA_MAKT TO TABLE IT_MAKT.

INSERT STATEMENT HELPS THE SYSTEM TO DECIDE WHERE TO ENTER THE ENTRY. OUTPUT WILL BE 100, 200, 300 NOTE: 3. NEVER USE APPEND STATEMENT FOR SORTED TABLE THE MAIN DIFFERENCE BETWEEN THESE TABLES COMES WHEN YOU WANT TO RETRIEVE THE DATA.

IF THERE ARE 100 ENTRIES AND YOU WANT TO SEARCH THE 80 ENTRY KEYTHEN STANDARD TABLE PERFORMS A LINEAR SEARCH AND RETIREVES THE THAT DATA WHICH IS SLOW WHEN WE HAVE HUGE AMOUNT OF DATA.

TH

4. THE SORTED TABLE IF WE TAKE THE SAME EXAMPLE ABOVEIT DIVIDES THE ENTRIES INTO 2 EQUAL HALFS AND CHECKS WHETHER THE REQUIRED ENTRY IS LESS THAN OR GREATER THAN ..THEN IT PROCEDES THE SAME WAY..IE 100 ENTRIES..IT DIVIDES INTO 1-50 & 51 -100. OUR KEY IS 80. SO IT FURTHER DIVIDES INTO 51-75 & 76 -100. SO ON WHICH IS QUITE BETTER THAN THE STANDARD TABLE.

5. IMPORTANT POINT WE USE STANDARD TABLE MOSLTY AS THE DISADVANTAGE WITH SORTED AND HASHED TABLES ARE WE NEED TO SPECIFY THE KEYS. SO THERE IS NO FELXIBILITY IN THOSE TABLES. BEST WAY TO USE STANDARD TABLE IS: DATA: IT_MAKT TYPE STANDARD TABLE OF TY_MAKT, WA_MAKT TYPE TY_MAKT. AND BEFORE READING THE INTERNAL TABLE. FIRST SORT IT AND WHILE READING IT USE BINERY SEARCH. EX: DATA: IT_MAKT TYPE SORTED TABLE OF TY_MAKT WITH UNIQUE KEY MATNR, WA_MAKT TYPE TY_MAKT. WA_MAKT-MATNR = 100. WA_MAKT-SPRAS = S. WA_MAKT-MAKTX = DEMO. INSERT WA_MAKT TO TABLE IT_MAKT. WA_MAKT-MATNR = 300. WA_MAKT-SPRAS = S. WA_MAKT-MAKTX = DEMO. INSERT WA_MAKT TO TABLE IT_MAKT. WA_MAKT-MATNR = 200. WA_MAKT-SPRAS = S. WA_MAKT-MAKTX = DEMO. INSERT WA_MAKT TO TABLE IT_MAKT.

SORT IT_MAKT BY MATNR. READ TABLE IT_MAKT INTO WA_MAKT WITH TABLE KEY MATNR = 300 BINERY SEARCH. IN THE ABOVE CODE WE ARE FORCING THE STANDARD TABLE TO PERFORM BINERY SEARCH AND IT ACTS LIKE A SORTED TABLE. IF YOU WANT IT TO READ BY BOTH THE KEYS I.E MATNR AND SPRAS. WE SORT BY BOTH MATNR AND SPRAS AND USE THE SPRAS KEY AS BELOW. WE CAN HAVE THAT FLEXIBLITY. SORT IT_MAKT BY MATNR SPRAS. ALWAYS SORT THE TABLE ELSE THE READ STATEMENT WILL FAIL. READ TABLE IT_MAKT INTO WA_MAKT WITH TABLE KEY MATNR = 300 SPRAS = E BINERY SEARCH.

6. REPORT

MESSAGES: ZDEMO7.

DATA: V_MAKTX TYPE MAKTX. PARAMETERS: P_MATNR TYPE MATNR. SELECT SINGLE MAKTX FROM MAKT INTO V_MAKTX WHERE MATNR = P_MATNR. IF SY-SUBRC IS NOT INITIAL. MESSAGE 'INVALID MATERIAL' TYPE 'E'. ENDIF. FOR THE ABOVE PROGRAM THERE IS NO WAY TO COME BACK TO THE EXECUTION SCREEN IF THE USER ENTERS INVALID MATERIAL. WE HAVE TO EXIT THE PROGRAM AND THEN RE-EXECUTE.

REPORT

ZDEMO7.

DATA: V_MAKTX TYPE MAKTX. PARAMETERS: P_MATNR TYPE MATNR. AT SELECTION-SCREEN. SELECT SINGLE MAKTX FROM MAKT INTO V_MAKTX WHERE MATNR = P_MATNR. IF SY-SUBRC IS NOT INITIAL. MESSAGE 'INVALID MATERIAL' TYPE 'E'. ENDIF. IF WE KEEP THE SELECTION SCREEN VALIDATIONS UNDER AT SELECTION-SCREEN EVENT. THEN IT STAYS ON THE SELECTION SCREEN TO CORRECT THE INPUT..ALSO WE CAN USE THE BACK BUTTON TO GO BACK TO THE CODE. NOTE: AFTER AT SELECTION-SCREEN EVENTIF YOU WANT TO PUT ANY CODEPUT IT UNDER START-OF-SELECTION EVENT.

A. MESSAGE 'INVALID MATERIAL' TYPE 'E'. IN THE ABOVE CASE WE ARE HARDCODING THE MESSAGE IN OUR PROGRAM AND DISPLAYING IT TO THE USER. BUT SAP SUPPORTS VARIOUS LANGUAGESHARDCODING THE MESSAGE IN THIS WAY DOES NOT SUPPORT MULTIPLE LANGUAGES. EX: IF WE LOGIN INTO GERMAN LANGUAGE IT STILL SHOWS THE MESSAGE IN ENGLISH. B. INSTEAD OF HARD-CODING THE MESSAGEWE CAN USE TEXT ELEMENTS.
REPORT ZDEMO7. DATA: V_MAKTX TYPE MAKTX. PARAMETERS: P_MATNR TYPE MATNR. AT SELECTION-SCREEN. SELECT SINGLE MAKTX FROM MAKT INTO V_MAKTX WHERE MATNR = P_MATNR. IF SY-SUBRC IS NOT INITIAL. MESSAGE TEXT-001 TYPE 'E'. ENDIF.

DOUBLE CLICK ON THE TEXT ELEMENT TEXT-001 AND INSERT THE MESSAGE. WHEN WE ARE MAINTAINING TEXT ELEMENTS WE CAN MAINTAIN TRANSLATIONS.
GO THE MESSAGES SCREENPUT THE CURSOR ON THE MESSAGE AND CLICK GOTOTRANSLATIONS AND MAINTAIN TRANSLATIONS. ANOTHER ADVANTAGE OF TEXT ELEMENTS IS REUSABILITY. IF WE WANT TO SHOW THE SAME MESSAGE AGAIN ..THEN WE CAN USE THE SAME TEXT ELEMENT AGAIN. THE DISADVANTAGE OF TEXT ELEMENTS IS THAT THEY ARE LOCAL TO THE PROGRAM. WE CANNOT USE THEM IN ANOTHER PROGRAM. C. GLOBAL MESSAGES/ MESSAGE CLASSES:

GOTO SE91 TRANSACTION CODE AND CREATE A MESSAGE CLASS. USING MESSAGES CREATED USING MESSAGE CLASS IN OUR PROGRAM.

REPORT

ZDEMO7.

DATA: V_MAKTX TYPE MAKTX. PARAMETERS: P_MATNR TYPE MATNR. AT SELECTION-SCREEN. SELECT SINGLE MAKTX FROM MAKT INTO V_MAKTX WHERE MATNR = P_MATNR. IF SY-SUBRC IS NOT INITIAL. *" E> FOR ERROR, 000 FOR THE MESSAGE ID...CHECK THE MESSAGE CLASS AND IN BRACKETS WE CAN GIVE THE MESSAGE CLASS NAME MESSAGE E000(ZDEMO_MESSAGE). ENDIF. REUSABLE MESSAGES..AND ALSO WE CAN MAINTAIN THE TRANSLATIONS IF WE NEED.

IF IN OUR PROGRAM..ALL THE MESSAGES ARE PICKED FROM THE SAME MESSAGE CLASS, THEN IT IS NOT NECESSARY TO WRITE THE MESSAGE CLASS NAME WHERE EVER WE WANT TO SHOW THE MESSAGE. INSTEAD WE CAN USE MESSAGE-ID REPORT ZDEMO7 MESSAGE-ID ZDEMO_MESSAGE.

DATA: V_MAKTX TYPE MAKTX. PARAMETERS: P_MATNR TYPE MATNR. AT SELECTION-SCREEN. SELECT SINGLE MAKTX FROM MAKT INTO V_MAKTX WHERE MATNR = P_MATNR. IF SY-SUBRC IS NOT INITIAL. *" E> FOR ERROR, 000 FOR THE MESSAGE ID...CHECK THE MESSAGE CLASS AND IN BRACKETS WE CAN GIVE THE MESSAGE CLASS NAME MESSAGE E000. ENDIF.

MESSAGE E001. 7. CONTROL BREAK STATEMENTS SUPPRESING DUBLICATES PROGRAM: ( UNDERSTAND THE LOGIC) *&---------------------------------------------------------------------* *& Report ZDEMO8 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO8. MARD. TYPE STANDARD TABLE OF MAKT, TYPE MAKT, TYPE STANDARD TABLE OF MARD, TYPE MARD, TYPE WERKS_D.

TABLES: MAKT, DATA: IT_MAKT WA_MAKT IT_MARD WA_MARD V_WERKS

SELECT-OPTIONS: SO_MATNR FOR MAKT-MATNR. SELECT * FROM MAKT INTO TABLE IT_MAKT WHERE MATNR IN SO_MATNR AND SPRAS EQ SY-LANGU. SELECT * FROM MARD INTO TABLE IT_MARD FOR ALL ENTRIES IN IT_MAKT WHERE MATNR = IT_MAKT-MATNR. WRITE:/1 'MATERIAL', 20 'LANGUAGE', 40 'DESCIPTION', 60 'PLANT'. ULINE. SORT IT_MARD BY WERKS. LOOP AT IT_MARD INTO WA_MARD. IF WA_MARD-WERKS NE V_WERKS. READ TABLE IT_MAKT INTO WA_MAKT WITH KEY MATNR = WA_MARD-MATNR. WRITE:/1 WA_MAKT-MATNR, 20 WA_MAKT-SPRAS, 40 WA_MAKT-MAKTX, 60 WA_MARD-WERKS. V_WERKS = WA_MARD-WERKS. ENDIF. ENDLOOP. WITHOUT USING THE ABOVE LOGIC WE CAN STILL GET THE SAME OUTPUT BY USING CONTROL BREAK STATEMENTS.

A. AT FIRST: THIS GETS TRIGGERED IN THE FIRST LOOP. WE CAN USE THIS FOR PRINTING COLUMN HEADINGS. *&---------------------------------------------------------------------* *& Report ZDEMO8 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO8. MARD. TYPE STANDARD TABLE OF MAKT, TYPE MAKT, TYPE STANDARD TABLE OF MARD, TYPE MARD.

TABLES: MAKT, DATA: IT_MAKT WA_MAKT IT_MARD WA_MARD

SELECT-OPTIONS: SO_MATNR FOR MAKT-MATNR. SELECT * FROM MAKT INTO TABLE IT_MAKT WHERE MATNR IN SO_MATNR AND SPRAS EQ SY-LANGU. SELECT * FROM MARD INTO TABLE IT_MARD FOR ALL ENTRIES IN IT_MAKT WHERE MATNR = IT_MAKT-MATNR.

LOOP AT IT_MARD INTO WA_MARD. READ TABLE IT_MAKT INTO WA_MAKT WITH KEY MATNR = WA_MARD-MATNR. AT FIRST. WRITE:/1 'MATERIAL', 20 'LANGUAGE', 40 'DESCIPTION', 60 'PLANT', SY-TABIX. ULINE. ENDAT. WRITE:/1 WA_MAKT-MATNR, 20 WA_MAKT-SPRAS, 40 WA_MAKT-MAKTX, 60 WA_MARD-WERKS. ENDLOOP.

B. AT NEW. AT NEW WILL BE TRIGGERED WHENEVER ANYONE OF THE FIELD TO THE KEY FIELD CHANGES. *&---------------------------------------------------------------------* *& Report ZDEMO8 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO8. MARD. TYPE STANDARD TABLE OF MAKT, TYPE MAKT, TYPE STANDARD TABLE OF MARD, TYPE MARD.

TABLES: MAKT, DATA: IT_MAKT WA_MAKT IT_MARD WA_MARD

SELECT-OPTIONS: SO_MATNR FOR MAKT-MATNR. SELECT * FROM MAKT INTO TABLE IT_MAKT WHERE MATNR IN SO_MATNR AND SPRAS EQ SY-LANGU. SELECT * FROM MARD INTO TABLE IT_MARD FOR ALL ENTRIES IN IT_MAKT WHERE MATNR = IT_MAKT-MATNR.

LOOP AT IT_MARD INTO WA_MARD. READ TABLE IT_MAKT INTO WA_MAKT WITH KEY MATNR = WA_MARD-MATNR. AT FIRST. WRITE:/1 'MATERIAL', 20 'LANGUAGE', 40 'DESCIPTION', 60 'PLANT', SY-TABIX. ULINE. ENDAT. * WE ELIMINATE DUPLICATES HERE BY USING AT NEW CONTROL BREAK. * WHEN EVER ANY OF THE FIELD CHANGES LEFT TO THE WERKS...THEN IT WRITES OR EL SE IT SIMPLY SKIPS. AT NEW WERKS. WRITE:/1 WA_MAKT-MATNR, 20 WA_MAKT-SPRAS, 40 WA_MAKT-MAKTX, 60 WA_MARD-WERKS. ENDAT. ENDLOOP.

C. AT LAST. AT LAST IS TRIGGERED WHEN IT EXECUTES THE LAST LOOP. USED FOR PRINTING THE FOOTER INFORMATION OR CALCULATING THE TOTAL AMOUNTS ETC. REPORT ZDEMO8. MARD. TYPE STANDARD TABLE OF MAKT, TYPE MAKT, TYPE STANDARD TABLE OF MARD, TYPE MARD.

TABLES: MAKT, DATA: IT_MAKT WA_MAKT IT_MARD WA_MARD

SELECT-OPTIONS: SO_MATNR FOR MAKT-MATNR. SELECT * FROM MAKT INTO TABLE IT_MAKT WHERE MATNR IN SO_MATNR AND SPRAS EQ SY-LANGU. SELECT * FROM MARD INTO TABLE IT_MARD FOR ALL ENTRIES IN IT_MAKT WHERE MATNR = IT_MAKT-MATNR.

LOOP AT IT_MARD INTO WA_MARD. READ TABLE IT_MAKT INTO WA_MAKT WITH KEY MATNR = WA_MARD-MATNR. AT FIRST. WRITE:/1 'MATERIAL', 20 'LANGUAGE', 40 'DESCIPTION', 60 'PLANT', SY-TABIX. ULINE. ENDAT. * WE ELIMINATE DUPLICATES HERE BY USING AT NEW CONTROL BREAK. * WHEN EVER ANY OF THE FIELD CHANGES LEFT TO THE WERKS...THEN IT WRITES OR EL SE IT SIMPLY SKIPS. AT NEW WERKS. WRITE:/1 WA_MAKT-MATNR, 20 WA_MAKT-SPRAS, 40 WA_MAKT-MAKTX, 60 WA_MARD-WERKS. ENDAT. AT LAST. SKIP 1. ULINE. WRITE:/' THANKS FOR USING THE REPORT AND UNDERSTANDING THE CONCEPT'. ULINE. ENDAT. ENDLOOP.

D. ON CHANGE OF ON CHANGE OF AND AT NEW IS ALMOST THE SAME. EXPECT THAT AT NEW CONSIDERS ALL THE FIELDS BEFORE THE KEY FIELD ( LEFT ) AND ON CHANGE OF CONSIDERS ONLY THAT PARTICULAR FIELD. REPORT ZDEMO8. MARD. TYPE STANDARD TABLE OF MAKT, TYPE MAKT, TYPE STANDARD TABLE OF MARD, TYPE MARD.

TABLES: MAKT, DATA: IT_MAKT WA_MAKT IT_MARD WA_MARD

SELECT-OPTIONS: SO_MATNR FOR MAKT-MATNR. SELECT * FROM MAKT INTO TABLE IT_MAKT WHERE MATNR IN SO_MATNR AND SPRAS EQ SY-LANGU. SELECT * FROM MARD INTO TABLE IT_MARD FOR ALL ENTRIES IN IT_MAKT WHERE MATNR = IT_MAKT-MATNR.

LOOP AT IT_MARD INTO WA_MARD. READ TABLE IT_MAKT INTO WA_MAKT WITH KEY MATNR = WA_MARD-MATNR. AT FIRST. WRITE:/1 'MATERIAL', 20 'LANGUAGE', 40 'DESCIPTION', 60 'PLANT', SY-TABIX. ULINE. ENDAT. * WE ELIMINATE DUPLICATES HERE BY USING AT NEW CONTROL BREAK. * WHEN EVER ANY OF THE FIELD CHANGES LEFT TO THE WERKS...THEN IT WRITES OR EL SE IT SIMPLY SKIPS. ON CHANGE OF WA_MARD-WERKS. WRITE:/1 WA_MAKT-MATNR, 20 WA_MAKT-SPRAS, 40 WA_MAKT-MAKTX, 60 WA_MARD-WERKS. ENDON. AT LAST. SKIP 1. ULINE. WRITE:/' THANKS FOR USING THE REPORT AND UNDERSTANDING THE CONCEPT' . ULINE.

ENDAT. ENDLOOP. NOTE: FOR AT FIRST AND AT LAST THE WHOLE WORK AREA WILL BE INACCESSIBLE. IT ONLY PRINTS STARS IF WE WANT TO PRINT ANYTHING FROM WORK AREA. HENCE WE ONLY USE THEM FOR COLUMN HEADINGS AND FOOTERS. NOTE: FOR AT NEW ONLY THAT PARTICULAR DATA (LEFT SIDE DATA OF THE KEY) IS ACCISSIBLE. IF WE PRINT LGORT FROM MARD TABLEIT PRINTS STARS.

8.

COLLECT STATEMENT

IF YOU USE APPEND OR INSERT STATEMENTS IT WILL ALWAYS ADD A NEW LINE. CONSIDER AN EXAMPLE: IF YOU PURSHASE ITEMS IN WALLMART : IF YOU PURCHASE SAME ITEMS THE ITEMS SHOULD ADD UP TO THE EXISTING ITEMS BUT NOT CREATE A NEW ENTRY. FOR THIS PURPOSE WE USE COLLECT STATEMENT. COLLECT STATEMENT: COLLECT STATEMENT ADDS UP THE CURRENCY AND QUANTITY ENTRY. *&---------------------------------------------------------------------* *& Report ZDEMO9 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO9.

TYPES: BEGIN OF TY_BILL, MATNR TYPE MATNR, MAKTX TYPE MAKTX, MENGE TYPE MENGE_D, NETWR TYPE NETWR, END OF TY_BILL. DATA: IT_BILL TYPE STANDARD TABLE OF TY_BILL, WA_BILL TYPE TY_BILL. WA_BILL-MATNR = WA_BILL-MAKTX = WA_BILL-MENGE = WA_BILL-NETWR = COLLECT WA_BILL WA_BILL-MATNR = WA_BILL-MAKTX = WA_BILL-MENGE = WA_BILL-NETWR = COLLECT WA_BILL '001'. 'SOAP'. '3'. '20'. INTO IT_BILL. '001'. 'SOAP'. '3'. '20'. INTO IT_BILL.

WA_BILL-MATNR = '002'. WA_BILL-MAKTX = 'SHAMPOO'. WA_BILL-MENGE = '1'.

WA_BILL-NETWR = '50'. COLLECT WA_BILL INTO IT_BILL. WA_BILL-MATNR = WA_BILL-MAKTX = WA_BILL-MENGE = WA_BILL-NETWR = COLLECT WA_BILL WA_BILL-MATNR = WA_BILL-MAKTX = WA_BILL-MENGE = WA_BILL-NETWR = COLLECT WA_BILL WA_BILL-MATNR = WA_BILL-MAKTX = WA_BILL-MENGE = WA_BILL-NETWR = COLLECT WA_BILL '003'. 'BRUSH'. '1'. '10'. INTO IT_BILL. '003'. 'BRUSH'. '3'. '10'. INTO IT_BILL. '002'. 'SHAMPOO'. '1'. '50'. INTO IT_BILL.

LOOP AT IT_BILL INTO WA_BILL. WRITE:/1 WA_BILL-MATNR, 20 WA_BILL-MAKTX, 40 WA_BILL-MENGE, 60 WA_BILL-NETWR. ENDLOOP.

9. VIEWS: VIEWS ARE NOT PHISICAL DATABASE TABLESTHEY ARE LOGICAL TABLES WHERE WE CAN JOIN THE DATABASE TABLES. MOSTLY USED BY FUNCTIONAL CONSULTANTS TO QUICKLY CREATE A REPORT. WE CAN ALSO WRITE A SELECT STATEMENT TO THIS VIEW. CREATE A VIEW BASED ON MAKT, MARC, T001W WITH TABLE FIELDS-> MATNR, SPRAS, MAKTX, WERKS, NAME1. REPORT ZDEMO10.

DATA: IT_VIEW TYPE STANDARD TABLE OF ZVIEW, WA_VIEW TYPE ZVIEW. SELECT * FROM ZVIEW INTO TABLE IT_VIEW WHERE MATNR = '100100' AND SPRAS = 'EN'. LOOP AT IT_VIEW INTO WA_VIEW. WRITE:/1 WA_VIEW-MATNR, 20 WA_VIEW-MAKTX, 40 WA_VIEW-SPRAS, 80 WA_VIEW-WERKS, 100 WA_VIEW-NAME1. ENDLOOP.

10. EVENTS: Your code does not get executed in the order you write the code. The execution depends on the events. We need to associate the code to events. Default event is START-OF-SELECTION. 1. SELECTION SCREEN EVENTS : USED TO PROCESS YOUR SELECTION SCREEN AT SELECTION SCREEN EVENT IS AT SELECTION SCREEN EVENT. 2. REPORTING EVENTS 3. LIST EVENTS: TOP-OF-PAGE, END-OF-PAGE, AT LINE SELECTION, AT USER COMMAND. 4. SCREEN EVENTS THE EVENT IS INTRODUCED BY ITS EVENT KEYWORD.AND IT ENDS WHEN THE OTHER EVENT STARTS. WHEN THESE EVENTS ARE TRIGGERED IS PRE DEFINED. ALL YOU CAN DO IS MAINTAIN THOSE EVENTS BASED ON WHEN YOU WANT YOUR CODE TO BE EXECUTED. THE ORDER OF THE CODE HAS NO RELAVANCE. EX: IF WE DONT HAVE A SELECTION SCREEN THEN AT SELECTION-SCREEN CODE IS NOT EXECUTED AT ALL. *&---------------------------------------------------------------------* *& Report ZDEMO11 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO11.

DATA: IT_MAKT TYPE STANDARD TABLE OF MAKT, WA_MAKT TYPE MAKT. PARAMETERS: P_MATNR TYPE MAKT-MATNR. AT SELECTION-SCREEN. SELECT SINGLE * FROM MAKT INTO WA_MAKT WHERE MATNR = P_MATNR. IF SY-SUBRC IS NOT INITIAL. MESSAGE ' INVALID MATERIAL ' TYPE 'E'. ENDIF. START-OFSELECTION. " IF WE DONT INTRODUCE THIS EVENT HERE..THE AT SELECTION SCREEN EV ENT DOES NOT END AND THE OUTPUT IS NOT DISPLAYED. SELECT * FROM MAKT INTO TABLE IT_MAKT WHERE MATNR = P_MATNR. LOOP AT IT_MAKT INTO WA_MAKT. AT FIRST. WRITE:/1 20 40 60 'CLIENT', 'MATERIAL', 'LANGUAGE', 'DESCRIPTION',

80 'DESCRIPTION'. ULINE. ENDAT. WRITE:/1 WA_MAKT-MANDT, 20 WA_MAKT-MATNR, 40 WA_MAKT-SPRAS, 60 WA_MAKT-MAKTX, 80 WA_MAKT-MAKTG. AT LAST. ULINE. WRITE:/ 'THANKS VENKU REDDY AND IML'. ULINE. ENDAT. ENDLOOP. BY THE TIME WHEN YOU SEE THE SELECTION SCREEN, IF YOU WANT TO SEE SOME DEFAULT VALUES ON THE SELECTION FIELDS. THESE EVENTS ARE ALSO CALL PROCESSING BLOCKS. TOP-OF-PAGE: IT GETS EXECUTED WHEN IT ENCOUNTERS THE FIRST WRITE STATEMENT AND WHEN THE NEW PAGE STARTS END-OF-PAGE: IT GETS EXECUTED WHEN EVER IT REACHES THE LINE-COUNT. *&---------------------------------------------------------------------* *& Report ZDEMO11 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO11 LINE-COUNT 21(1)." 6 LINES PER PAGE AND ONE LINE FOR FOOTER. * I.E FOR EVERY 5 TH LINE END-OF-PAGE IS TRIGGERED. DATA: IT_MAKT TYPE STANDARD TABLE OF MAKT, WA_MAKT TYPE MAKT. PARAMETERS: P_MATNR TYPE MAKT-MATNR, P_DATE TYPE SY-DATUM. AT SELECTION-SCREEN OUTPUT. * THIS EVENT GETS EXECUTED BEFORE SHOWING THE SELECTION SCREEN AND HENCE THE DEFAULT VALUES ARE DISPLAYED. P_MATNR = '100-100'. P_DATE = SY-DATUM. " SYSTEM FIELD WHICH HOLDS TODAYS DATE. AT SELECTION-SCREEN. * HERE IF WE DECLARE THE DEFAULT VALUES IT DOESNT SHOW AS DEFUALT IN SELECTIO N SCREEN AS AT SELECTION

* SCREEN IS EXECUTED AFTER IT DISPLAYS THE SELECTION SCREEN. P_MATNR = '100-100'. P_DATE = SY-DATUM. " SYSTEM FIELD WHICH HOLDS TODAYS DATE. SELECT SINGLE * FROM MAKT INTO WA_MAKT WHERE MATNR = P_MATNR AND SPRAS = 'EN' . IF SY-SUBRC IS NOT INITIAL. MESSAGE ' INVALID MATERIAL ' TYPE 'E'. ENDIF. START-OFSELECTION. " IF WE DONT INTRODUCE THIS EVENT HERE..THE AT SELECTION SCREEN EV ENT DOES NOT END AND THE OUTPUT IS NOT DISPLAYED. SELECT * FROM MAKT INTO TABLE IT_MAKT WHERE MATNR = P_MATNR. LOOP AT IT_MAKT INTO WA_MAKT. AT FIRST. WRITE:/1 20 40 60 80 ULINE. ENDAT. 'CLIENT', 'MATERIAL', 'LANGUAGE', 'DESCRIPTION', 'DESCRIPTION'.

WRITE:/1 WA_MAKT-MANDT, 20 WA_MAKT-MATNR, 40 WA_MAKT-SPRAS, 60 WA_MAKT-MAKTX, 80 WA_MAKT-MAKTG. AT LAST. ULINE. WRITE:/ 'THANKS VENKU REDDY AND IML'. ULINE. ENDAT. ENDLOOP. TOP-OF-PAGE. WRITE:/ 'REPORT ON MATERIAL'. END-OF-PAGE. WRITE:/ 'THANK YOU VENKU AND IML'. * IF THE USER DOUBLE CLICKS ON THE LIST SCREEN THEN AT LINE SELECTION GETS EX ECUTED, ELSE IT WILL NOT GET EXECUTED AT ALL. AT LINE-SELECTION. CALL TRANSACTION 'MM03. NOTE: NOT ALL PROCESSING BLOCKS ALLOW LOCAL DECLARATIONS. FEW OF THE PROCESSING BLOCKS ALLOW LOCAL DECLARATIONS. EX: FORM.ENDFORM.

A VARIABLE DECLARED UNDER FORM.ENDFORM USING DATA KEYWORD IS ONLY ACCESSIBLE IN THAT SCOPE. IT CANNOT BE ACCESSED OUTSIDE THE FORM.ENDFORM. EX: FORM GET_DATA. DATA: V_MATNR TYPE MATNR. V_MATNR = 100-100 SELECT * FROM MAKT INTO TABLE IT_MAKT WHERE MATNR = V_MATNR. ENDFORM. HERE V_MATNR IS ACCESSIBLE ONLY INSIDE FORM.ENDFORM.

PROCESSING BLOCKS ARE EITHER CALLED BY RUN TIME ENVIRONMENTS OR BY SPECIFIC STATEMENTS IN YOUR PROGRAM. EX: START-OF-SELECTION, AT SELECTION-SCREEN ETC ARE CALLED BY RUN TIME ENVIRONMENT. FORM.ENDFORM ARE CALLED BY PERFORM STATEMENT IN OUR PROGRAM. IF YOU HAVE ANY CODE WHICH IS NOT ATTACHED TO ANY OF THE EVENTS, THEN SYSTEM WILL AUTOMATICALLY ATTACH THE CODE AT THE BEGINNING OF START-OF-SELECTION EVENT.

PROGRAM TO DISPLAY TVARVC CONCENTS CHECK THE VIDEO 11 & 12 FROM HARD DISK.

11. PROCEDURES: PROCEDURES CAN HAVE A LOCAL DATA AREA AND HAVE A PARAMETER INTERFACE. THEY CAN BE CALLED INTERNALLY WITHIN A PROGRAM OR EXTERNALLY FROM OTHER ABAP PROGRAM. PROCEDURES ARE REUSABLE BLOCKS.

a. b. c.

SUBROUTINES: FORM.END FORM AND CALLED USING PERFORM STATEMENT. FUNCTION MODULES: FUNCTION.ENDFUNCTION AND CALLED USING CALL FUNCTION STATEMENT. METHODS: METHOD---ENDMETHOD AND CALLED USING CALL METHOD STATEMENT.

SUBROUTINES: PASSING PARAMETERS TO THE SUBROUTINE. 1> PASS BY REFERENCE 2> PASS BY VALUE 3> PASS BY VALUE AND RESULT

PASS BY REFERENCE: THE SYNTAX WE USE TO PASS THE PARAMETERS BY REFERENCE IS: AT PERFORM LEVEL WE USE USING AND CHANGING KEYWORDS. THE PARAMETERS AT PERFORM LEVEL ARE CALLED ACTUAL PARAMETERS AND THE PARAMETERS AT FORM LEVEL ARE CALLED FORMAL PARAMETERS. RULE: THE NUMBER OF ACTUAL PARAMETERS AND THE NUMBER OF FORMAL PARAMETERS SHOULD BE THE SAME. THE KEYWORDS YOU USE AT THE FORM LEVEL WILL ACTUALLY DECIDE HOW THE PARAMETERS ARE PASSED. *&---------------------------------------------------------------------* *& Report ZDEMO12 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO12.

DATA: V_MATNR TYPE MATNR, V_SPRAS TYPE SPRAS, V_MAKTX TYPE MAKTX. V_MATNR = '100-100'. PERFORM GET_MAKTX USING V_MATNR CHANGING V_MAKTX. WRITE:/ V_MAKTX.

*&---------------------------------------------------------------------* *& Form GET_MAKTX *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_V_MATNR text * <--P_V_MAKTX text *----------------------------------------------------------------------* ** IN THIS SUB ROUTINE,,WE WANT TO TAKE THE MATERIAL NUMBER AND CHANGE THE MA TERIAL DESCRIPTION. *THE VALUES OF V_MATNR AND V_MAKTX ARE SIMPLY PASSED TO P_V_MATNR AND P_V_MAK TX *AS V_MATNR IS HAVING '100-100', P_V_MATNR WILL ALSO BE HAVING 100-100. FORM GET_MAKTX USING P_V_MATNR CHANGING P_V_MAKTX. SELECT SINGLE MAKTX FROM MAKT INTO P_V_MAKTX WHERE MATNR = P_V_MATNR. ENDFORM. GO INTO DEBUG MODE: V_MATNR WILL HAVE 100-100 AND V_MAKTX WILL HAVE NOTHING BEFORE EXECUTING THE PERFORM STATEMENT. AFTER EXECUTING THE PERFORM STATEMENT P_V_MATNR WILL HAVE 100-100 AND P_V_MAKTX WILL HAVE NOTHING. AND AFTER EXECUTING THE SELECT STATEMENT P_V_MAKTX WILL BE HAVING CASINGS AND THE SAME CONTENT IS PASSED TO V_MAKTX. AFTER COMING OUT OF THE FORMENDFORM, P_V_MAKTX AND P_V_MATNR WILL NOT BE ACCESSIBLE SO THEY HAVE NOTHING AND V_MAKTX WILL BE HAVING CASINGS WHICH GETS PRINTED IN THE LIST SCREEN. IF YOU TRY TO CHANGE V_MATNR( ACTUAL), THE CHANGE IS AUTOMATICALLY REFLECTED TO P_V_MATNR AND VICE VERSSA BECAUSE BOTH ACTUAL AND FORMAL PARAMETERS ARE POINTING TO THE SAME MEMORY WITH TWO DIFFERENT NAMES. HENCE PASS BY REFERENCE. PASS BY VALUE: *&---------------------------------------------------------------------* *& Report ZDEMO12 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO12. " GET_MAKTX

DATA: V_MATNR TYPE MATNR, V_SPRAS TYPE SPRAS, V_MAKTX TYPE MAKTX. V_MATNR = '100-100'.

PERFORM GET_MAKTX USING V_MATNR CHANGING V_MAKTX. WRITE:/ V_MAKTX. *&---------------------------------------------------------------------* *& Form GET_MAKTX *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_V_MATNR text * <--P_V_MAKTX text *----------------------------------------------------------------------* ** IN THIS SUB ROUTINE,,WE WANT TO TAKE THE MATERIAL NUMBER AND CHANGE THE MA TERIAL DESCRIPTION. *THE VALUES OF V_MATNR AND V_MAKTX ARE SIMPLY PASSED TO P_V_MATNR AND P_V_MAK TX *AS V_MATNR IS HAVING '100-100', P_V_MATNR WILL ALSO BE HAVING 100-100. FORM GET_MAKTX USING VALUE(P_V_MATNR) VALUE(P_V_MAKTX). SELECT SINGLE MAKTX FROM MAKT INTO P_V_MAKTX WHERE MATNR = P_V_MATNR. ENDFORM. GO TO DEBUG MODE: " GET_MAKTX

V_MATNR WILL HAVE 100-100 AND V_MAKTX WILL HAVE NOTHING BEFORE EXECUTING THE PERFORM STATEMENT. AFTER EXECUTING THE PERFORM STATEMENT P_V_MATNR WILL HAVE 100-100 AND P_V_MAKTX WILL HAVE NOTHING. AND AFTER EXECUTING THE SELECT STATEMENT P_V_MAKTX WILL BE HAVING CASINGS AND V_MAKTX WILL STILL BE EMPTY BECAUSE THE VALUE OF P_V_MAKTX VALUE IS NOT PASSED TO V_MAKTX. HERE ACTUAL PARAMETER AND FORMAL PARAMETERS ARE POINTED TO DIFFERENT MEMORY LOCATIONS. WHEN WE PASS BY VALUE..WE ARE COPING THE ORIGINAL CONTENTS TO NEW MEMORY. ACTUAL PARAMETERS ARE POINTED TO THE ORIGINAL MEMORY AND FORMAL PARAMETERS ARE POINTED TO NEW MEMORY.ORIGINAL IS NEVER CHANGED.HENCE IN THE ABOVE PROGRAM, OUTPUT IS NOT DISPLAYED AS V_MAKTX IS NULL. THE SYNTAX WE USE TO PASS THE PARAMETERS BY VALUE IS: AT PERFORM LEVEL WE USE USING AND VALUE KEYWORDS.

PASSING PARAMETERS BY USING VALUE AND RESULT: V_MATNR WILL HAVE 100-100 AND V_MAKTX WILL HAVE NOTHING BEFORE EXECUTING THE PERFORM STATEMENT. AFTER EXECUTING THE PERFORM STATEMENT P_V_MATNR WILL HAVE 100-100 AND P_V_MAKTX WILL HAVE NOTHING. AND AFTER EXECUTING THE SELECT STATEMENT P_V_MAKTX WILL BE HAVING CASINGS AND V_MAKTX WILL STILL BE EMPTY BECAUSE THE VALUE OF P_V_MAKTX VALUE IS NOT PASSED TO V_MAKTX.

HERE ACTUAL PARAMETER AND FORMAL PARAMETERS ARE POINTED TO DIFFERENT MEMORY LOCATIONS. WHEN WE PASS BY VALUE..WE ARE COPING THE ORIGINAL CONTENTS TO NEW MEMORY. ACTUAL PARAMETERS ARE POINTED TO THE ORIGINAL MEMORY AND FORMAL PARAMETERS ARE POINTED TO NEW MEMORY.EVEN IN VALUE AND RESULT WE WILL WORKING WITH THE NEW MEMORY ONLY BUT THE DIFFERENCE IS WHEN THE END FORM IS EXECUTED, THE VALUE OF THE FORMAL PARAMETERS ARE COPIED TO THE ACTUAL PARAMETERS. THE ORIGINAL MEMORY IS REPLACED MY NEW MEMORY. HENCE WE CAN SEE THE OUTPUT IN THE BELOW PROGRAM. THE SYNTAX WE USE TO PASS THE PARAMETERS BY VALUE IS: AT PERFORM LEVEL WE USE CHANGING AND VALUE KEYWORDS. *&---------------------------------------------------------------------* *& Report ZDEMO12 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO12.

DATA: V_MATNR TYPE MATNR, V_SPRAS TYPE SPRAS, V_MAKTX TYPE MAKTX. V_MATNR = '100-100'. PERFORM GET_MAKTX USING V_MATNR CHANGING V_MAKTX. WRITE:/ V_MAKTX. *&---------------------------------------------------------------------* *& Form GET_MAKTX *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_V_MATNR text * <--P_V_MAKTX text *----------------------------------------------------------------------* ** IN THIS SUB ROUTINE,,WE WANT TO TAKE THE MATERIAL NUMBER AND CHANGE THE MA TERIAL DESCRIPTION. *THE VALUES OF V_MATNR AND V_MAKTX ARE SIMPLY PASSED TO P_V_MATNR AND P_V_MAK TX *AS V_MATNR IS HAVING '100-100', P_V_MATNR WILL ALSO BE HAVING 100-100. FORM GET_MAKTX CHANGING VALUE(P_V_MATNR) VALUE(P_V_MAKTX). SELECT SINGLE MAKTX FROM MAKT INTO P_V_MAKTX WHERE MATNR = P_V_MATNR. ENDFORM. " GET_MAKTX

NOTE: IF YOU ARE PASSING INTERNAL TABLES AS PARAMETERS WE ALWAYS TRY TO PASS BY REFERENCE AS IT HOLDS A SINGLE COPY OF DATA AND OTHERS LIKE PASS BY VALUE AND PASS BY VALUE AND RESULT WILL BE HAVING 2 COPIES OF DATA IN 2 MEMEORY LOCATIONS. MY EXAMPLES: *&---------------------------------------------------------------------* *& Report ZDEMO13 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO13.

TYPES: BEGIN OF TY_MAKT, MATNR TYPE MATNR, SPRAS TYPE SPRAS, MAKTX TYPE MAKTX, END OF TY_MAKT. DATA: IT_MAKT TYPE STANDARD TABLE OF TY_MAKT, WA_MAKT TYPE TY_MAKT. PARAMETERS: P_MATNR TYPE MAKT-MATNR. PERFORM GET_DATA USING P_MATNR CHANGING IT_MAKT. LOOP AT IT_MAKT INTO WA_MAKT. WRITE:/1 WA_MAKT-MATNR, 20 WA_MAKT-SPRAS, 40 WA_MAKT-MAKTX. ENDLOOP. *&---------------------------------------------------------------------* *& Form GET_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_P_MATNR text * <--P_IT_MAKT text *----------------------------------------------------------------------* FORM GET_DATA USING P_P_MATNR CHANGING P_IT_MAKT LIKE IT_MAKT. SELECT MATNR SPRAS MAKTX FROM MAKT INTO TABLE P_IT_MAKT WHERE MATNR = P_P_MATNR. ENDFORM. " GET_DATA

*&---------------------------------------------------------------------* *& Report ZDEMO14 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO14.

TYPES: BEGIN OF TY_KNA1, KUNNR TYPE KUNNR, LAND1 TYPE LAND1_GP, NAME1 TYPE NAME1_GP, ORT01 TYPE ORT01_GP, END OF TY_KNA1. DATA: IT_KNA1 TYPE STANDARD TABLE OF TY_KNA1, WA_KNA1 TYPE TY_KNA1. TYPES: BEGIN OF TY_VBAK, KUNNR TYPE KUNNR, VBELN TYPE VBELN_VA, ERDAT TYPE ERDAT, END OF TY_VBAK. DATA: IT_VBAK TYPE STANDARD TABLE OF TY_VBAK, WA_VBAK TYPE TY_VBAK. PARAMETERS: P_KUNNR TYPE KNA1-KUNNR. PERFORM GET_DATA USING P_KUNNR CHANGING IT_KNA1 IT_VBAK. LOOP AT IT_KNA1 INTO WA_KNA1. READ TABLE IT_VBAK INTO WA_VBAK WITH KEY KUNNR = WA_KNA1-KUNNR. WRITE:/1 WA_KNA1-KUNNR, 20 WA_KNA1-LAND1, 40 WA_KNA1-NAME1, 60 WA_KNA1-ORT01, 80 WA_VBAK-VBELN, 100 WA_VBAK-ERDAT. ENDLOOP.

*&---------------------------------------------------------------------* *& Form GET_DATA *&---------------------------------------------------------------------* * text

*----------------------------------------------------------------------* * -->P_P_KUNNR text * <--P_IT_KNA1 text * <--P_IT_VBAK text *----------------------------------------------------------------------* FORM GET_DATA USING P_P_KUNNR CHANGING P_IT_KNA1 LIKE IT_KNA1 P_IT_VBAK LIKE IT_VBAK. SELECT KUNNR LAND1 NAME1 ORT01 FROM KNA1 INTO TABLE P_IT_KNA1 WHERE KUNNR = P_P_KUNNR. SELECT KUNNR VBELN ERDAT FROM VBAK INTO TABLE P_IT_VBAK FOR ALL ENTRIES IN P_IT_KNA1 WHERE KUNNR = P_IT_KNA1-KUNNR. ENDFORM. " GET_DATA

*&---------------------------------------------------------------------* *& Report ZDEMO15 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO15.

TYPES: BEGIN OF TY_MAKT, MATNR TYPE MATNR, SPRAS TYPE SPRAS, MAKTX TYPE MAKTX, END OF TY_MAKT. DATA: IT_MAKT TYPE STANDARD TABLE OF TY_MAKT, WA_MAKT TYPE TY_MAKT. TYPES: BEGIN OF TY_MARD, MATNR TYPE MATNR, WERKS TYPE WERKS_D, END OF TY_MARD. DATA: IT_MARD TYPE STANDARD TABLE OF TY_MARD, WA_MARD TYPE TY_MARD. PARAMETERS: P_MATNR TYPE MAKT-MATNR.

PERFORM GET_DATA USING P_MATNR CHANGING IT_MAKT IT_MARD.

LOOP AT IT_MARD INTO WA_MARD. READ TABLE IT_MAKT INTO WA_MAKT WITH KEY MATNR = WA_MARD-MATNR. AT FIRST. WRITE:/1 'MATERIAL', 20 'LANGUAGE', 40 'DESCRIPTION', 60 'PLANT'. ULINE. ENDAT. WRITE:/1 WA_MAKT-MATNR, 20 WA_MAKT-SPRAS, 40 WA_MAKT-MAKTX, 60 WA_MARD-WERKS. ENDLOOP. *&---------------------------------------------------------------------* *& Form GET_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_P_MATNR text * <--P_IT_MAKT text * <--P_IT_MARD text *----------------------------------------------------------------------* FORM GET_DATA USING P_P_MATNR CHANGING P_IT_MAKT LIKE IT_MAKT P_IT_MARD LIKE IT_MARD. SELECT MATNR SPRAS MAKTX FROM MAKT INTO TABLE P_IT_MAKT WHERE MATNR = P_P_MATNR. *IF SY-SUBRC IS NOT INITIAL. SELECT MATNR WERKS FROM MARD INTO TABLE P_IT_MARD FOR ALL ENTRIES IN P_IT_MAKT WHERE MATNR = P_IT_MAKT-MATNR. *ENDIF. ENDFORM. " GET_DATA

*&---------------------------------------------------------------------* *& Report ZDEMO16 *&

*&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO16.

DATA: V_MATNR TYPE MATNR, V_SPRAS TYPE SPRAS, V_MAKTX TYPE MAKTX. V_MATNR = '100-100'. V_SPRAS = SY-LANGU. PERFORM GET_DATA USING V_MATNR V_SPRAS CHANGING V_MAKTX. WRITE:/ V_MAKTX. *&---------------------------------------------------------------------* *& Form GET_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_V_MATNR text * <--P_V_MAKTX text *----------------------------------------------------------------------* FORM GET_DATA USING VALUE(P_V_MATNR) TYPE MATNR " PASSED BY VALUE P_V_SPRAS TYPE SPRAS " PASSED BY REFERENCE CHANGING VALUE(P_V_MAKTX) TYPE MAKTX." PASSED BY VALUE AND RES ULT SELECT SINGLE MAKTX FROM MAKT INTO P_V_MAKTX WHERE MATNR EQ P_V_MATNR AND SPR AS EQ P_V_SPRAS. ENDFORM. " GET_DATA

CALLING SUBROUTINE FROM EXTERNAL ABAP PROGRAM. *&---------------------------------------------------------------------* *& Report ZDEMO16_EXTERNALLY *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO16_EXTERNALLY. DATA: V_MATNR TYPE MATNR, V_SPRAS TYPE SPRAS, V_MAKTX TYPE MAKTX. V_MATNR = '100-100'. V_SPRAS = SY-LANGU. PERFORM GET_DATA IN PROGRAM ZDEMO16 USING V_MATNR V_SPRAS CHANGING V_MAKTX.

WRITE:/ V_MAKTX. _________________________________________________________________________ *&---------------------------------------------------------------------* *& Report ZDEMO16 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO16.

*&---------------------------------------------------------------------* *& Form GET_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_V_MATNR text * <--P_V_MAKTX text *----------------------------------------------------------------------* FORM GET_DATA USING VALUE(P_V_MATNR) TYPE MATNR " PASSED BY VALUE P_V_SPRAS TYPE SPRAS " PASSED BY REFERENCE CHANGING VALUE(P_V_MAKTX) TYPE MAKTX." PASSED BY VALUE AND RES ULT SELECT SINGLE MAKTX FROM MAKT INTO P_V_MAKTX WHERE MATNR EQ P_V_MATNR AND SPR AS EQ P_V_SPRAS. ENDFORM. " GET_DATA

NOTE: PERFORM THIS IN PROGRAM THAT. FUNCTION MODULE: FUNCTION MODULES CAN BE CREATED IN FUNCTION POOL TYPE OF PRGRAMS. (NOT IN EXECUTABLE PROGRAMS) WE USE FUNCTION BUILDER I.E SE37 TO CREATE A FUNCTION MODULE. WE HAVE TO CREATE A FUNCTION GROUP BEFORE CREATING A FUNCTION MODULE. WE CAN CREATE IT FROM FUCNTION BUILDER I.E SE37 OR FROM SE80 ( OBJECT NAVIGATOR ) FUNCTION MODULE POINT OF VIEW: IMPORT PARAMETERS ARE SOMETHING WE PURELY IMPORT TO THE FUNCTION MODULE FROM OUR PROGRAM. YOU CANNOT CHANGE THEM IN THE FUNCTION MODULE. V_MATNR TYPE MATNR : IMPORT PARAMETERS SOURCE CODE: EXPORT PARAMETERS ARE SOMETHING WE PURELY EXPORT TO THE PROGRAM FROM THE FUNCTION MODULE. V_MAKTX TYPE MAKTX : EXPORT PARAMETERS

FUNCTION ZDEMO18_FM. *"---------------------------------------------------------------------*"*"Local Interface: *" IMPORTING *" REFERENCE(V_MATNR) TYPE MAKT-MATNR *" EXPORTING *" REFERENCE(V_MAKTX) TYPE MAKT-MAKTX *"---------------------------------------------------------------------SELECT SINGLE MAKTX FROM MAKT INTO V_MAKTX WHERE MATNR = V_MATNR. ENDFUNCTION.

PROGRAM: *&---------------------------------------------------------------------* *& Report ZDEMO18_FM_PROGRAM *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO18_FM_PROGRAM.

DATA: GV_MATNR TYPE MATNR, GV_MAKTX TYPE MAKTX. GV_MATNR = '100-100'. CALL FUNCTION 'ZDEMO18_FM' EXPORTING V_MATNR = GV_MATNR IMPORTING V_MAKTX = GV_MAKTX . WRITE:/1 ' Material Description is' color 5, GV_MAKTX.

Program 2: *&---------------------------------------------------------------------* *& Report ZDEMO19_FM_PROGRAM *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO19_FM_PROGRAM.

DATA: GV_MATNR TYPE MATNR,

GV_MAKTX TYPE MAKTX. GV_MATNR = '100-100'. " THIS IS SENT TO FUNCTION MODULE WHICH SITS IN V_MATNR * LEFT HAND SIDE-- FUNCTION MODULE FIELDS,- FORMAL PARAMETERS * RIGHT HAND SIDE --- PROGRAM FIELDS - ACTUAL PARAMETERS CALL FUNCTION 'ZDEMO19_FM' EXPORTING V_MATNR = GV_MATNR IMPORTING V_MAKTX = GV_MAKTX . WRITE:/ GV_MAKTX. FUNCTION MODULE FUNCTION ZDEMO19_FM. *"---------------------------------------------------------------------*"*"Local Interface: *" IMPORTING *" REFERENCE(V_MATNR) TYPE MAKT-MATNR *" EXPORTING *" REFERENCE(V_MAKTX) TYPE MAKT-MAKTX *"---------------------------------------------------------------------select single maktx from makt into v_maktx where matnr = v_matnr. " V_MAKTX WILL IN GV_MAKTX IN THE PROGRAM. ENDFUNCTION.

WHEN TO USE SUBROUTINE AND WHEN TO USE FUNCTION MODULES ??? SUBROUTINES: WHEN WE WANT TO REUSE CODE WITH IN THE SAME PROGRAM, THEN WE USE SUBROUTINES. SUBROUTINES CAN ALSO BE CALLED FROM EXTERNAL PROGRAMS, BUT WE RESTRICT ITS USE TO LOCAL PROGRAMS DUE TO PERFORMANCE ISSUES. FUNCTION MODULES: WHEN WE WANT TO REUSE THE CODE GLOBALLY, THEN WE USE FUNCTION MODUES. READ AND UNDERSTAND ALL THE PROGRAMS CAREFULLY: FUNCTION ZDEMO20_FM. *"---------------------------------------------------------------------*"*"Local Interface: *" IMPORTING *" REFERENCE(V_MATNR) TYPE MAKT-MATNR *" REFERENCE(V_SPRAS) TYPE MAKT-SPRAS *" EXPORTING *" REFERENCE(V_MAKTX) TYPE MAKT-MAKTX *"---------------------------------------------------------------------SELECT SINGLE MAKTX FROM MAKT INTO V_MAKTX WHERE MATNR EQ V_MATNR AND SPRAS E Q V_SPRAS.

MAKTX WILL BE EXPORTED BY FUNCTION MODULE ENDFUNCTION.

*&---------------------------------------------------------------------* *& Report ZDEMO20_FM_PROGRAM *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO20_FM_PROGRAM.

DATA: GV_MATNR TYPE MATNR, GV_SPRAS TYPE SPRAS, GV_MAKTX TYPE MAKTX. GV_MATNR = '100-100'. EXPORTED TO FUNCTION MODULE GV_SPRAS = 'J'. EXPORTED TO FUNCTION MODULE CALL FUNCTION 'ZDEMO20_FM' EXPORTING V_MATNR = GV_MATNR V_SPRAS = GV_SPRAS IMPORTING V_MAKTX = GV_MAKTX IMPORTED BY PROGRAM FROM FM . WRITE:/ GV_MAKTX. VALUE WHICH IS EXPORTED BY THE FUNCTION MODULE IS IMPORTED BY THE PORGRAM, AND DISPLAYED HERE. OUTPUT IS IN JAPANESE LANGAUGE.

NOTE: THE INTERFACE DEFINING YOUR FUNCTION MODULE IS A PUBLIC INTERFACE. THAT IS: ANY PROGRAM WHICH USES THIS FUNCTION MODULE WILL FILL ALL THE PARAMETERS. THE PROGRAM WILL HAVE ACCESS TO THE COMPLETE INTERFACE. FUNCTION ZDEMO21_FM. *"---------------------------------------------------------------------*"*"Local Interface: *" IMPORTING *" REFERENCE(V_MATNR) TYPE MAKT-MATNR *" REFERENCE(V_SPRAS) TYPE MAKT-SPRAS *" EXPORTING *" REFERENCE(V_MAKTX) TYPE MAKT-MAKTX *" TABLES *" IT_MAKT STRUCTURE MAKT *"---------------------------------------------------------------------SELECT * FROM MAKT INTO TABLE IT_MAKT WHERE MATNR EQ V_MATNR. ENDFUNCTION.

*&---------------------------------------------------------------------* *& Report ZDEMO21_FM_PROGRAM *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO21_FM_PROGRAM.

DATA: GV_MATNR TYPE MATNR, GV_SPRAS TYPE SPRAS, GV_MAKTX TYPE MAKTX, GT_MAKT TYPE STANDARD TABLE OF MAKT, WA_MAKT TYPE MAKT. PARAMETERS: P_MATNR TYPE MAKT-MATNR. *GV_MATNR = '100-100'. CALL FUNCTION 'ZDEMO21_FM' EXPORTING V_MATNR = P_MATNR " ALSO WE CAN EXPLICITYLY SEND DATA TO FUNCTION M ODULE USING GV_MATNR. V_SPRAS = GV_SPRAS IMPORTING V_MAKTX = GV_MAKTX TABLES IT_MAKT = GT_MAKT . LOOP AT GT_MAKT INTO WA_MAKT. WRITE:/1 WA_MAKT-MATNR, 20 WA_MAKT-SPRAS, 40 WA_MAKT-MAKTX, 70 WA_MAKT-MAKTG. ENDLOOP.

TABLE TYPE: *&---------------------------------------------------------------------* *& Report ZDEMO_PROGRAM1 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO_PROGRAM1.

DATA: IT_KNA1 TYPE STANDARD TABLE OF ZDEMO_KNA1_LINETYPE, WA_KNA1 TYPE ZDEMO_KNA1_LINETYPE, IT_VBAK TYPE STANDARD TABLE OF ZDEMO_VBAK_LINETYPE,

WA_VBAK TYPE ZDEMO_VBAK_LINETYPE. PARAMETERS: P_KUNNR TYPE KNA1-KUNNR. * ZDEMO_KNA1_LINETYPE HAS KUNNR NAME1 LAND1 ORT01 AS FIELDS SELECT KUNNR NAME1 LAND1 ORT01 FROM KNA1 INTO TABLE IT_KNA1 WHERE KUNNR EQ P_KUNNR. *ZDEMO_VBAK_LINETYPE HAS VBELN ERDAT KUNNR AS FIELDS. SELECT VBELN ERDAT KUNNR FROM VBAK INTO TABLE IT_VBAK FOR ALL ENTRIES IN IT_KNA1 WHERE KUNNR = IT_KNA1-KUNNR. LOOP AT IT_VBAK INTO WA_VBAK. READ TABLE IT_KNA1 INTO WA_KNA1 WITH KEY KUNNR = WA_VBAK-KUNNR. WRITE:/1 WA_KNA1-KUNNR, 20 WA_KNA1-NAME1, 40 WA_KNA1-LAND1, 60 WA_KNA1-ORT01, 80 WA_VBAK-VBELN, 100 WA_VBAK-ERDAT. ENDLOOP.

Function modules: FUNCTION ZDEMO23_FM. *"---------------------------------------------------------------------*"*"Local Interface: *" IMPORTING *" REFERENCE(V_KUNNR) TYPE KNA1-KUNNR *" TABLES *" IT_KNA1 STRUCTURE ZDEMO_KNA1_LINETYPE *" IT_VBAK STRUCTURE ZDEMO_VBAK_LINETYPE *"---------------------------------------------------------------------SELECT KUNNR NAME1 LAND1 ORT01 FROM KNA1 INTO TABLE IT_KNA1 WHERE KUNNR EQ V_KUNNR.

SELECT VBELN ERDAT KUNNR FROM VBAK INTO TABLE IT_VBAK FOR ALL ENTRIES IN IT_KNA1 WHERE KUNNR = IT_KNA1-KUNNR. ENDFUNCTION. Function Module Call Program: *&---------------------------------------------------------------------* *& Report ZDEMO_PROGRAM2 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO_PROGRAM2. DATA: GT_KNA1 TYPE STANDARD TABLE OF ZDEMO_KNA1_LINETYPE, WA_KNA1 TYPE ZDEMO_KNA1_LINETYPE, GT_VBAK TYPE STANDARD TABLE OF ZDEMO_VBAK_LINETYPE, WA_VBAK TYPE ZDEMO_VBAK_LINETYPE. PARAMETERS: P_KUNNR TYPE KNA1-KUNNR. CALL FUNCTION 'ZDEMO23_FM' EXPORTING V_KUNNR = P_KUNNR TABLES IT_KNA1 = GT_KNA1 IT_VBAK = GT_VBAK . LOOP AT GT_VBAK INTO WA_VBAK. READ TABLE GT_KNA1 INTO WA_KNA1 WITH KEY KUNNR = WA_VBAK-KUNNR. WRITE:/1 WA_KNA1-KUNNR, 20 WA_KNA1-NAME1, 40 WA_KNA1-LAND1, 60 WA_KNA1-ORT01, 80 WA_VBAK-VBELN, 100 WA_VBAK-ERDAT. ENDLOOP. PROGRAM 4 FUNCTION MODULE: FUNCTION ZDEMO24_FM. *"---------------------------------------------------------------------*"*"Local Interface: *" IMPORTING *" REFERENCE(V_MATNR) TYPE MATNR

*" TABLES *" IT_MAKT STRUCTURE ZLINETYPE_MAKT *" IT_MARD STRUCTURE ZLINETYPE_MARD *"---------------------------------------------------------------------SELECT MATNR SPRAS MAKTX FROM MAKT INTO TABLE IT_MAKT WHERE MATNR EQ V_MATNR. SELECT MATNR WERKS LGORT FROM MARD INTO TABLE IT_MARD FOR ALL ENTRIES IN IT_MAKT WHERE MATNR EQ IT_MAKT-MATNR. ENDFUNCTION.

PROGRAM: *&---------------------------------------------------------------------* *& Report ZDEMO24_FM_PROGRAM *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO24_FM_PROGRAM. TYPE TYPE TYPE TYPE STANDARD TABLE OF ZLINETYPE_MAKT, ZLINETYPE_MAKT, STANDARD TABLE OF ZLINETYPE_MARD, ZLINETYPE_MARD.

DATA: GT_MAKT WA_MAKT GT_MARD WA_MARD

PARAMETERS: P_MATNR TYPE MAKT-MATNR. CALL FUNCTION 'ZDEMO24_FM' EXPORTING V_MATNR = P_MATNR TABLES IT_MAKT = GT_MAKT IT_MARD = GT_MARD . LOOP AT GT_MARD INTO WA_MARD. READ TABLE GT_MAKT INTO WA_MAKT WITH KEY WA_MARD-MATNR. AT FIRST. WRITE:/1 'MATERIAL', 20 'LANGUAGE', 40 'DESCRIPTION', 60 'PLANT', 80 'LOCATION'.

ULINE. ENDAT. WRITE:/1 WA_MAKT-MATNR, 20 WA_MAKT-SPRAS, 40 WA_MAKT-MAKTX, 60 WA_MARD-WERKS, 80 WA_MARD-LGORT. ENDLOOP. FUNCTION MODULE: FUNCTION ZDEMO25_FM. *"---------------------------------------------------------------------*"*"Local Interface: *" IMPORTING *" REFERENCE(V_BELNR) TYPE RE_BELNR *" TABLES *" IT_RBKP STRUCTURE ZLINETYPE_RBKP *" IT_RSEG STRUCTURE ZLINETYPE_RSEG *"---------------------------------------------------------------------SELECT BELNR GJAHR FROM RBKP INTO TABLE IT_RBKP WHERE BELNR = V_BELNR. SELECT BELNR BUZEI MATNR BUKRS WERKS FROM RSEG INTO TABLE IT_RSEG FOR ALL ENTRIES IN IT_RBKP WHERE BELNR = IT_RBKP-BELNR.

ENDFUNCTION. FUNCTION MODULE CALL: *&---------------------------------------------------------------------* *& Report ZDEMO25_FM_PROGRAM *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO25_FM_PROGRAM.

DATA: GT_RBKP TYPE STANDARD TABLE OF ZLINETYPE_RBKP,

WA_RBKP TYPE ZLINETYPE_RBKP, GT_RSEG TYPE STANDARD TABLE OF ZLINETYPE_RSEG, WA_RSEG TYPE ZLINETYPE_RSEG. PARAMETERS: P_BELNR TYPE RBKP-BELNR. CALL FUNCTION 'ZDEMO25_FM' EXPORTING V_BELNR = P_BELNR TABLES IT_RBKP = GT_RBKP IT_RSEG = GT_RSEG. LOOP AT GT_RSEG INTO WA_RSEG. READ TABLE GT_RBKP INTO WA_RBKP WITH KEY BELNR = WA_RSEG-BELNR. WRITE:/1 WA_RBKP-BELNR, 25 WA_RBKP-GJAHR, 50 WA_RSEG-BUZEI, 75 WA_RSEG-MATNR, 100 WA_RSEG-BUKRS, 125 WA_RSEG-WERKS. ENDLOOP. WE RAISE EXCEPTIONS IN A FUNCTION MODULE. USE RAISE KEYWORD. FUNCTION ZDEMO26_FM. *"---------------------------------------------------------------------*"*"Local Interface: *" IMPORTING *" REFERENCE(V_MATNR) TYPE MAKT-MATNR *" TABLES *" IT_MAKT STRUCTURE ZLINETYPE_MAKT *" IT_MARD STRUCTURE ZLINETYPE_MARD *" CHANGING *" REFERENCE(V_SPRAS) TYPE MAKT-SPRAS *" EXCEPTIONS *" INVALID_MATERIAL *"---------------------------------------------------------------------SELECT MATNR SPRAS MAKTX FROM MAKT INTO TABLE IT_MAKT WHERE MATNR EQ V_MATNR. IF SY-SUBRC IS NOT INITIAL. RAISE INVALID_MATERIAL. ENDIF. SELECT MATNR WERKS LGORT FROM MARD INTO TABLE IT_MARD FOR ALL ENTRIES IN IT_MAKT

WHERE MATNR = IT_MAKT-MATNR. ENDFUNCTION. PROGRAM: *&---------------------------------------------------------------------* *& Report ZDEMO26_FM_PROGRAM *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO26_FM_PROGRAM. TYPE TYPE TYPE TYPE STANDARD TABLE OF ZLINETYPE_MAKT, ZLINETYPE_MAKT, STANDARD TABLE OF ZLINETYPE_MARD, ZLINETYPE_MARD.

DATA: GT_MAKT WA_MAKT GT_MARD WA_MARD

PARAMETERS: P_MATNR TYPE MAKT-MATNR. CALL FUNCTION 'ZDEMO26_FM' EXPORTING V_MATNR = P_MATNR TABLES IT_MAKT = GT_MAKT IT_MARD = GT_MARD CHANGING V_SPRAS = SY-LANGU EXCEPTIONS INVALID_MATERIAL = 1 OTHERS = 2 . IF SY-SUBRC <> 0. CASE SY-SUBRC. WHEN 1. MESSAGE 'INVALID MATERIAL' TYPE 'I'. WHEN 2. MESSAGE 'SOMETHING IS WRONG' TYPE 'I'. ENDCASE. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. LOOP AT GT_MARD INTO WA_MARD. READ TABLE GT_MAKT INTO WA_MAKT WITH KEY MATNR = WA_MARD-MATNR. AT FIRST. WRITE:/1 'MATERIAL NUMBER', 20 'LANGUAGE', 40 'DESCRIPTION', 60 'PLANT', 80 'LOCATION'.

ULINE. ENDAT. WRITE:/1 WA_MAKT-MATNR, 20 WA_MAKT-SPRAS, 40 WA_MAKT-MAKTX, 60 WA_MARD-WERKS, 80 WA_MARD-LGORT. ENDLOOP. WE CAN ONLY CREATE AN INTERNAL TABLE IN TABLES TAB USING LIKE KEYWORD. IF WE USE EXPORT, IMPORT AND CHANGING TABS TO CREATE AN INTERNAL TABLE USING TYPE KEYWORD, IT WILL ONLY CREATE A WORKAREA. WE CAN REFER OUR OBJECTS TO A USER DEFINED STRUCTURE TOO. BUT TABLES TAB IS OBSOLETE, SO TO CREATE AN INTERNAL TABLE USING EXPORT, IMPORT AND CHANGING TABS WE HAVE TO FIRST CREATE A TABLE TYPE IN SE11 AND THEN REFER OUR OBJECTS TO THAT TABLE TYPE BY USING THE SAME TYPE KEYWORD. NOT THE SYMBOLS FOR WORKAREA AND INTERNAL TABLE BY EXECUTING THE FUNCTION MODULE. TILL NOW WE HAVE CREATED INTERNAL TABLE USING KEYWORD TYPE STANDARD TABLE OF AND WORKAREA USING TYPE KEYWORD. Ex: IT_KNA1 TYPE STANDARD TABLE OF KNA1 WA_KNA1 TYPE KNA1. WITH TABLE TYPE WE CAN CREATE AN INTERNAL TABLE USING TYPE KEYWORD REFERING IT TO TABLE TYPE. EX: IT_KNA1 TYPE ZTABLETYPE_KNA1. (CREATES AN INTERNAL TABLE DIRECTLY) SO TO PROCESS THE DATA IN THE INTERNAL TABLE CREATED USING TYPE KEYWORD, WE NEED A WORK AREA. SO TO CREATE A WORK AREA FOR INTERNAL TABLES CREATED USING TYPE KEYWORD( REFERRED TO TABLETYPES), WE USE LIKE LINE OF KEYWORD OR WE CAN SIMPLE REFER TO THE LINE TYPE REFERRED IN THE TABLE TYPE. EX: IT_KNA1 TYPE ZTABLETYPE_KNA1, WA_KNA1 LIKE LINE OF ZTABLETYPE_KNA1. (OR) IT_KNA1 TYPE ZTABLETYPE_KNA1,(TABLETYPE) WA_KNA1 TYPE ZLINETYPE_KNA1.(STRUCTURE) HERE THE MOMEONT WE SAY TYPE ZTABLETYPE_KNA1, IT IS CREATING AN INTERNAL TABLE, BUT WHAT TYPE OF INTERNAL TABLE IT WILL BE CREATED? WHILE CREATING A TABLETYPE WE HAVE TO SPECIFY WHICH TYPE OF TABLE SHOULD BE CREATED. THERE ARE RADIO BOXES WHILE CREATING A TABLE TYPE IN SE11. ALSO WE CAN SPECIFY THE KEY IN THE KEY TAB( UNIQUE KEY OR NON-UNIQUE KEY ).

USING STANDARD FUNCTION MODULES: MY PRACTICE: *&---------------------------------------------------------------------* *& Report ZDEMO28_PROGRAM *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO28_PROGRAM.

data: it_month type standard table of t247, wa_month type t247. parameters: p_month type t247-mnr. CALL FUNCTION 'MONTH_NAMES_GET' EXPORTING LANGUAGE = SY-LANGU * IMPORTING * RETURN_CODE = sy-subrc TABLES MONTH_NAMES = it_month * EXCEPTIONS * MONTH_NAMES_NOT_FOUND = 1 * OTHERS = 2 . IF SY-SUBRC <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. loop at it_month into wa_month where mnr = p_month. write:/1 wa_month-spras, 20 wa_month-mnr, 40 wa_month-ktx, 60 wa_month-ltx. endloop. *&---------------------------------------------------------------------* *& Report ZDEMO29_PROGRAM *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZDEMO29_PROGRAM.

DATA: V_DAYS LIKE VTBBEWE-ATAGE, V_MONTHS LIKE VTBBEWE-ATAGE, V_YEARS LIKE VTBBEWE-ATAGE. * COMMENTED CODE ALSO WORKS FINE *DATA: V_DAYS TYPE I, * V_MONTHS TYPE I, * V_YEARS TYPE I. PARAMETERS: FROMDATE TYPE VTBBEWE-DBERVON, TODAY TYPE VTBBEWE-DBERVON DEFAULT SY-DATUM. * *PARAMETERS: FROMDATE TYPE SY-DATUM, * TODAY TYPE SY-DATUM DEFAULT SY-DATUM. CALL FUNCTION 'FIMA_DAYS_AND_MONTHS_AND_YEARS' EXPORTING I_DATE_FROM = FROMDATE * I_KEY_DAY_FROM = I_DATE_TO = TODAY * I_KEY_DAY_TO = * I_FLG_SEPARATE = ' ' IMPORTING E_DAYS = V_DAYS E_MONTHS = V_MONTHS E_YEARS = V_YEARS . WRITE:/ 'Difference in Days ', V_DAYS. WRITE:/ 'Difference in Months ', V_MONTHS. WRITE:/ 'Difference in Years ', V_YEARS.

*&---------------------------------------------------------------------* *& Report ZDEMO30_PROGRAM *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT DATA: ZDEMO30_PROGRAM. week(2) TYPE c, year(4) TYPE c, week_in TYPE SCAL-WEEK, date_out TYPE SCAL-DATE.

week = '50'. year = sy-datum(4). CONCATENATE year week INTO week_in. CALL FUNCTION 'WEEK_GET_FIRST_DAY'

EXPORTING WEEK IMPORTING DATE EXCEPTIONS WEEK_INVALID OTHERS . IF SY-SUBRC <> 0.

= WEEK_IN = DATE_OUT = 1 = 2

CASE SY-SUBRC. WHEN 1. MESSAGE 'INVALID WEEK' TYPE 'I'. WHEN 2. MESSAGE 'PROGRAM ERROR' TYPE 'E'. ENDCASE. ENDIF. WRITE: date_out.

You might also like