Friday, September 23, 2011

Report on Open and Shipped Orders

This report provides the information about Open orders and Shipped Orders.
REPORT z_0000__1_3_1_1___0023. *Include for Data declaration INCLUDE z_0000__1_3_1_1___0023_top. *Include for selection screen INCLUDE z_0000__1_3_1_1___0023_scr. *Include for Calculations INCLUDE z_0000__1_3_1_1___0023_f01. *----------------------------------------------------------------------* * Initialization * *----------------------------------------------------------------------* INITIALIZATION. PERFORM refresh_data. *----------------------------------------------------------------------* * Start of selection * *----------------------------------------------------------------------* START-OF-SELECTION. * Fetching the required Data PERFORM fetch_data. *Build Field catalog. PERFORM build_field_catalog. *----------------------------------------------------------------------* * End of selection * *----------------------------------------------------------------------* END-OF-SELECTION. IF t_output IS NOT INITIAL. *Display report output PERFORM display_alv. ELSE. MESSAGE 'No data found' TYPE 'I'. ENDIF. *&---------------------------------------------------------------------* *& Include Z_0000__1_3_1_1___0023_TOP *&---------------------------------------------------------------------* TYPE-POOLS: slis. *----------------------------------------------------------------------* * Table-declaration * *----------------------------------------------------------------------* TABLES: vbrk,vbak,likp,lips,vbap,kna1,knvv. *----------------------------------------------------------------------* * Structure declaration * *----------------------------------------------------------------------* TYPES : BEGIN OF x_vbak, vbeln LIKE vbak-vbeln, END OF x_vbak. TYPES : BEGIN OF x_vbap, vbeln LIKE vbak-vbeln, "Sales document kunnr LIKE vbak-kunnr, "Sold-to-Party * kvgr4 LIKE vbak-kvgr4, "Cust Grp A kdgrp LIKE knvv-kdgrp, "Cust Group posnr LIKE vbap-posnr, "Sales Document Item matnr LIKE vbap-matnr, "Material Number arktx LIKE vbap-arktx, "Product description kwmeng LIKE vbap-kwmeng, "Cumulative Order Quantity in Sales Units werks LIKE vbap-werks, "Plant netwr LIKE vbap-netwr, "Total Value Sales order line END OF x_vbap. TYPES : BEGIN OF x_lips, vbeln LIKE likp-vbeln, lfdat LIKE likp-lfdat, wadat_ist LIKE likp-wadat_ist, posnr LIKE lips-posnr, lfimg LIKE lips-lfimg, END OF x_lips. TYPES : BEGIN OF x_kna1, kunnr LIKE kna1-kunnr, name1 LIKE kna1-name1, END OF x_kna1. TYPES : BEGIN OF x_vbfa, vbelv LIKE vbfa-vbelv, posnv LIKE vbfa-posnv, vbeln LIKE vbfa-vbeln, posnn LIKE vbfa-posnn, vbtyp_n LIKE vbfa-vbtyp_n, matnr LIKE vbfa-matnr, rfmng LIKE vbfa-rfmng, END OF x_vbfa. TYPES : BEGIN OF x_output, kunnr LIKE vbak-kunnr, name1 LIKE kna1-name1, vbeln LIKE vbak-vbeln, arktx LIKE vbap-arktx, kwmeng LIKE vbap-kwmeng, netwr LIKE vbap-netwr, "Inserted Ver 03.00 lfimg LIKE lips-lfimg, wadat_ist LIKE likp-wadat_ist, open_unit LIKE vbap-kwmeng, mbdat like vbep-mbdat, END OF x_output. TYPES: BEGIN OF x_vbep, vbeln LIKE vbep-vbeln, posnr LIKE vbep-posnr, etenr LIKE vbep-etenr, mbdat LIKE vbep-mbdat, END OF x_vbep. *----------------------------------------------------------------------* * Internal table declaration * *----------------------------------------------------------------------* DATA : t_vbak TYPE STANDARD TABLE OF x_vbak, t_vbap TYPE STANDARD TABLE OF x_vbap, t_lips TYPE STANDARD TABLE OF x_lips, t_kna1 TYPE STANDARD TABLE OF x_kna1, t_vbfa TYPE STANDARD TABLE OF x_vbfa, t_output TYPE STANDARD TABLE OF x_output, t_fieldcat TYPE TABLE OF slis_fieldcat_alv WITH HEADER LINE, t_vbep TYPE STANDARD TABLE OF x_vbep. DATA : wa_vbap TYPE x_vbap, wa_kna1 TYPE x_kna1, wa_lips TYPE x_lips, wa_vbfa TYPE x_vbfa, wa_output TYPE x_output, wa_vbep TYPE x_vbep. *----------------------------------------------------------------------* * Declaration for Email processing * *----------------------------------------------------------------------* DATA: docdata LIKE sodocchgi1, objpack LIKE sopcklsti1 OCCURS 1 WITH HEADER LINE, objtxt LIKE solisti1 OCCURS 10 WITH HEADER LINE, objbin1 LIKE solisti1 OCCURS 10 WITH HEADER LINE, objbin2 LIKE solisti1 OCCURS 10 WITH HEADER LINE, objbin_final LIKE solisti1 OCCURS 10 WITH HEADER LINE, reclist LIKE somlreci1 OCCURS 1 WITH HEADER LINE, tab_lines TYPE sy-tabix. DATA: gd_sender_type LIKE soextreci1-adr_typ. DATA: c_tab TYPE c VALUE cl_abap_char_utilities=>horizontal_tab, c_ret TYPE c VALUE cl_abap_char_utilities=>cr_lf. DATA: c_dev TYPE sy-sysid. *&---------------------------------------------------------------------* *& Include Z_0000__1_3_1_1___0023_SCR *&---------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME. SELECT-OPTIONS: s_vbeln FOR vbak-vbeln, "Sales Document s_kunnr FOR kna1-kunnr, "Customer Number s_land1 FOR kna1-land1, "Country of Destination * s_kvgr4 FOR vbak-kvgr4, "Customer Group s_KDGRP for knvv-KDGRP, "Customer Group * s_GPC, *Begin of change Ver 02.00 * s_lfdat FOR likp-lfdat. "Date of Delivery s_vdatu for vbak-vdatu. "Req Delivery date *End of change Ver 02.00 SELECTION-SCREEN END OF BLOCK b1. *&---------------------------------------------------------------------* *& Include Z_0000__1_3_1_1___0023_F01 *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form REFRESH_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM refresh_data . *Refresh internal table data. REFRESH : t_vbak , t_vbap , t_lips , t_kna1 , t_vbfa , t_output, t_fieldcat, t_vbep. ENDFORM. " REFRESH_DATA *&---------------------------------------------------------------------* *& Form FETCH_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM fetch_data . DATA l_index TYPE sy-index. *Select Sales Item data. SELECT k~vbeln k~kunnr v~kdgrp p~posnr p~matnr p~arktx p~kwmeng p~werks p~netwr "Inserted Ver 03.00 INTO CORRESPONDING FIELDS OF TABLE t_vbap FROM ( ( ( vbak AS k INNER JOIN vbap AS p ON k~vbeln = p~vbeln ) INNER JOIN kna1 AS a ON a~kunnr = k~kunnr ) INNER JOIN knvv AS v ON v~kunnr = a~kunnr AND k~vkorg = v~vkorg AND k~vtweg = v~vtweg AND k~spart = v~spart ) WHERE k~vbeln IN s_vbeln AND a~kunnr IN s_kunnr AND v~kdgrp IN s_kdgrp *Begin of insert Ver 02.00 and k~vdatu in s_vdatu. *End of insert Ver 02.00 IF t_vbap IS NOT INITIAL. SORT t_vbap BY vbeln posnr. *Select Sales Document Flow data from VBFA SELECT vbelv posnv vbeln posnn vbtyp_n matnr rfmng FROM vbfa INTO TABLE t_vbfa FOR ALL ENTRIES IN t_vbap WHERE vbelv = t_vbap-vbeln AND vbtyp_n = 'J'. IF t_vbfa IS NOT INITIAL. *Select Delivery based on Sales order on selection screen. SELECT p~vbeln p~lfdat p~wadat_ist s~posnr s~lfimg FROM ( likp AS p INNER JOIN lips AS s ON p~vbeln = s~vbeln ) INTO TABLE t_lips FOR ALL ENTRIES IN t_vbfa WHERE p~vbeln = t_vbfa-vbeln AND s~posnr = t_vbfa-posnn. *Begin of commenting Ver 02.00 * AND p~lfdat IN s_lfdat. *End of commenting Ver 02.00 ENDIF. * SORT t_lips BY vbeln posnr. *Select Customer name SELECT kunnr name1 FROM kna1 INTO TABLE t_kna1 FOR ALL ENTRIES IN t_vbap WHERE kunnr = t_vbap-kunnr AND land1 IN s_land1. SORT t_kna1 BY kunnr. DELETE ADJACENT DUPLICATES FROM t_kna1. *Select Product availability date from VBEP table SELECT vbeln posnr etenr mbdat FROM vbep INTO TABLE t_vbep FOR ALL ENTRIES IN t_vbap WHERE vbeln = t_vbap-vbeln AND posnr = t_vbap-posnr. *Create Output Internal table for Display ALV report LOOP AT t_vbap INTO wa_vbap. wa_output-kunnr = wa_vbap-kunnr. "Customer # READ TABLE t_kna1 INTO wa_kna1 WITH KEY kunnr = wa_vbap-kunnr. wa_output-name1 = wa_kna1-name1. "Customer Name wa_output-vbeln = wa_vbap-vbeln. "Sales Order # wa_output-arktx = wa_vbap-arktx. "Product description wa_output-kwmeng = wa_vbap-kwmeng. "Total Value of sales order quantity wa_output-netwr = wa_vbap-netwr. "Total Value of sales order line "Inserted Ver 03.00 *Read sales doc data for sales order READ TABLE t_vbfa INTO wa_vbfa WITH KEY vbelv = wa_vbap-vbeln posnv = wa_vbap-posnr. *Read delivery data READ TABLE t_lips INTO wa_lips WITH KEY vbeln = wa_vbfa-vbeln posnr = wa_vbfa-posnn. *Selecting Delivered unit of SO line SELECT SUM( DISTINCT rfmng ) INTO wa_output-lfimg FROM vbfa WHERE vbelv = wa_vbap-vbeln AND posnv = wa_vbap-posnr AND vbtyp_n = 'J'. *Begin of Change Ver 02.00 * IF s_lfdat IS NOT INITIAL AND wa_lips IS INITIAL. IF s_vdatu IS NOT INITIAL AND wa_lips IS INITIAL. *End of change Ver 02.00 CONTINUE. ELSE. wa_output-wadat_ist = wa_lips-wadat_ist. "When shipped (GI date) wa_output-open_unit = ( wa_vbap-kwmeng - wa_output-lfimg ). "Open unit of sales. ENDIF. READ TABLE t_vbep INTO wa_vbep WITH KEY vbeln = wa_vbap-vbeln posnr = wa_vbap-posnr. IF sy-subrc EQ 0. wa_output-mbdat = wa_vbep-mbdat. "Product Availability date ENDIF. APPEND wa_output TO t_output. CLEAR : wa_output,wa_lips,wa_vbfa,wa_vbap,wa_kna1. ENDLOOP. ENDIF. ENDFORM. " FETCH_DATA *&---------------------------------------------------------------------* *& Form BUILD_FIELD_CATALOG *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM build_field_catalog . PERFORM fieldcat_add USING 'KUNNR' 15 'Customer' 'Customer' '' '' '' '' ''. PERFORM fieldcat_add USING 'NAME1' 15 'Customer Name' 'Customer Name' '' '' '' '' ''. PERFORM fieldcat_add USING 'VBELN' 15 'Sales Order Number' 'Sales Order Number' '' '' '' '' ''. PERFORM fieldcat_add USING 'ARKTX' 15 'Product Discription' 'Product Discription' '' '' '' '' ''. PERFORM fieldcat_add USING 'KWMENG' 15 'Total Units of Sales Order Line' 'Total Units of Sales Order Line' '' '' '' '' ''. *Begin of insert Ver 03.00 PERFORM fieldcat_add USING 'NETWR' 15 'Total Value of Sales Order Line' 'Total Value of Sales Order Line' '' '' '' '' ''. *End of insert Ver 03.00 PERFORM fieldcat_add USING 'LFIMG' 15 'Delivered Unit of Sales Order Line' 'Delivered Unit of Sales Order Line' '' '' '' '' ''. PERFORM fieldcat_add USING 'WADAT_IST' 15 'When Shipped(GI date)' 'When Shipped(GI date)' '' '' '' '' ''. PERFORM fieldcat_add USING 'OPEN_UNIT' 15 'Open Units of sales Order line' 'Open Units of sales Order line' '' '' '' '' ''. PERFORM fieldcat_add USING 'MBDAT' 20 'Prdct Availability Date' 'Prdct Avail Date' '' '' '' '' ''. ENDFORM. " BUILD_FIELD_CATALOG *&---------------------------------------------------------------------* *& Form DISPLAY_ALV *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM display_alv . CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING * I_INTERFACE_CHECK = ' ' * I_BYPASSING_BUFFER = ' ' * I_BUFFER_ACTIVE = ' ' i_callback_program = sy-repid * I_CALLBACK_PF_STATUS_SET = ' ' * I_CALLBACK_USER_COMMAND = ' ' * I_CALLBACK_TOP_OF_PAGE = ' ' * I_CALLBACK_HTML_TOP_OF_PAGE = ' ' * I_CALLBACK_HTML_END_OF_LIST = ' ' * I_STRUCTURE_NAME = * I_BACKGROUND_ID = ' ' * I_GRID_TITLE = * I_GRID_SETTINGS = * IS_LAYOUT = it_fieldcat = t_fieldcat[] * IT_EXCLUDING = * IT_SPECIAL_GROUPS = * IT_SORT = * IT_FILTER = * IS_SEL_HIDE = * I_DEFAULT = 'X' * I_SAVE = ' ' * IS_VARIANT = * IT_EVENTS = * IT_EVENT_EXIT = * IS_PRINT = * IS_REPREP_ID = * I_SCREEN_START_COLUMN = 0 * I_SCREEN_START_LINE = 0 * I_SCREEN_END_COLUMN = 0 * I_SCREEN_END_LINE = 0 * I_HTML_HEIGHT_TOP = 0 * I_HTML_HEIGHT_END = 0 * IT_ALV_GRAPHICS = * IT_HYPERLINK = * IT_ADD_FIELDCAT = * IT_EXCEPT_QINFO = * IR_SALV_FULLSCREEN_ADAPTER = * IMPORTING * E_EXIT_CAUSED_BY_CALLER = * ES_EXIT_CAUSED_BY_USER = TABLES t_outtab = t_output * EXCEPTIONS * PROGRAM_ERROR = 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. ENDFORM. " DISPLAY_ALV *&---------------------------------------------------------------------* *& Form FIELDCAT_ADD *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_0250 text * -->P_15 text * -->P_C_CMP text * -->P_C_CMP text * -->P_0254 text * -->P_0255 text * -->P_0256 text * -->P_0257 text * -->P_0258 text *----------------------------------------------------------------------* FORM fieldcat_add USING lp_fieldname lp_outputlen lp_seltext_s lp_seltext_m lp_seltext_l lp_cfieldname lp_do_sum lp_key lp_no_zero. CLEAR: t_fieldcat. t_fieldcat-fieldname = lp_fieldname. t_fieldcat-outputlen = lp_outputlen. t_fieldcat-no_zero = lp_no_zero. t_fieldcat-seltext_s = lp_seltext_s. t_fieldcat-seltext_l = lp_seltext_l. IF lp_seltext_m IS INITIAL. t_fieldcat-seltext_m = t_fieldcat-seltext_s. ELSE. t_fieldcat-seltext_m = lp_seltext_m. ENDIF. IF t_fieldcat-seltext_l IS INITIAL. t_fieldcat-seltext_l = t_fieldcat-seltext_m. ELSE. t_fieldcat-seltext_l = lp_seltext_l. ENDIF. t_fieldcat-cfieldname = lp_cfieldname. t_fieldcat-do_sum = lp_do_sum. t_fieldcat-key = lp_key. APPEND t_fieldcat. ENDFORM. " FIELDCAT_ADD .

Purchase Requisition Status Report

This report is developed to get the current status of the PRs..This might be helpful for the similar requirement. REPORT z_0000__2_1_3_1___0003. *Include for Data declaration INCLUDE z_0000__2_1_3_1___0003_top. *Include for selection screen INCLUDE z_0000__2_1_3_1___0003_scr. *Include for Calculations INCLUDE z_0000__2_1_3_1___0003_f01. *----------------------------------------------------------------------* * Initialization * *----------------------------------------------------------------------* INITIALIZATION. PERFORM refresh_data. *----------------------------------------------------------------------* * Start of selection * *----------------------------------------------------------------------* START-OF-SELECTION. * Fetching the required Data PERFORM fetch_data. *Build Output internal table PERFORM build_output. **Build Layout PERFORM build_layout. *Build Field catalog. PERFORM build_field_catalog. *----------------------------------------------------------------------* * End of selection * *----------------------------------------------------------------------* END-OF-SELECTION. IF t_output[] IS INITIAL. MESSAGE text-001 TYPE 'I'. ELSE. *Display report output PERFORM display_alv. ENDIF. *&---------------------------------------------------------------------* *& Include Z_0000__2_1_3_1___0003_TOP *&---------------------------------------------------------------------* *Declaration of Tables TYPE-POOLS : slis. TABLES: eban, ebkn, lfa1. *Declaration of Struture TYPES: BEGIN OF x_eban, banfn LIKE eban-banfn, bnfpo LIKE eban-bnfpo , statu LIKE eban-statu , frgkz LIKE eban-frgkz , frgzu like eban-frgzu , frgst LIKE eban-frgst, ekgrp LIKE eban-ekgrp , ernam LIKE eban-ernam , afnam LIKE eban-afnam , TXZ01 like eban-TXZ01 , matnr LIKE eban-matnr , werks LIKE eban-werks , menge LIKE eban-menge , meins LIKE eban-meins , badat LIKE eban-badat , lfdat LIKE eban-lfdat , preis LIKE eban-preis, "Price in Purchase Requisition peinh LIKE eban-peinh, "Price Unit knttp LIKE eban-knttp , lifnr LIKE eban-lifnr , flief LIKE eban-flief , ebeln LIKE eban-ebeln, ebelp LIKE eban-ebelp , frggr LIKE eban-frggr, "release group waers LIKE eban-waers , rlwrt LIKE eban-rlwrt , kostl LIKE ebkn-kostl, aufnr LIKE ebkn-aufnr, END OF x_eban. TYPES: BEGIN OF x_lfa1, lifnr LIKE lfa1-lifnr, name1 LIKE lfa1-name1, END OF x_lfa1. TYPES : BEGIN OF x_t16fv, frggr LIKE t16fv-frggr, frgsx LIKE t16fv-frgsx, frgco LIKE t16fv-frgco, frgct LIKE t16fd-frgct, END OF x_t16fv. DATA : t_eban TYPE STANDARD TABLE OF x_eban WITH HEADER LINE . DATA : BEGIN OF t_output OCCURS 0, ernam LIKE eban-ernam , "Created By badat LIKE eban-badat , "Created On banfn LIKE eban-banfn, "PR bnfpo LIKE eban-bnfpo , "Item matnr LIKE eban-matnr , "Material maktx LIKE makt-maktx, "Material Description knttp LIKE eban-knttp , "A/c Assignment kostl LIKE ebkn-kostl, "Cost Centre aufnr LIKE ebkn-aufnr, "Order menge LIKE eban-menge , "Quantity meins LIKE eban-meins , "UOM rlwrt LIKE eban-rlwrt , "Total Value of Item waers LIKE eban-waers , "Curency lfdat LIKE eban-lfdat , "Delivery date werks LIKE eban-werks , "Plant ekgrp LIKE eban-ekgrp , "Purchasing group afnam LIKE eban-afnam , "Requisitioner * lifnr LIKE eban-lifnr , "Vendor * flief LIKE eban-flief , "Vendor flief LIKE lfa1-lifnr , "Vendor name1 LIKE lfa1-name1, "Vendor name approved1 LIKE adrp-name_text, approved2 LIKE adrp-name_text, approved3 LIKE adrp-name_text, approved4 LIKE adrp-name_text, approved5 LIKE adrp-name_text, approved6 LIKE adrp-name_text, approved7 LIKE adrp-name_text, approved8 LIKE adrp-name_text, appr1 LIKE t16fd-frgct, "Next approver1 appr2 LIKE t16fd-frgct, "Next approver2 appr3 LIKE t16fd-frgct, "Next approver3 appr4 LIKE t16fd-frgct, "Next approver4 appr5 LIKE t16fd-frgct, "Next approver5 appr6 LIKE t16fd-frgct, "Next approver6 appr7 LIKE t16fd-frgct, "Next approver7 appr8 LIKE t16fd-frgct, "Next approver8 ebeln LIKE eban-ebeln, "PO ebelp LIKE eban-ebelp , "PO Item END OF t_output. TYPES : BEGIN OF x_cdhdr, objectclas LIKE cdhdr-objectclas, objectid LIKE cdhdr-objectid, changenr LIKE cdhdr-changenr, username LIKE cdhdr-username, tcode LIKE cdhdr-tcode, END OF x_cdhdr. TYPES : BEGIN OF x_cdpos, objectclas LIKE cdpos-objectclas, objectid LIKE cdpos-objectid, changenr LIKE cdpos-changenr, tabkey LIKE cdpos-tabkey, END OF x_cdpos. DATA : t_cdhdr TYPE STANDARD TABLE OF x_cdhdr, t_cdpos TYPE STANDARD TABLE OF x_cdpos, wa_cdhdr TYPE x_cdhdr, l_objid LIKE cdhdr-objectid, wa_address TYPE bapiaddr3, l_tabix TYPE sy-tabix, l_frgkx LIKE t16fk-frgkx. DATA : t_lfa1 TYPE STANDARD TABLE OF x_lfa1, t_t16fv TYPE STANDARD TABLE OF x_t16fv, t_t16fv1 TYPE STANDARD TABLE OF x_t16fv, wa_eban TYPE x_eban, wa_lfa1 TYPE x_lfa1, wa_t16fv TYPE x_t16fv. DATA: BEGIN OF t_posted OCCURS 1. INCLUDE STRUCTURE bapirlcorq. DATA: END OF t_posted. DATA: BEGIN OF t_general OCCURS 1. INCLUDE STRUCTURE bapirlgnrq. DATA: END OF t_general. *Field catalog data declaration DATA : g_repid LIKE sy-repid, t_fieldcat TYPE slis_t_fieldcat_alv, wa_fieldcat LIKE LINE OF t_fieldcat, gs_layout TYPE slis_layout_alv. *Global data declaration for Flag DATA : g_flag1 TYPE c, g_flag2 type c, g_flag3 type c, g_flag4 type c, g_flag5 type c, g_flag6 type c, g_flag7 type c, g_flag8 type c, g_flag9 type c, g_flag10 type c, g_flag11 type c, g_flag12 type c, g_flag13 type c, g_flag14 type c, g_flag15 type c, g_flag16 type c. *&---------------------------------------------------------------------* *& Include Z_0000__2_1_3_1___0003_SCR *&---------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME. SELECT-OPTIONS: s_banfn FOR eban-banfn , "Purchase Requisition Number s_matnr FOR eban-matnr, "Material Number s_werks FOR eban-werks, "Plant s_lifnr FOR eban-lifnr, "Vendor s_ekgrp FOR eban-ekgrp, "Purchasing Group s_badat FOR eban-badat, "Requisition (Request) Date s_ernam FOR eban-ernam DEFAULT sy-uname, "Name of Person who Created the Object s_knttp FOR eban-knttp, "Account Assignment Category s_kostl FOR ebkn-kostl, "Cost Center s_aufnr FOR ebkn-aufnr, "Order Number s_lfdat FOR eban-lfdat, "Item Delivery Date s_statu FOR eban-statu. "Processing status of purchase requisition SELECTION-SCREEN END OF BLOCK b1 . *&---------------------------------------------------------------------* *& Include Z_0000__2_1_3_1___0003_F01 *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form FETCH_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM fetch_data . DATA l_count TYPE n. *Select Header Data SELECT a~banfn a~bnfpo a~statu a~frgkz a~frgzu a~frgst a~ekgrp a~ernam a~afnam a~txz01 a~matnr a~werks a~menge a~meins a~badat a~lfdat a~preis a~peinh a~knttp a~lifnr a~flief a~ebeln a~ebelp a~frggr a~waers a~rlwrt k~kostl k~aufnr INTO CORRESPONDING FIELDS OF TABLE t_eban FROM eban AS a INNER JOIN ebkn AS k ON k~banfn = a~banfn AND k~bnfpo = a~bnfpo WHERE a~banfn IN s_banfn AND a~matnr IN s_matnr AND a~werks IN s_werks AND a~lifnr IN s_lifnr AND a~ekgrp IN s_ekgrp AND a~badat IN s_badat AND a~ernam IN s_ernam AND a~knttp IN s_knttp AND a~statu IN s_statu AND k~kostl IN s_kostl AND k~aufnr IN s_aufnr AND a~lfdat IN s_lfdat. *Select Vendor names SELECT lifnr name1 INTO TABLE t_lfa1 FROM lfa1 FOR ALL ENTRIES IN t_eban WHERE lifnr = t_eban-lifnr OR lifnr = t_eban-flief. IF sy-subrc EQ 0. SORT t_lfa1 BY lifnr. DELETE ADJACENT DUPLICATES FROM t_lfa1. ENDIF. SORT t_eban BY banfn bnfpo. ENDFORM. " FETCH_DATA *&---------------------------------------------------------------------* *& Form BUILD_FIELD_CATALOG *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM build_field_catalog . CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' EXPORTING i_program_name = g_repid i_internal_tabname = 'T_OUTPUT' i_inclname = g_repid CHANGING ct_fieldcat = t_fieldcat EXCEPTIONS inconsistent_interface = 1 program_error = 2 OTHERS = 3. 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 t_fieldcat INTO wa_fieldcat. CASE wa_fieldcat-fieldname. WHEN 'BADAT'. wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = wa_fieldcat-seltext_l = wa_fieldcat-reptext_ddic = text-002. MODIFY t_fieldcat FROM wa_fieldcat. WHEN 'NAME1'. wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = wa_fieldcat-seltext_l = wa_fieldcat-reptext_ddic = text-003. MODIFY t_fieldcat FROM wa_fieldcat. * WHEN 'FRGCT'. * wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = * wa_fieldcat-seltext_l = wa_fieldcat-reptext_ddic * = text-004. * MODIFY t_fieldcat FROM wa_fieldcat. WHEN 'EBELP'. wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = wa_fieldcat-seltext_l = wa_fieldcat-reptext_ddic = text-005. MODIFY t_fieldcat FROM wa_fieldcat. WHEN 'RLWRT'. wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = wa_fieldcat-seltext_l = wa_fieldcat-reptext_ddic = text-006. MODIFY t_fieldcat FROM wa_fieldcat. WHEN 'APPR1'. wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = wa_fieldcat-seltext_l = wa_fieldcat-reptext_ddic = text-007. IF g_flag9 IS INITIAL. wa_fieldcat-no_out = 'X'. ENDIF. MODIFY t_fieldcat FROM wa_fieldcat. WHEN 'APPR2'. wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = wa_fieldcat-seltext_l = wa_fieldcat-reptext_ddic = text-007. IF g_flag10 IS INITIAL. wa_fieldcat-no_out = 'X'. ENDIF. MODIFY t_fieldcat FROM wa_fieldcat. WHEN 'APPR3'. wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = wa_fieldcat-seltext_l = wa_fieldcat-reptext_ddic = text-007. IF g_flag11 IS INITIAL. wa_fieldcat-no_out = 'X'. ENDIF. MODIFY t_fieldcat FROM wa_fieldcat. WHEN 'APPR4'. wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = wa_fieldcat-seltext_l = wa_fieldcat-reptext_ddic = text-007. IF g_flag12 IS INITIAL. wa_fieldcat-no_out = 'X'. ENDIF. MODIFY t_fieldcat FROM wa_fieldcat. WHEN 'APPR5'.. wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = wa_fieldcat-seltext_l = wa_fieldcat-reptext_ddic = text-007. IF g_flag13 IS INITIAL. wa_fieldcat-no_out = 'X'. ENDIF. MODIFY t_fieldcat FROM wa_fieldcat. WHEN 'APPR6'. wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = wa_fieldcat-seltext_l = wa_fieldcat-reptext_ddic = text-007. IF g_flag14 IS INITIAL. wa_fieldcat-no_out = 'X'. ENDIF. MODIFY t_fieldcat FROM wa_fieldcat. WHEN 'APPR7'. wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = wa_fieldcat-seltext_l = wa_fieldcat-reptext_ddic = text-007. IF g_flag15 IS INITIAL. wa_fieldcat-no_out = 'X'. ENDIF. MODIFY t_fieldcat FROM wa_fieldcat. WHEN 'APPR8'. wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = wa_fieldcat-seltext_l = wa_fieldcat-reptext_ddic = text-007. IF g_flag16 IS INITIAL. wa_fieldcat-no_out = 'X'. ENDIF. MODIFY t_fieldcat FROM wa_fieldcat. WHEN 'APPROVED1'. wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = wa_fieldcat-seltext_l = wa_fieldcat-reptext_ddic = text-008. IF g_flag1 IS INITIAL. wa_fieldcat-no_out = 'X'. ENDIF. MODIFY t_fieldcat FROM wa_fieldcat. WHEN 'APPROVED2'. wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = wa_fieldcat-seltext_l = wa_fieldcat-reptext_ddic = text-008. IF g_flag2 IS INITIAL. wa_fieldcat-no_out = 'X'. ENDIF. MODIFY t_fieldcat FROM wa_fieldcat. WHEN 'APPROVED3'. wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = wa_fieldcat-seltext_l = wa_fieldcat-reptext_ddic = text-008. IF g_flag3 IS INITIAL. wa_fieldcat-no_out = 'X'. ENDIF. MODIFY t_fieldcat FROM wa_fieldcat. WHEN 'APPROVED4'. wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = wa_fieldcat-seltext_l = wa_fieldcat-reptext_ddic = text-008. IF g_flag4 IS INITIAL. wa_fieldcat-no_out = 'X'. ENDIF. MODIFY t_fieldcat FROM wa_fieldcat. WHEN 'APPROVED5'. wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = wa_fieldcat-seltext_l = wa_fieldcat-reptext_ddic = text-008. IF g_flag5 IS INITIAL. wa_fieldcat-no_out = 'X'. ENDIF. MODIFY t_fieldcat FROM wa_fieldcat. WHEN 'APPROVED6'. wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = wa_fieldcat-seltext_l = wa_fieldcat-reptext_ddic = text-008. IF g_flag6 IS INITIAL. wa_fieldcat-no_out = 'X'. ENDIF. MODIFY t_fieldcat FROM wa_fieldcat. WHEN 'APPROVED7'. wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = wa_fieldcat-seltext_l = wa_fieldcat-reptext_ddic = text-008. IF g_flag7 IS INITIAL. wa_fieldcat-no_out = 'X'. ENDIF. MODIFY t_fieldcat FROM wa_fieldcat. WHEN 'APPROVED8'. wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = wa_fieldcat-seltext_l = wa_fieldcat-reptext_ddic = text-008. IF g_flag8 IS INITIAL. wa_fieldcat-no_out = 'X'. ENDIF. MODIFY t_fieldcat FROM wa_fieldcat. ENDCASE. ENDLOOP. ENDFORM. " BUILD_FIELD_CATALOG *&---------------------------------------------------------------------* *& Form DISPLAY_ALV *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM display_alv . CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING * I_INTERFACE_CHECK = ' ' * I_BYPASSING_BUFFER = ' ' * I_BUFFER_ACTIVE = ' ' i_callback_program = g_repid * I_CALLBACK_PF_STATUS_SET = ' ' i_callback_user_command = 'USER_COMMAND' * I_CALLBACK_TOP_OF_PAGE = ' ' * I_CALLBACK_HTML_TOP_OF_PAGE = ' ' * I_CALLBACK_HTML_END_OF_LIST = ' ' * I_STRUCTURE_NAME = * I_BACKGROUND_ID = ' ' * I_GRID_TITLE = * I_GRID_SETTINGS = is_layout = gs_layout it_fieldcat = t_fieldcat[] * IT_EXCLUDING = * IT_SPECIAL_GROUPS = * IT_SORT = * IT_FILTER = * IS_SEL_HIDE = * I_DEFAULT = 'X' * I_SAVE = ' ' * IS_VARIANT = * IT_EVENTS = * IT_EVENT_EXIT = * IS_PRINT = * IS_REPREP_ID = * I_SCREEN_START_COLUMN = 0 * I_SCREEN_START_LINE = 0 * I_SCREEN_END_COLUMN = 0 * I_SCREEN_END_LINE = 0 * I_HTML_HEIGHT_TOP = 0 * I_HTML_HEIGHT_END = 0 * IT_ALV_GRAPHICS = * IT_HYPERLINK = * IT_ADD_FIELDCAT = * IT_EXCEPT_QINFO = * IR_SALV_FULLSCREEN_ADAPTER = * IMPORTING * E_EXIT_CAUSED_BY_CALLER = * ES_EXIT_CAUSED_BY_USER = TABLES t_outtab = t_output EXCEPTIONS program_error = 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. ENDFORM. " DISPLAY_ALV *&---------------------------------------------------------------------* *& Form BUILD_LAYOUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM build_layout . * ls_layout-f2code = p_f2code. * ls_layout-zebra = p_zebra. gs_layout-zebra = 'X'. gs_layout-colwidth_optimize = 'X'. * ls_layout-cell_merge = p_merge. * ls_layout-no_input = p_noinpt. * ls_layout-no_vline = p_novlin. * ls_layout-no_colhead = p_nocolh. * ls_layout-lights_condense = p_lightc. * gs_layout-totals_text = 'X'. * ls_layout-subtotals_text = p_sttext. * ls_layout-totals_only = p_totonl. * ls_layout-key_hotspot = p_keyhot. * ls_layout-detail_popup = p_detpop. * ls_layout-group_change_edit = p_groups. * ls_layout-group_buttons = space. ENDFORM. " BUILD_LAYOUT *&---------------------------------------------------------------------* *& Form REFRESH_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM refresh_data . REFRESH : t_output, t_eban, t_lfa1, * t_makt, t_t16fv. CLEAR : wa_eban, wa_lfa1, * wa_makt, wa_t16fv. g_repid = sy-repid. ENDFORM. " REFRESH_DATA *User command. *Display the ME53N tcode whenever any PO is double clicked on report *output FORM user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield . IF rs_selfield-fieldname = 'BANFN'. READ TABLE t_output INDEX rs_selfield-tabindex. SET PARAMETER ID 'BAN' FIELD t_output-banfn. CALL TRANSACTION 'ME53N' AND SKIP FIRST SCREEN. ENDIF. ENDFORM. " USER_COMMAND *&---------------------------------------------------------------------* *& Form BUILD_OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM build_output . DATA l_tabix TYPE sy-tabix. *Build Output internal table. LOOP AT t_eban INTO wa_eban. t_output-ernam = wa_eban-ernam . "Created By t_output-badat = wa_eban-badat . "Created On t_output-banfn = wa_eban-banfn. "PR t_output-bnfpo = wa_eban-bnfpo . "Item t_output-matnr = wa_eban-matnr . "Material t_output-maktx = wa_eban-txz01 . "Material Description t_output-knttp = wa_eban-knttp . "A/c Assignment t_output-kostl = wa_eban-kostl. "Total Value of Item t_output-aufnr = wa_eban-aufnr. "Order t_output-menge = wa_eban-menge . "Quantity t_output-meins = wa_eban-meins . "UOM IF wa_eban-rlwrt IS NOT INITIAL. t_output-rlwrt = wa_eban-rlwrt . ELSEIF wa_eban-peinh = 1. t_output-rlwrt = wa_eban-preis * wa_eban-menge. ELSEIF wa_eban-peinh GT 1. wa_eban-preis = wa_eban-preis / wa_eban-peinh. t_output-rlwrt = wa_eban-preis * wa_eban-menge. ENDIF. t_output-waers = wa_eban-waers . "Curency t_output-lfdat = wa_eban-lfdat . "Delivery date t_output-werks = wa_eban-werks . "Plant t_output-ekgrp = wa_eban-ekgrp . "Purchasing group t_output-afnam = wa_eban-afnam . "Requisitioner IF wa_eban-flief IS NOT INITIAL. t_output-flief = wa_eban-flief . "Vendor READ TABLE t_lfa1 INTO wa_lfa1 WITH KEY lifnr = wa_eban-flief. IF sy-subrc EQ 0. t_output-name1 = wa_lfa1-name1. "Vendor name ENDIF. ELSE. t_output-flief = wa_eban-lifnr . "Vendor READ TABLE t_lfa1 INTO wa_lfa1 WITH KEY lifnr = wa_eban-lifnr. IF sy-subrc EQ 0. t_output-name1 = wa_lfa1-name1. "Vendor name ENDIF. ENDIF. t_output-ebeln = wa_eban-ebeln. "PO t_output-ebelp = wa_eban-ebelp . "PO Item *Begin of for approver names *Select Approved by names l_objid = wa_eban-banfn. *Check Release indicator for Approved by names IF ( wa_eban-frgkz = 'Z' OR wa_eban-frgkz = '2' OR wa_eban-frgkz = 'Y' ). SELECT objectclas objectid changenr username tcode FROM cdhdr INTO CORRESPONDING FIELDS OF TABLE t_cdhdr WHERE objectclas = 'BANF' AND objectid = l_objid AND ( tcode = 'ME54N' OR tcode = 'ME55N' OR tcode = 'ME54' OR tcode = 'ME55'). IF sy-subrc EQ 0. "Begin If for Approved by SELECT objectclas objectid changenr FROM cdpos INTO CORRESPONDING FIELDS OF TABLE t_cdpos FOR ALL ENTRIES IN t_cdhdr WHERE objectclas = t_cdhdr-objectclas AND objectid = t_cdhdr-objectid AND changenr = t_cdhdr-changenr. IF sy-subrc EQ 0. DATA l_username LIKE adrp-name_text. LOOP AT t_cdhdr INTO wa_cdhdr. l_tabix = sy-tabix. *Get Full name of Approved by PERFORM get_user_name USING wa_cdhdr-username CHANGING l_username. CASE l_tabix. WHEN '1'. t_output-approved1 = l_username. g_flag1 = 1. WHEN '2'. t_output-approved2 = l_username. g_flag2 = 1. WHEN '3'. t_output-approved3 = l_username. g_flag3 = 1. WHEN '4'. t_output-approved4 = l_username. g_flag4 = 1. WHEN '5'. t_output-approved5 = l_username. g_flag5 = 1. WHEN '6'. t_output-approved6 = l_username. g_flag6 = 1. WHEN '7'. t_output-approved7 = l_username. g_flag7 = 1. WHEN '8'. t_output-approved8 = l_username. g_flag8 = 1. ENDCASE. CLEAR l_tabix. ENDLOOP. ENDIF. ENDIF. "End of IF for Approved by ELSE. ENDIF. *Select Next approver names *Check PR is Released or not IF ( wa_eban-frgkz = 'Z' OR wa_eban-frgkz = '2' ). "Begin of IF for Next Approver APPEND t_output. CLEAR : wa_eban, wa_lfa1, wa_t16fv, t_output, t_t16fv1. ELSE. *Select Release code. REFRESH t_t16fv. CLEAR wa_t16fv. SELECT v~frggr v~frgsx v~frgco d~frgct FROM t16fv AS v INNER JOIN t16fd AS d ON d~frggr = v~frggr AND d~frgco = v~frgco INTO TABLE t_t16fv WHERE v~frggr = wa_eban-frggr AND v~frgsx = wa_eban-frgst AND d~spras = sy-langu. IF sy-subrc EQ 0. SORT t_t16fv BY frggr frgsx frgco. DELETE ADJACENT DUPLICATES FROM t_t16fv. *Applying BAPI to get Approver names. CALL FUNCTION 'BAPI_REQUISITION_GETRELINFO' EXPORTING number = wa_eban-banfn item = wa_eban-bnfpo * REL_CODE = TABLES general_release_info = t_general * release_prerequisites = r_prereq release_already_posted = t_posted * release_final = r_final * RETURN = . LOOP AT t_t16fv INTO wa_t16fv WHERE frggr = wa_eban-frggr AND frgsx = wa_eban-frgst. READ TABLE t_posted WITH KEY rel_code1 = wa_t16fv-frgco. IF sy-subrc EQ 0. APPEND wa_t16fv TO t_t16fv1. DELETE t_t16fv. ELSEIF sy-subrc NE 0. READ TABLE t_posted WITH KEY rel_code2 = wa_t16fv-frgco. IF sy-subrc EQ 0. APPEND wa_t16fv TO t_t16fv1. DELETE t_t16fv. ELSEIF sy-subrc NE 0. READ TABLE t_posted WITH KEY rel_code3 = wa_t16fv-frgco. IF sy-subrc EQ 0. APPEND wa_t16fv TO t_t16fv1. DELETE t_t16fv. ELSEIF sy-subrc NE 0. READ TABLE t_posted WITH KEY rel_code4 = wa_t16fv-frgco. IF sy-subrc EQ 0. APPEND wa_t16fv TO t_t16fv1. DELETE t_t16fv. ELSEIF sy-subrc NE 0. READ TABLE t_posted WITH KEY rel_code5 = wa_t16fv-frgco. IF sy-subrc EQ 0. IF sy-subrc EQ 0. APPEND wa_t16fv TO t_t16fv1. DELETE t_t16fv. ELSEIF sy-subrc NE 0. READ TABLE t_posted WITH KEY rel_code6 = wa_t16fv-frgco. IF sy-subrc EQ 0. IF sy-subrc EQ 0. APPEND wa_t16fv TO t_t16fv1. DELETE t_t16fv. ELSEIF sy-subrc NE 0. READ TABLE t_posted WITH KEY rel_code7 = wa_t16fv-frgco. IF sy-subrc EQ 0. IF sy-subrc EQ 0. APPEND wa_t16fv TO t_t16fv1. DELETE t_t16fv. ELSEIF sy-subrc NE 0. READ TABLE t_posted WITH KEY rel_code8 = wa_t16fv-frgco. IF sy-subrc EQ 0. APPEND wa_t16fv TO t_t16fv1. DELETE t_t16fv. ENDIF. ENDIF. ENDIF. ENDIF. ENDIF. ENDIF. ENDIF. ENDIF. ENDIF. ENDIF. ENDIF. ENDLOOP. CLEAR wa_t16fv. LOOP AT t_t16fv INTO wa_t16fv. CASE sy-tabix . WHEN '1'. t_output-appr1 = wa_t16fv-frgco. g_flag9 = 1. WHEN '2'. t_output-appr2 = wa_t16fv-frgco. g_flag10 = 1. WHEN '3'. t_output-appr3 = wa_t16fv-frgco. g_flag11 = 1. WHEN '4'. t_output-appr4 = wa_t16fv-frgco. g_flag12 = 1. WHEN '5'. t_output-appr5 = wa_t16fv-frgco. g_flag13 = 1. WHEN '6'. t_output-appr6 = wa_t16fv-frgco. g_flag14 = 1. WHEN '7'. t_output-appr7 = wa_t16fv-frgco. g_flag15 = 1. WHEN '8'. t_output-appr8 = wa_t16fv-frgco. g_flag16 = 1. ENDCASE. ENDLOOP. APPEND t_output. CLEAR : wa_eban, wa_lfa1, wa_t16fv, t_output, t_t16fv1. ELSE. APPEND t_output. CLEAR : wa_eban, wa_lfa1, wa_t16fv, t_output, t_t16fv1. ENDIF. *End of for approver names ENDIF. "End of IF for Next Approver ENDLOOP. ENDFORM. " BUILD_OUTPUT *&---------------------------------------------------------------------* *& Form GET_USER_NAME *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_WA_CDHDR_USERNAME text * <--P_L_USERNAME text *----------------------------------------------------------------------* FORM get_user_name USING p_userid CHANGING p_username. DATA address TYPE bapiaddr3. DATA BEGIN OF return OCCURS 0. INCLUDE TYPE bapiret2. DATA END OF return. CALL FUNCTION 'BAPI_USER_GET_DETAIL' EXPORTING username = p_userid IMPORTING address = address TABLES return = return. IF address-fullname IS NOT INITIAL. p_username = address-fullname. ELSE. p_username = p_userid. ENDIF. ENDFORM. " GET_USER_NAME

Tuesday, June 7, 2011

Tcodes used in SAP Plant Maintenance

IA07 Display General Task List
IA03 Display Equipment Task List
IA13 Display Functional Location Task List
IR03 Display Work Centre
KO88 Settle Order (Single)
IW32 Change Work Order
IW31 Create Work Order
IW33 Display Work Order
IW38 Work Order List Editing - Change
IW39 Work Order List Editing - Display
IW40 Work Order List Editing - Display Multi Level
ME21 Create Purchase Order (pre R4.6)
ME21N Create Purchase Order (R4.6 onwards)
IP41 Create Single Cycle Plan (R4 onwards)
IE02 Change Equipment
IE01 Create Equipment
IE03 Display Equipment
IE05 Equipment List Editing - Change
IE08 Equipment List Editing - Display
IW42 Overall Completion Confirmation
IW26 Create Notification
QS42 Display Catalog
ML81 Create Service Entry Sheet
MM03 Display Material
CS03 Display Material BOM
IW13 Material Where Used List
IW66 Change Notification List of Tasks
IW67 Display Notification List of Tasks
IW22 Change Notification
IW23 Display Notification
IH01 Display Functional Location Structure
MB11 Goods Movement
MB31 Goods Receipt
IW8W Goods Receipt for Refurbishment (R4 onwards)
IP02 Change Maintenance Plan
IP03 Display Maintenance Plan
IP10 Schedule Maintenance Plan
IP30 Deadline Monitoring
IP11 Change Maintenance Strategy
IP12 Display Maintenance Strategy
IP19 Maintenance Scheduling Overview Graphic
IP24 Maintenance Scheduling Overview List
IW28 Notification List Editing - Change
IW29 Notification List Editing - Display
IW30 Notification List Editing - Display Multi Level
IW64 Change Notification List of Activities
IW65 Display Notification List of Activities
IW68 Change Notification List of Items
IW69 Display Notification List of Items
IQ03 Display Serial Numbers
IW24 Create Notification
IP42 Create Strategy Maintenance Plan (from R4 onwards)
IW25 Create Notification
IL02 Change Functional Location
IL01 Create Functional Location
IL03 Display Functional Location
IL05 Functional Location List Editing - Change
IL06 Functional Location List Editing - Display
IW41 Time Confirmation - Indvidual Entry
IW48 Time Confirmation - Collective Entry with Selection
IW44 Time Confirmation - Collective Entry no Selection
IA11 Create Functional LocationTask Lists
IA12 Change Functional Location Task List
IL02 Change Functional Location
IA05 Create General Task List
IA06 Change General Task List
IA01 Create Equpment Task List
IA02 Change Equipment Task List
IE03 Display Equipment
IR01 Create Work Centre
IR02 Change Work Centre
CA85 Replace Work Centre
IP13 Strategy Package Sequence
IP14 Strategy Package Sequence
IP04 Create Maintenance Item
IP05 Change Maintenance Item
IP06 Display Maintenance Item
IP17 Maintenance Item List Editing - Change
IP18 Maintenance Item List Editing - Display
IP02 Change Maintenance Plan
IP03 Display Maintenance Plan
IP15 Maintenance Plan List Editing - Change
IP16 Maintenance Plan List Editing - Display
IK11 Create Measurement Documents
IK12 Change Measurement Documents
IK13 Display Measurement Documents
IK22 Measurement Documents List Editing - Create
IK21 Measurement Documents List Editing - Create
IK22 Measurement Documents List Editing - Create
IK18 Measurement Documents List Editing - Change
IK17 Measurement Documents List Editing - Display
IK41 Measurement Documents List Editing - Display Archive
IQ01 Create Serial Numbers
IQ02 Change Serial numbers
IQ04 Serial Numbers List Editing - Create
IQ08 Serial Numbers List Editing - Change
IQ09 Serial Numbers List Editing - Display
IK01 Create Measurment Point
IK02 Change Measurement Point
Ik03 Display Measurement Point
IK08 Measurement Point List Editing - Change
Ik07 Measurement Point List Editing - Display

Wednesday, April 13, 2011

Radio Button ( Toggle) on selection screen

This program helps to maintain selection screen based on Radio button selection.

When we have two radio buttons on the selection screen and while selecting the first button only few fields should display. Rest fields should be hidden.



A Simple program logic is given as below.

First create radio button with user command.
Then create selection screen fields with modification id numbers.

After this event 'At Selection Screen On Output' is called to display the fields based on radio button selection.

TABLES: mara.
TABLES sscrfields.


PARAMETERS : rb_one RADIOBUTTON GROUP rb1
USER-COMMAND xyz
DEFAULT 'X',
rb_two RADIOBUTTON GROUP rb1.

selection-screen begin of block b1 with frame .
PARAMETERS: p_file TYPE rlgrap-filename MODIF ID id1.
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME.
SELECT-OPTIONS: s_mara FOR mara-matnr MODIF ID id2,
s_date FOR sy-datum MODIF ID id2.
SELECTION-SCREEN END OF BLOCK b2.


AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF rb_one EQ 'X'.
IF screen-group1 = 'ID1'.
* screen-required = 1.
screen-active = 1.
MODIFY SCREEN.
ENDIF.
ELSEIF rb_two EQ 'X'.
IF screen-group1 = 'ID2'.
screen-active = 0.
MODIFY SCREEN.
ENDIF..

ENDIF.
ENDLOOP.

Thursday, April 7, 2011

Upload Program to Create Notification

This program helps to upload legacy system data to SAP system to create Notification.

F4 help id provided at selection screen to upload data in excel file format.

After program execution Notification will be created. Error log file will be created at presentation server.

Program logic is given as below.

REPORT zpmcima0001
NO STANDARD PAGE HEADING LINE-SIZE 255.
TYPE-POOLS: truxs.
************************************************************************
* Struture Declaration *
************************************************************************
TYPES: BEGIN OF ty_data,
notif_type LIKE bapi2080-notif_type,
short_text LIKE bapi2080_nothdri-short_text, "Short Text for Notification
funct_loc LIKE bapi2080_nothdri-funct_loc, "Functional location,
equipment LIKE bapi2080_nothdri-equipment, "Equipment

* long_text TYPE CHAR2000,
plangroup LIKE bapi2080_nothdri-plangroup, "PlannerGroup
maintplant LIKE bapi2080_nothdri-maintplant, "Plant
pm_wkctr LIKE bapi2080_nothdri-pm_wkctr, "Maint. Work Center
reportedby LIKE bapi2080_nothdri-reportedby, "Reported By
priority LIKE bapi2080_nothdri-priority, "Priority
strmlfndate LIKE bapi2080_nothdri-strmlfndate, "Malfunction Start (DDMMYYYY)
strmlfntime LIKE bapi2080_nothdri-strmlfntime, "Malfunction StartTime (HHMMSS)(24 hour format)
endmlfndate LIKE bapi2080_nothdri-endmlfndate, "Malfunction End (DDMMYYYY)
endmlfntime LIKE bapi2080_nothdri-endmlfntime, "Malfunction EndTime (HHMMSS)(24 hour format)
desstdate LIKE bapi2080_nothdri-desstdate, "Required Start (DDMMYYYY)
dessttime LIKE bapi2080_nothdri-dessttime, "Required Starttime (HHMMSS)(24 hour format)"
desenddate LIKE bapi2080_nothdri-desenddate, "Required End (DDMMYYYY)
desendtm LIKE bapi2080_nothdri-desendtm, "Required End Time (HHMMSS)(24 hour format)"
breakdown LIKE bapi2080_nothdri-breakdown, "Break down Indicator (Y or N)
long_text LIKE bapi2080_notfulltxti-text_line, "Long text
item_sort_no LIKE bapi2080_notitemi-item_sort_no, "Item Sort Number
dl_codegrp LIKE bapi2080_notitemi-dl_codegrp, "Object part code group
dl_code LIKE bapi2080_notitemi-dl_code, "Object part code
d_codegrp LIKE bapi2080_notitemi-d_codegrp, "Damage code group
d_code LIKE bapi2080_notitemi-d_code, "Damage code
descript LIKE bapi2080_notitemi-descript, "Item Text
item_key LIKE bapi2080_notcausi-item_key, "Item Key for Cause "New Added
cause_sort_no LIKE bapi2080_notcausi-cause_sort_no, "Cause Sort Number "New Added
cause_codegrp LIKE bapi2080_notcausi-cause_codegrp, "Cause code group
cause_code LIKE bapi2080_notcausi-cause_code, "Cause code
causetext LIKE bapi2080_notcausi-causetext, "Cause Text

act_key LIKE bapi2080_notactvi-act_key, "Iteam Key for Activity "New Addded
act_sort_no LIKE bapi2080_notactvi-act_sort_no, "Activity Sort Number
act_codegrp LIKE bapi2080_notactvi-act_codegrp, "Activity code group
act_code LIKE bapi2080_notactvi-act_code, "Activity code
acttext LIKE bapi2080_notactvi-acttext, "Activity Text
start_date LIKE bapi2080_notactvi-start_date, "START_DATE Activity Start date
start_time LIKE bapi2080_notactvi-start_time, "START_TIME Activity Start Time
end_date LIKE bapi2080_notactvi-end_date, "END_DATE Activity End date
end_time LIKE bapi2080_notactvi-end_time, "END_TIME Activity End Time
END OF ty_data.

TYPES: BEGIN OF ty_log,
notif_type(2),
short_text(40),
funct_loc(30),
equipment(18),
plangroup(3) ,
maintplant(4) ,
pm_wkctr(8) ,
reportedby(12),
priority(1) ,
strmlfndate(8),
strmlfntime(6),
endmlfndate(8),
endmlfntime(6),
desstdate(8) ,
dessttime(6) ,
desenddate(8),
desendtm(6) ,
breakdown(1) ,
text TYPE char255,
END OF ty_log.

TYPES: BEGIN OF ty_log1,
notification_type(4),
notification_text(40),
functional_location(30),
equipment(18),
planner_group(15),
plant(8),
maint_work_center(16),
reported_by(12),
priority(10),
malfunction_startdate(20),
malfunction_starttime(20),
malfunction_enddate(20),
malfunction_endtime(20),
required_startdate(20),
required_starttime(20),
required_enddate(20),
required_endtime(20),
breakdown_indicator(20),
text TYPE char255,
END OF ty_log1.

TYPES: BEGIN OF ty_equi,
equnr LIKE equi-equnr,
iwerk LIKE equz-iwerk,
tplnr LIKE iloa-tplnr,
END OF ty_equi.
************************************************************************
* Intrnal Table Declaration *
************************************************************************
DATA: it_nothdri TYPE STANDARD TABLE OF bapi2080_nothdri WITH HEADER LINE,
it_bapiret2 TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE,
it_nothdre TYPE STANDARD TABLE OF bapi2080_nothdre WITH HEADER LINE,
it_notfulltxti TYPE STANDARD TABLE OF bapi2080_notfulltxti WITH HEADER LINE,
it_notitemi TYPE STANDARD TABLE OF bapi2080_notitemi WITH HEADER LINE,
it_notcausi TYPE STANDARD TABLE OF bapi2080_notcausi WITH HEADER LINE,
it_notactvi TYPE STANDARD TABLE OF bapi2080_notactvi WITH HEADER LINE,
it_data TYPE STANDARD TABLE OF ty_data,
it_raw TYPE truxs_t_text_data,
it_equi TYPE STANDARD TABLE OF ty_equi,
it_log TYPE STANDARD TABLE OF ty_log,
wa_equi TYPE ty_equi,
wa_data TYPE ty_data.

************************************************************************
* Data Declaration *
************************************************************************
DATA: wa_log TYPE ty_log,
wa_t100 TYPE t100,
g_flag TYPE c,
g_flag1 TYPE c, "Used for log file
g_type LIKE bapi2080-notif_type,
g_count_item LIKE bapi2080_notitemi-item_sort_no,
g_count_in_error TYPE i,
error_text(200) TYPE c,
g_count_confirmed TYPE i.

************************************************************************
* Selection Screen *
************************************************************************
*Upload File Selection Screen
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS : p_file LIKE rlgrap-filename OBLIGATORY .
SELECTION-SCREEN END OF BLOCK b1.
*Log File selection screen
*SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME.
*PARAMETERS : p_file1 LIKE rlgrap-filename OBLIGATORY .
*SELECTION-SCREEN END OF BLOCK b2.
************************************************************************
* At Selection Screen *
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = ' '
IMPORTING
file_name = p_file.

*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file1.
*
* CALL FUNCTION 'F4_FILENAME'
* EXPORTING
* program_name = syst-cprog
* dynpro_number = syst-dynnr
* field_name = ' '
* IMPORTING
* file_name = p_file1.
************************************************************************
* Start of Selection *
************************************************************************
START-OF-SELECTION.
*Read the data from the file to internal table.
PERFORM read_data.
*Create Measuring Doc
PERFORM create_notification.
*Download Log File
PERFORM download_file.

*&---------------------------------------------------------------------*
*& Form READ_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM read_data .
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR =
i_line_header = 'X'
i_tab_raw_data = it_raw
i_filename = p_file
TABLES
i_tab_converted_data = it_data[]
* EXCEPTIONS
* CONVERSION_FAILED = 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.
RAISE upload_problem.
ENDIF.
ENDFORM. " READ_DATA


*&---------------------------------------------------------------------*
*& Form CREATE_NOTIFICATION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_notification .
DATA: l_type TYPE qmart,
ls_notifheader TYPE bapi2080_nothdre,
l_equnr TYPE equnr,
l_tplnr TYPE tplnr.
*Select Equipment Number and Plant combination into an internal table
SELECT equnr iwerk tplnr
INTO TABLE it_equi
FROM v_equi
WHERE iwerk = 'I302'.

SORT it_equi BY equnr tplnr.
DELETE ADJACENT DUPLICATES FROM it_equi.
g_count_item = 1.

LOOP AT it_data INTO wa_data.
CLEAR: it_notitemi,
it_notcausi,
it_notactvi.

IF ( wa_data-notif_type IS NOT INITIAL AND g_flag IS INITIAL ).
g_type = wa_data-notif_type.
*Check plant whether it belongs to gpec (i302) or not.
IF wa_data-equipment IS NOT INITIAL .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_data-equipment
IMPORTING
output = l_equnr.

READ TABLE it_equi INTO wa_equi
WITH KEY equnr = l_equnr.
IF sy-subrc <> 0.
PERFORM build_log_header.
MOVE-CORRESPONDING wa_data TO wa_log.
CONCATENATE 'Equipment' wa_data-equipment 'does not belong to GPEC plant' INTO wa_log-text
SEPARATED BY space.
APPEND wa_log TO it_log.
PERFORM build_error_output.
CLEAR: wa_equi,wa_data.
CONTINUE.
ELSE.
it_nothdri-equipment = wa_data-equipment. "'900000000'."'10000030'.
ENDIF.
ENDIF.
IF wa_data-funct_loc IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_TPLNR_INPUT'
EXPORTING
input = wa_data-funct_loc
i_flg_check_internal = 'X'
IMPORTING
output = l_tplnr.
READ TABLE it_equi INTO wa_equi
WITH KEY tplnr = l_tplnr.
IF sy-subrc <> 0.
PERFORM build_log_header.
MOVE-CORRESPONDING wa_data TO wa_log.
CONCATENATE 'Functiona Location' wa_data-funct_loc 'does not belong to GPEC plant' INTO wa_log-text
SEPARATED BY space.
APPEND wa_log TO it_log.
PERFORM build_error_output.
CLEAR: wa_equi,wa_data.
CONTINUE.
ELSEIF sy-subrc EQ 0 .
* it_nothdri-funct_loc = wa_data-funct_loc.
it_nothdri-funct_loc = l_tplnr.
ENDIF.
ENDIF.
* create header data
it_nothdri-refobjectkey = wa_data-notif_type. "'B2'."'PJAREF'.
it_nothdri-reportedby = wa_data-reportedby. "'ASC3832'.
it_nothdri-short_text = wa_data-short_text. "'AKS Short Test from BAPI'.
it_nothdri-priority = wa_data-priority. "'2'."High
it_nothdri-plangroup = wa_data-plangroup.
it_nothdri-maintplant = wa_data-maintplant.
it_nothdri-pm_wkctr = wa_data-pm_wkctr.
it_nothdri-strmlfndate = wa_data-strmlfndate.
it_nothdri-strmlfntime = wa_data-strmlfntime.
it_nothdri-endmlfndate = wa_data-endmlfndate.
it_nothdri-endmlfntime = wa_data-endmlfntime.
it_nothdri-desstdate = wa_data-desstdate.
it_nothdri-dessttime = wa_data-dessttime.
it_nothdri-desenddate = wa_data-desenddate.
it_nothdri-desendtm = wa_data-desendtm.
IF wa_data-breakdown = 'Y'.
it_nothdri-breakdown = 'X'.
ENDIF.

*Create long text
PERFORM create_long_text USING wa_data-long_text.

*Item
IF wa_data-item_sort_no IS NOT INITIAL.
it_notitemi-item_key = wa_data-item_sort_no.
it_notitemi-item_sort_no = wa_data-item_sort_no. "'1'.
it_notitemi-descript = wa_data-descript."'Test Item '.
it_notitemi-d_codegrp = wa_data-d_codegrp." 'FCSCP001'.
it_notitemi-d_code = wa_data-d_code. "'CP01'.
it_notitemi-dl_codegrp = wa_data-dl_codegrp. "'FCP001'.
it_notitemi-dl_code = wa_data-dl_code. "'P001'.
APPEND it_notitemi.
ENDIF.

*Cause
IF wa_data-cause_sort_no IS NOT INITIAL. "'1'..
it_notcausi-cause_sort_no = wa_data-cause_sort_no. "'1'.
it_notcausi-item_sort_no = wa_data-item_sort_no. "'1'.
it_notcausi-item_key = wa_data-item_key.
it_notcausi-causetext = wa_data-causetext."'Test Cause'.
it_notcausi-cause_codegrp = wa_data-cause_codegrp."'FCVNP001'.
it_notcausi-cause_code = wa_data-cause_code. "'CC01'.
APPEND it_notcausi.
ENDIF.

*Activity
IF wa_data-act_key IS NOT INITIAL.
it_notactvi-act_key = wa_data-act_key.
it_notactvi-act_sort_no = wa_data-act_sort_no. "'1'.
it_notactvi-item_sort_no = wa_data-act_key. " '1'.
it_notactvi-acttext = wa_data-acttext."'Test Activity'.
it_notactvi-act_codegrp = wa_data-act_codegrp."'FCVNP001'.
it_notactvi-act_code = wa_data-act_code. "'RM06'.
it_notactvi-start_date = wa_data-start_date."'06.10.2010'.
it_notactvi-start_time = wa_data-start_time. "'182118'.
it_notactvi-end_date = wa_data-end_date."'06.10.2010'.
it_notactvi-end_time = wa_data-end_time. "'182139'.
APPEND it_notactvi.
ENDIF.
g_flag = 'X'.
ELSEIF ( wa_data-notif_type IS INITIAL AND g_flag IS NOT INITIAL ).
g_count_item = g_count_item + 1.
*Create long text
PERFORM create_long_text USING wa_data-long_text.
*Insert Item level data
IF wa_data-item_sort_no IS NOT INITIAL.
it_notitemi-item_key = wa_data-item_sort_no.
it_notitemi-item_sort_no = wa_data-item_sort_no. "'1'.
it_notitemi-descript = wa_data-descript."'Test Item '.
it_notitemi-d_codegrp = wa_data-d_codegrp." 'FCSCP001'.
it_notitemi-d_code = wa_data-d_code. "'CP01'.
it_notitemi-dl_codegrp = wa_data-dl_codegrp. "'FCP001'.
it_notitemi-dl_code = wa_data-dl_code. "'P001'.
APPEND it_notitemi.
ELSE.
it_notitemi-item_key = g_count_item.
it_notitemi-item_sort_no = g_count_item.
APPEND it_notitemi.
ENDIF.
*Cause
IF wa_data-cause_sort_no IS NOT INITIAL. "'1'..
it_notcausi-cause_sort_no = wa_data-cause_sort_no. "'1'.
IF wa_data-item_sort_no IS INITIAL.
it_notcausi-item_sort_no = g_count_item.
ELSE.
it_notcausi-item_sort_no = wa_data-item_sort_no. "'1'.
ENDIF.
*i_BAPI2080_NOTCAUSI-ITEM_KEY =.
it_notcausi-item_key = wa_data-item_key.
it_notcausi-causetext = wa_data-causetext."'Test Cause'.
it_notcausi-cause_codegrp = wa_data-cause_codegrp."'FCVNP001'.
it_notcausi-cause_code = wa_data-cause_code. "'CC01'.
APPEND it_notcausi.
ENDIF.

*Activity
IF wa_data-act_key IS NOT INITIAL.
it_notactvi-act_key = wa_data-act_key.
it_notactvi-act_sort_no = wa_data-act_sort_no. "'1'.
it_notactvi-item_sort_no = wa_data-act_key. " '1'.
it_notactvi-acttext = wa_data-acttext."'Test Activity'.
it_notactvi-act_codegrp = wa_data-act_codegrp."'FCVNP001'.
it_notactvi-act_code = wa_data-act_code. "'RM06'.
it_notactvi-start_date = wa_data-start_date."'06.10.2010'.
it_notactvi-start_time = wa_data-start_time. "'182118'.
it_notactvi-end_date = wa_data-end_date."'06.10.2010'.
it_notactvi-end_time = wa_data-end_time. "'182139'.
APPEND it_notactvi.
ENDIF.
ELSEIF ( wa_data-notif_type IS NOT INITIAL AND g_flag IS NOT INITIAL ).
*Call BAPI to Create Notification
PERFORM call_bapi.
CLEAR: g_flag,g_count_item.
g_count_item = 1.
g_type = wa_data-notif_type.
*Check plant whether it belongs to gpec (i302) or not.
IF wa_data-equipment IS NOT INITIAL .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_data-equipment
IMPORTING
output = l_equnr.
READ TABLE it_equi INTO wa_equi
WITH KEY equnr = l_equnr.
IF sy-subrc <> 0.
MOVE-CORRESPONDING wa_data TO wa_log.
CONCATENATE 'Equipment' wa_data-equipment 'does not belong to GPEC plant'
INTO wa_log-text SEPARATED BY space.
APPEND wa_log TO it_log.
CLEAR: wa_equi,wa_data.
CONTINUE.
ELSE.
it_nothdri-equipment = wa_data-equipment. "'900000000'."'10000030'.
ENDIF.
ENDIF.
IF wa_data-funct_loc IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_TPLNR_INPUT'
EXPORTING
input = wa_data-funct_loc
i_flg_check_internal = 'X'
IMPORTING
output = l_tplnr.
READ TABLE it_equi INTO wa_equi
WITH KEY tplnr = l_tplnr.
IF sy-subrc <> 0.
MOVE-CORRESPONDING wa_data TO wa_log.
CONCATENATE 'Functiona Location' wa_data-funct_loc 'does not belong to GPEC plant'
INTO wa_log-text SEPARATED BY space.
APPEND wa_log TO it_log.
CLEAR: wa_equi,wa_data.
CONTINUE.
ELSEIF sy-subrc EQ 0.
* it_nothdri-funct_loc = wa_data-funct_loc.
it_nothdri-funct_loc = l_tplnr.
ENDIF.
ENDIF.
* create header data
it_nothdri-refobjectkey = wa_data-notif_type. "'B2'."'PJAREF'.
it_nothdri-reportedby = wa_data-reportedby. "'ASC3832'.
it_nothdri-short_text = wa_data-short_text. "'AKS Short Test from BAPI'.
it_nothdri-priority = wa_data-priority. "'2'."High
it_nothdri-plangroup = wa_data-plangroup.
it_nothdri-maintplant = wa_data-maintplant.
it_nothdri-pm_wkctr = wa_data-pm_wkctr.
it_nothdri-strmlfndate = wa_data-strmlfndate.
it_nothdri-strmlfntime = wa_data-strmlfntime.
it_nothdri-endmlfndate = wa_data-endmlfndate.
it_nothdri-endmlfntime = wa_data-endmlfntime.
it_nothdri-desstdate = wa_data-desstdate.
it_nothdri-dessttime = wa_data-dessttime.
it_nothdri-desenddate = wa_data-desenddate.
it_nothdri-desendtm = wa_data-desendtm.
IF wa_data-breakdown = 'Y'.
it_nothdri-breakdown = 'X'.
ENDIF.
*Create long text
PERFORM create_long_text USING wa_data-long_text.
*Item
IF wa_data-item_sort_no IS NOT INITIAL.
it_notitemi-item_key = wa_data-item_sort_no.
it_notitemi-item_sort_no = wa_data-item_sort_no. "'1'.
it_notitemi-descript = wa_data-descript."'Test Item '.
it_notitemi-d_codegrp = wa_data-d_codegrp." 'FCSCP001'.
it_notitemi-d_code = wa_data-d_code. "'CP01'.
it_notitemi-dl_codegrp = wa_data-dl_codegrp. "'FCP001'.
it_notitemi-dl_code = wa_data-dl_code. "'P001'.
APPEND it_notitemi.
ELSE.
it_notitemi-item_key = g_count_item.
it_notitemi-item_sort_no = g_count_item.
ENDIF.
*Cause
IF wa_data-cause_sort_no IS NOT INITIAL. "'1'..
it_notcausi-cause_sort_no = wa_data-cause_sort_no. "'1'.
IF wa_data-item_sort_no IS INITIAL.
it_notcausi-item_sort_no = g_count_item.
ELSE.
it_notcausi-item_sort_no = wa_data-item_sort_no. "'1'.
ENDIF.
*i_BAPI2080_NOTCAUSI-ITEM_KEY =.
it_notcausi-item_key = wa_data-item_key.
it_notcausi-causetext = wa_data-causetext."'Test Cause'.
it_notcausi-cause_codegrp = wa_data-cause_codegrp."'FCVNP001'.
it_notcausi-cause_code = wa_data-cause_code. "'CC01'.
APPEND it_notcausi.
ENDIF.
*Activity
IF wa_data-act_key IS NOT INITIAL.
it_notactvi-act_key = wa_data-act_key.
it_notactvi-act_sort_no = wa_data-act_sort_no. "'1'.
it_notactvi-item_sort_no = wa_data-act_key. " '1'.
it_notactvi-acttext = wa_data-acttext."'Test Activity'.
it_notactvi-act_codegrp = wa_data-act_codegrp."'FCVNP001'.
it_notactvi-act_code = wa_data-act_code. "'RM06'.
it_notactvi-start_date = wa_data-start_date."'06.10.2010'.
it_notactvi-start_time = wa_data-start_time. "'182118'.
it_notactvi-end_date = wa_data-end_date."'06.10.2010'.
it_notactvi-end_time = wa_data-end_time. "'182139'.
APPEND it_notactvi.
ENDIF.
g_flag = 'X'.
ENDIF.
ENDLOOP.
*Create Notification for the last Notification item
IF it_nothdri IS NOT INITIAL.
PERFORM call_bapi.
CLEAR g_flag.
ENDIF.

ENDFORM. " CREATE_NOTIFICATION
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM download_file .

DATA: l_dsn LIKE rlgrap-filename,
l_filelen TYPE i,
gui_filename TYPE string,
l_path TYPE string,
l_line TYPE i.
* Prepare the error log file location and file name
l_filelen = STRLEN( p_file ).
l_filelen = l_filelen - 3.
CONCATENATE p_file(l_filelen) 'ERR.txt' INTO l_dsn.

gui_filename = l_dsn.

DESCRIBE TABLE it_log LINES l_line.
IF l_line = 0.
wa_log-text = 'Error not found. Upload process completed!'.
APPEND wa_log TO it_log.
CLEAR wa_log.
ENDIF.


CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =
filename = gui_filename
filetype = 'ASC'
* APPEND = ' '
write_field_separator = 'X'
TABLES
data_tab = it_log
* FIELDNAMES =
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
SKIP.
CONCATENATE 'Error file downloaded at' l_dsn INTO l_path
SEPARATED BY space.
WRITE:/ l_path.
ENDIF.
ENDFORM. " DOWNLOAD_FILE
*&---------------------------------------------------------------------*
*& Form CALL_BAPI
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM call_bapi .
DATA ls_notifheader TYPE bapi2080_nothdre.
*Call BAPI to create Notification
CALL FUNCTION 'BAPI_ALM_NOTIF_CREATE'
EXPORTING
* EXTERNAL_NUMBER =
notif_type = g_type
notifheader = it_nothdri
* TASK_DETERMINATION = ' '
* SENDER =
* ORDERID =
IMPORTING
notifheader_export = it_nothdre
TABLES
notitem = it_notitemi
notifcaus = it_notcausi
notifactv = it_notactvi
* NOTIFTASK =
* NOTIFPARTNR =
longtexts = it_notfulltxti
* KEY_RELATIONSHIPS =
return = it_bapiret2.

*Save Notification
CALL FUNCTION 'BAPI_ALM_NOTIF_SAVE'
EXPORTING
number = it_nothdre-notif_no
IMPORTING
notifheader = ls_notifheader
* TABLES
* RETURN =
.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* WAIT =
* IMPORTING
* RETURN =
.
*Update Error messages into log file.
LOOP AT it_bapiret2 WHERE type = 'E'.
PERFORM log_error.
ENDLOOP.
*Append blank lines in error log
IF it_bapiret2 IS NOT INITIAL.
CLEAR wa_log.
APPEND wa_log TO it_log.
ENDIF.
*Delete Items with Blank fields.
IF ls_notifheader-notif_no IS NOT INITIAL.
* CLEAR wa_log.
* CONCATENATE 'Notification' ls_notifheader-notif_no 'created for' g_type
* 'Type' INTO wa_log-text SEPARATED BY space.
** wa_log-text = ls_notifheader-notif_no.
* APPEND wa_log TO it_log.
* CLEAR wa_log.
* APPEND wa_log TO it_log.

WAIT UP TO 2 SECONDS.
PERFORM delete_notif_items USING ls_notifheader-notif_no .
ENDIF.
CLEAR: g_type,ls_notifheader.
REFRESH: it_nothdri,
it_bapiret2,
it_nothdre,
it_notfulltxti,
it_notitemi,
it_notcausi ,
it_notactvi.
ENDFORM. " CALL_BAPI
*&---------------------------------------------------------------------*
*& Form DELETE_NOTIF_ITEMS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LS_NOTIFHEADER_NOTIF_NO text
*----------------------------------------------------------------------*
FORM delete_notif_items USING p_notif_no.
DATA: lt_notitem TYPE STANDARD TABLE OF bapi2080_notiteme WITH HEADER LINE,
lt_notitem1 TYPE STANDARD TABLE OF bapi2080_notitemi WITH HEADER LINE,
lt_bapiret2 TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE,
ls_notifheader1 TYPE bapi2080_nothdre.

CALL FUNCTION 'BAPI_ALM_NOTIF_GET_DETAIL'
EXPORTING
number = p_notif_no
TABLES
notitem = lt_notitem.

LOOP AT lt_notitem
WHERE d_codegrp EQ space
AND d_code EQ space
AND dl_codegrp EQ space
AND dl_code EQ space
AND delete_flag EQ space.
lt_notitem1-item_key = lt_notitem-item_key. " = '0005'.
lt_notitem1-item_sort_no = lt_notitem-item_sort_no. " = '0005'.
APPEND lt_notitem1.
ENDLOOP.

CALL FUNCTION 'BAPI_ALM_NOTIF_DATA_DELETE'
EXPORTING
number = p_notif_no
TABLES
notitem = lt_notitem1[]
return = lt_bapiret2.

* Save Notification
CALL FUNCTION 'BAPI_ALM_NOTIF_SAVE'
EXPORTING
number = p_notif_no
IMPORTING
notifheader = ls_notifheader1
* TABLES
* RETURN =
.
*WRITE:/ ls_notifheader1-notif_no.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* WAIT =
* IMPORTING
* RETURN =
.
CLEAR : lt_notitem,lt_notitem1,lt_bapiret2,p_notif_no.
REFRESH: lt_notitem,lt_notitem1,lt_bapiret2.
ENDFORM. " DELETE_NOTIF_ITEMS
*&---------------------------------------------------------------------*
*& Form CREATE_LONG_TEXT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_WA_DATA_LONG_TEXT text
*----------------------------------------------------------------------*
FORM create_long_text USING p_long_text.

it_notfulltxti-format_col = 'U1'.
it_notfulltxti-objtype = 'QMEL'.
it_notfulltxti-text_line = p_long_text.
APPEND it_notfulltxti.
ENDFORM. " CREATE_LONG_TEXT
*&---------------------------------------------------------------------*
*& Form LOG_ERROR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM log_error .
* IF g_flag1 IS INITIAL.
PERFORM build_log_header.
* APPEND wa_log TO it_log.
* g_flag1 = 'X'.
* ENDIF.

ADD 1 TO g_count_in_error.
SELECT SINGLE * FROM t100 INTO wa_t100
WHERE sprsl = sy-langu
AND arbgb = sy-msgid
AND msgnr = sy-msgno.
MOVE wa_t100-text TO error_text.
IF error_text CS '&1'.
REPLACE '&1' WITH sy-msgv1 INTO error_text.
ELSE.
REPLACE '&' WITH sy-msgv1 INTO error_text.
ENDIF.
IF error_text CS '&2'.
REPLACE '&2' WITH sy-msgv2 INTO error_text.
ELSE.
REPLACE '&' WITH sy-msgv2 INTO error_text.
ENDIF.
IF error_text CS '&3'.
REPLACE '&3' WITH sy-msgv3 INTO error_text.
ELSE.
REPLACE '&' WITH sy-msgv3 INTO error_text.
ENDIF.
IF error_text CS '&4'.
REPLACE '&4' WITH sy-msgv4 INTO error_text.
ELSE.
REPLACE '&' WITH sy-msgv4 INTO error_text.
ENDIF.
CONDENSE error_text.

*Write Error log on the output screen
WRITE:
/(4) g_type,
(40) it_nothdri-short_text,
(30) it_nothdri-funct_loc,
(18) it_nothdri-equipment,
(15) it_nothdri-plangroup,
(8) it_nothdri-maintplant,
(16) it_nothdri-pm_wkctr,
(12) it_nothdri-reportedby,
(10) it_nothdri-priority,
(20) it_nothdri-strmlfndate,
(20) it_nothdri-strmlfntime,
(20) it_nothdri-endmlfndate,
(20) it_nothdri-endmlfntime,
(20) it_nothdri-desstdate,
(20) it_nothdri-dessttime,
(20) it_nothdri-desenddate,
(20) it_nothdri-desendtm,
(20) it_nothdri-breakdown,
(80) error_text.

wa_log-notif_type = g_type.
wa_log-short_text = it_nothdri-short_text.
wa_log-funct_loc = it_nothdri-funct_loc.
wa_log-equipment = it_nothdri-equipment.
wa_log-plangroup = it_nothdri-plangroup.
wa_log-maintplant = it_nothdri-maintplant.
wa_log-pm_wkctr = it_nothdri-maintplant.
wa_log-reportedby = it_nothdri-reportedby.
wa_log-priority = it_nothdri-priority.
wa_log-strmlfndate = it_nothdri-strmlfndate.
wa_log-strmlfntime = it_nothdri-strmlfntime.
wa_log-endmlfndate = it_nothdri-endmlfndate.
wa_log-endmlfntime = it_nothdri-strmlfntime.
wa_log-desstdate = it_nothdri-desstdate.
wa_log-dessttime = it_nothdri-dessttime.
wa_log-desenddate = it_nothdri-desenddate.
wa_log-desendtm = it_nothdri-desendtm.
wa_log-breakdown = it_nothdri-breakdown.
wa_log-text = error_text.
APPEND wa_log TO it_log.
ENDFORM. " LOG_ERROR
*&---------------------------------------------------------------------*
*& Form BUILD_LOG_HEADER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_log_header .
IF g_flag1 IS INITIAL.
wa_log-notif_type = 'Notif_Type'.
wa_log-short_text = 'Notification Text'.
wa_log-funct_loc = 'Function Location'.
wa_log-equipment = 'Notification'.
wa_log-plangroup = 'Planner Grp'.
wa_log-maintplant = 'MPlnt'.
wa_log-pm_wkctr = 'Work Centre'.
wa_log-reportedby = 'Reported by'.
wa_log-priority = 'Priority'.
wa_log-strmlfndate = 'Mf_st_dt'.
wa_log-strmlfntime = 'Mf_st_t'.
wa_log-endmlfndate = 'Mf_end_date'.
wa_log-endmlfntime = 'Mf_end_time'.
wa_log-desstdate = 'Req_st_date'.
wa_log-dessttime = 'Req_st_time'.
wa_log-desenddate = 'Req_end_date'.
wa_log-desendtm = 'Req_end_time'.
wa_log-breakdown = 'Breakdown'.
wa_log-text ='Error text'.
APPEND wa_log TO it_log.

*Write header on report output.
WRITE:/ wa_log-notif_type,
wa_log-short_text,
wa_log-funct_loc,
wa_log-equipment,
wa_log-plangroup,
wa_log-maintplant,
wa_log-pm_wkctr,
wa_log-reportedby,
wa_log-priority,
wa_log-strmlfndate,
wa_log-strmlfntime,
wa_log-endmlfndate,
wa_log-endmlfntime,
wa_log-desstdate,
wa_log-dessttime,
wa_log-desenddate,
wa_log-desendtm,
wa_log-breakdown,
wa_log-text.
SKIP.

CLEAR wa_log.
APPEND wa_log TO it_log.
g_flag1 = 'X'.
ENDIF.

ENDFORM. " BUILD_LOG_HEADER
*&---------------------------------------------------------------------*
*& Form BUILD_ERROR_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_error_output .
*Write Error on the output screen
WRITE:/ wa_log-notif_type,
wa_log-short_text,
wa_log-funct_loc,
wa_log-equipment,
wa_log-plangroup,
wa_log-maintplant,
wa_log-pm_wkctr,
wa_log-reportedby,
wa_log-priority,
wa_log-strmlfndate,
wa_log-strmlfntime,
wa_log-endmlfndate,
wa_log-endmlfntime,
wa_log-desstdate,
wa_log-dessttime,
wa_log-desenddate,
wa_log-desendtm,
wa_log-breakdown,
wa_log-text.
CLEAR wa_log.
ENDFORM. " BUILD_ERROR_OUTPUT

Material Requirement Planning for PM between Two Dates

This Program helps to understand the Material Requirement Planning for Maintenance Plan between two dates. *Selection Screen *Report Output

REPORT zpmcipr0005
NO STANDARD PAGE HEADING LINE-SIZE 255.

TYPE-POOLS: truxs,slis.
************************************************************************
* Table Declaration *
************************************************************************
TABLES: mpla,mpos.
************************************************************************
* Struture Declaration *
************************************************************************
TYPES: BEGIN OF ty_vimpla,
warpl LIKE mpla-warpl, "Maintenance Plan
strat LIKE mpla-strat, "Maintenance strategy
equnr LIKE mpla-equnr, "Equipment Number
tplnr LIKE mpla-tplnr, "Functional Location
abnum LIKE mpla-abnum, "Maintenance Plan Call Number
objnr LIKE mpla-objnr, "Object number
mptyp LIKE mpla-mptyp, "Maintenance plan category
plan_sort LIKE mpla-plan_sort, "Sort field for maintenance plans
wapos LIKE mpos-wapos, "Maintenance item
plnty LIKE mpos-plnty, "Task List Type
plnnr LIKE mpos-plnnr, "Key for Task List Group
plnal LIKE mpos-plnal, "Group Counter
wpgrp LIKE mpos-wpgrp, "Planner Group
iwerk LIKE mpos-iwerk, "Maintenance Planning Plant
inact LIKE mpos-inact, "indicator that maintenance item
"is inactive
std_avo LIKE mpos-std_avo, "Number of the task list node
mityp LIKE mpos-mityp, "Maintenance item category
apfkt LIKE mpos-apfkt, "Execution Factor
END OF ty_vimpla.

TYPES: BEGIN OF ty_mhis,
warpl LIKE mhis-warpl,
abnum LIKE mhis-abnum,
zaehl LIKE mhis-zaehl,
nplda LIKE mhis-nplda,
tsenm LIKE mhis-tsenm,
tstat LIKE mhis-tstat,
END OF ty_mhis.
TYPES: BEGIN OF ty_mhis1,
warpl LIKE mpla-warpl, "Maintenance Plan
zaehl LIKE mhis-zaehl,
count TYPE i,
END OF ty_mhis1.
TYPES: BEGIN OF ty_plmz,
plnty LIKE plmz-plnty,
plnnr LIKE plmz-plnnr,
zuonr LIKE plmz-zuonr,
zaehl LIKE plmz-zaehl,
loekz LIKE plmz-loekz,
plnal LIKE plmz-plnal,
plnkn LIKE plmz-plnkn,
stlty LIKE plmz-stlty,
stlnr LIKE plmz-stlnr,
stlal LIKE plmz-stlal,
stlkn LIKE plmz-stlkn,
imeng LIKE plmz-imeng,
imein LIKE plmz-imein,
stpoz LIKE stpo-stpoz,
idnrk LIKE stpo-idnrk,
END OF ty_plmz.

TYPES: BEGIN OF ty_plwp,
plnty LIKE plwp-plnty,
plnnr LIKE plwp-plnnr,
plnal LIKE plwp-plnal,
plnfl LIKE plwp-plnfl,
plnkn LIKE plwp-plnkn,
paket LIKE plwp-paket,
zaehl LIKE plwp-zaehl,
strat LIKE plwp-strat,
vornr LIKE plpo-vornr,
arbid LIKE plpo-arbid,
aufkt LIKE plpo-aufkt,
END OF ty_plwp.

TYPES: BEGIN OF ty_t006a,
spras LIKE t006a-spras,
msehi LIKE t006a-msehi,
msehl LIKE t006a-msehl,
END OF ty_t006a.

TYPES: BEGIN OF ty_output,
warpl LIKE mpla-warpl, "Maintenance Plan
wapos LIKE mpos-wapos, "Maintenance item
plnty LIKE mpos-plnty, "Task List Type
plnnr LIKE mpos-plnnr, "Key for Task List Group
plnal LIKE mpos-plnal, "Group Counter
wpgrp LIKE mpos-wpgrp, "Planner Group
equnr LIKE mpla-equnr, "Equipment Number
tplnr LIKE mpla-tplnr, "Functional Location
matnr LIKE mara-matnr, "Material
maktx LIKE makt-maktx, "Material Description
mityp LIKE mpos-mityp, "Maintenance item category
imeng LIKE plmz-imeng, "Quantity
imein LIKE t006a-msehl, "UOM
nplda LIKE mhis-nplda, "Next due date
paket LIKE plwp-paket, "Package
END OF ty_output.
************************************************************************
* Intrnal Table Declaration *
************************************************************************
DATA: it_vimpla TYPE STANDARD TABLE OF ty_vimpla,
it_mhis TYPE STANDARD TABLE OF ty_mhis,
it_mhis1 TYPE STANDARD TABLE OF ty_mhis1,
it_mhis2 TYPE STANDARD TABLE OF ty_mhis,
it_plwp TYPE STANDARD TABLE OF ty_plwp,
it_plmz TYPE STANDARD TABLE OF ty_plmz,
it_makt TYPE STANDARD TABLE OF makt,
it_t006a TYPE STANDARD TABLE OF ty_t006a,
it_jest TYPE STANDARD TABLE OF jest,
it_output TYPE STANDARD TABLE OF ty_output,
it_fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE.
************************************************************************
* Intrnal Table Declaration *
************************************************************************
DATA: wa_vimpla TYPE ty_vimpla,
wa_mhis TYPE ty_mhis,
wa_mhis1 TYPE ty_mhis1,
wa_mhis2 TYPE ty_mhis,
wa_plwp TYPE ty_plwp,
wa_plmz TYPE ty_plmz,
wa_makt TYPE makt,
wa_t006a TYPE ty_t006a,
wa_jest TYPE jest,
wa_output TYPE ty_output.
************************************************************************
* Data Declaration *
************************************************************************
DATA: ls_layout TYPE slis_layout_alv.
************************************************************************
* Constants Declaration *
************************************************************************
CONSTANTS: c_a TYPE c VALUE 'A'.
************************************************************************
* Selection Screen *
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
SELECT-OPTIONS: s_warpl FOR mpla-warpl,
s_strat FOR mpla-strat,
s_mptyp FOR mpla-mptyp,
s_psort FOR mpla-plan_sort,
s_wpgrp FOR mpos-wpgrp,
s_iwerk FOR mpos-iwerk OBLIGATORY,
s_period FOR sy-datum OBLIGATORY NO-EXTENSION.
SELECTION-SCREEN END OF BLOCK b1.
************************************************************************
* At Selection Screen *
************************************************************************
AT SELECTION-SCREEN ON BLOCK b1.
PERFORM screen_field_check.
************************************************************************
* Initialization *
************************************************************************
INITIALIZATION.

************************************************************************
* Start of Selection *
************************************************************************
START-OF-SELECTION.
PERFORM get_data.
PERFORM build_output.
PERFORM build_fieldcatalog.


************************************************************************
* End of Selection *
************************************************************************
END-OF-SELECTION.
IF it_output IS NOT INITIAL.
PERFORM display_output.
ELSE.
MESSAGE 'No data found' TYPE 'I'.
ENDIF.

*&---------------------------------------------------------------------*
*& Form SCREEN_FIELD_CHECK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM screen_field_check .
DATA: l_warpl TYPE warpl,
l_wpgrp TYPE wpgrp,
l_psort TYPE plan_sort,
l_mptyp TYPE mptyp,
l_strat TYPE strat,
l_iwerk TYPE iwerk.
TYPES: BEGIN OF ty_iwerk,
iwerk TYPE iwerk,
END OF ty_iwerk.
DATA: it_iwerk TYPE STANDARD TABLE OF ty_iwerk,
wa_iwerk TYPE ty_iwerk.

LOOP AT s_warpl.
SELECT SINGLE warpl INTO l_warpl
FROM mpos
WHERE warpl = s_warpl-low
AND wpgrp IN s_wpgrp.
IF sy-subrc <> 0.
MESSAGE e004(zpm_clpi) WITH s_warpl-low.
ENDIF.
ENDLOOP.
IF s_warpl-high IS NOT INITIAL.
LOOP AT s_warpl.
SELECT SINGLE warpl INTO l_warpl
FROM mpos
WHERE warpl = s_warpl-high
AND wpgrp IN s_wpgrp.
IF sy-subrc <> 0.
MESSAGE e004(zpm_clpi) WITH s_warpl-high.
ENDIF.
ENDLOOP.
ENDIF.

*Validate Planner Group
LOOP AT s_wpgrp.
SELECT SINGLE ingrp INTO l_wpgrp
FROM t024i
WHERE ingrp = s_wpgrp-low
AND iwerk IN s_iwerk.
IF sy-subrc <> 0.
MESSAGE e005(zpm_clpi) WITH s_wpgrp-low.
ENDIF.
ENDLOOP.
IF s_wpgrp-high IS NOT INITIAL.
LOOP AT s_wpgrp.
SELECT SINGLE ingrp INTO l_wpgrp
FROM t024i
WHERE ingrp = s_wpgrp-high
AND iwerk IN s_iwerk.
IF sy-subrc <> 0.
MESSAGE e005(zpm_clpi) WITH s_wpgrp-high.
ENDIF.
ENDLOOP.
ENDIF.

*Validate Maintenance Plan Sort
TYPES: BEGIN OF ty_psort,
plan_sort LIKE t399g-plan_sort,
END OF ty_psort.
DATA: it_psort TYPE STANDARD TABLE OF ty_psort,
wa_psort TYPE ty_psort.

IF s_psort CA '*'.
SELECT plan_sort INTO TABLE it_psort
FROM t399g
WHERE plan_sort IN s_psort.
IF sy-subrc EQ 0.
REFRESH s_psort.
LOOP AT it_psort INTO wa_psort.
s_psort-sign = 'I'.
s_psort-option = 'CP'.
s_psort-low = wa_psort-plan_sort.
APPEND s_psort.
CLEAR wa_psort.
ENDLOOP.
ELSE .
MESSAGE e006(zpm_clpi) WITH s_psort-low.
ENDIF.
ELSE.
LOOP AT s_psort.
SELECT SINGLE plan_sort INTO l_psort
FROM t399g
WHERE plan_sort = s_psort-low.
IF sy-subrc <> 0.
MESSAGE e006(zpm_clpi) WITH s_psort-low.
ENDIF.
ENDLOOP.
IF s_psort-high IS NOT INITIAL.
LOOP AT s_psort.
SELECT SINGLE plan_sort INTO l_psort
FROM t399g
WHERE plan_sort = s_psort-high.
IF sy-subrc <> 0.
MESSAGE e006(zpm_clpi) WITH s_psort-high.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
*Validate Maintenance Plan Category field
TYPES: BEGIN OF ty_mptyp,
mptyp LIKE t399w-mptyp,
END OF ty_mptyp.
DATA: it_mptyp TYPE STANDARD TABLE OF ty_mptyp,
wa_mptyp TYPE ty_mptyp.
IF s_mptyp CA '*'.
SELECT mptyp INTO TABLE it_mptyp
FROM t399w
WHERE mptyp IN s_mptyp.
IF sy-subrc EQ 0.
REFRESH s_mptyp.
LOOP AT it_mptyp INTO wa_mptyp.
s_mptyp-sign = 'I'.
s_mptyp-option = 'CP'.
s_mptyp-low = wa_mptyp-mptyp.
APPEND s_mptyp.
CLEAR wa_mptyp.
ENDLOOP.
ELSE.
MESSAGE e007(zpm_clpi) WITH s_mptyp-low.
ENDIF.
ENDIF.

LOOP AT s_mptyp.
SELECT SINGLE mptyp INTO l_mptyp
FROM t399w
WHERE mptyp = s_mptyp-low.
IF sy-subrc <> 0.
MESSAGE e007(zpm_clpi) WITH s_mptyp-low.
ENDIF.
ENDLOOP.
IF s_mptyp-high IS NOT INITIAL.
LOOP AT s_mptyp.
SELECT SINGLE mptyp INTO l_mptyp
FROM t399w
WHERE mptyp = s_mptyp-high.
IF sy-subrc <> 0.
MESSAGE e007(zpm_clpi) WITH s_mptyp-high.
ENDIF.
ENDLOOP.
ENDIF.

*Validate Maintenance Plan Strategy field
LOOP AT s_strat.
SELECT SINGLE strat INTO l_strat
FROM t351
WHERE strat = s_strat-low.
IF sy-subrc <> 0.
MESSAGE e008(zpm_clpi) WITH s_strat-low.
ENDIF.
ENDLOOP.
IF s_strat-high IS NOT INITIAL.
LOOP AT s_strat.
SELECT SINGLE strat INTO l_strat
FROM t351
WHERE strat = s_strat-high.
IF sy-subrc <> 0.
MESSAGE e008(zpm_clpi) WITH s_strat-high.
ENDIF.
ENDLOOP.
ENDIF.
* Validate Plant

IF s_iwerk-low IS NOT INITIAL AND
s_iwerk-high IS NOT INITIAL.
SELECT iwerk FROM t399i INTO TABLE it_iwerk
WHERE iwerk IN s_iwerk.
IF sy-subrc EQ 0.
LOOP AT it_iwerk INTO wa_iwerk.
AUTHORITY-CHECK OBJECT 'I_IWERK'
ID 'TCD' FIELD 'ZPMCI10'
ID 'IWERK' FIELD wa_iwerk-iwerk.
IF sy-subrc <> 0.
MESSAGE e011(zpm_clpi) WITH wa_iwerk-iwerk.
ENDIF.
ENDLOOP.
ENDIF.
ELSEIF s_iwerk-low IS NOT INITIAL.
LOOP AT s_iwerk.
SELECT SINGLE iwerk INTO l_iwerk
FROM t399i
WHERE iwerk = s_iwerk-low.
IF sy-subrc <> 0.
MESSAGE e009(zpm_clpi) WITH s_iwerk-low.
ELSE.
AUTHORITY-CHECK OBJECT 'I_IWERK'
ID 'TCD' FIELD 'ZPMCI10'
ID 'IWERK' FIELD s_iwerk-low.
IF sy-subrc <> 0.
MESSAGE e011(zpm_clpi) WITH s_iwerk-low.
ENDIF.
ENDIF.
CLEAR l_iwerk.
ENDLOOP.
IF s_iwerk-high IS NOT INITIAL.
LOOP AT s_iwerk.
SELECT SINGLE iwerk INTO l_iwerk
FROM t399i
WHERE iwerk = s_iwerk-high.
IF sy-subrc <> 0.
MESSAGE e009(zpm_clpi) WITH s_iwerk-high.
ELSE.
AUTHORITY-CHECK OBJECT 'I_IWERK'
ID 'TCD' FIELD 'ZPMCI10'
ID 'IWERK' FIELD s_iwerk-high.
IF sy-subrc <> 0.
MESSAGE e011(zpm_clpi) WITH s_iwerk-high.
ENDIF.
ENDIF.
CLEAR l_iwerk.
ENDLOOP.
ENDIF.
ENDIF.


*Check Period as it should be in future
IF s_period-low < sy-datum.
MESSAGE e010(zpm_clpi) WITH s_period-low.
ENDIF.
ENDFORM. " SCREEN_FIELD_CHECK
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_data .
DATA: l_warpl TYPE warpl,
l_zaehl TYPE paketzaehl,
l_count_zaehl TYPE i.
*Get Maintenance plan data from View VIMPLA
SELECT warpl
strat
equnr
tplnr
abnum
objnr
mptyp
plan_sort
wapos
plnty
plnnr
plnal
wpgrp
iwerk
inact
std_avo
mityp
apfkt
INTO TABLE it_vimpla
FROM vimpla
WHERE warpl IN s_warpl
AND strat IN s_strat
AND mptyp IN s_mptyp
AND plan_sort IN s_psort
AND wpgrp IN s_wpgrp
AND iwerk IN s_iwerk
AND plnty EQ 'A'
AND inact EQ space.

IF sy-subrc EQ 0.
SORT it_vimpla BY warpl wapos .
SELECT * FROM jest INTO TABLE it_jest
FOR ALL ENTRIES IN it_vimpla
WHERE objnr = it_vimpla-objnr.
*For Checking packages SELECT data from MHIS table
SELECT warpl
abnum
zaehl
nplda
tsenm
tstat
FROM mhis AS h
INTO TABLE it_mhis
FOR ALL ENTRIES IN it_vimpla
WHERE warpl = it_vimpla-warpl
AND nplda IN s_period
* AND TSABR = 'X'
* AND tsenq = 'X'
* AND tsvbt = 'X'
AND tsenm = space
AND tstat <> 'X'.
SORT it_mhis BY warpl zaehl.
*Applying loop on MHIS data to count the package and repition of the package.
LOOP AT it_mhis INTO wa_mhis.
IF l_warpl IS INITIAL.
l_warpl = wa_mhis-warpl.
ENDIF.
IF wa_mhis-warpl = l_warpl.
IF l_zaehl IS INITIAL.
l_zaehl = wa_mhis-zaehl.
ENDIF.
IF wa_mhis-zaehl = l_zaehl.
l_count_zaehl = l_count_zaehl + 1.
wa_mhis1-warpl = wa_mhis-warpl.
wa_mhis1-zaehl = wa_mhis-zaehl.
ELSE.
wa_mhis1-count = l_count_zaehl.
APPEND wa_mhis1 TO it_mhis1.
CLEAR wa_mhis1.
l_zaehl = wa_mhis-zaehl.
l_count_zaehl = 1.
wa_mhis1-warpl = wa_mhis-warpl.
wa_mhis1-zaehl = wa_mhis-zaehl.
ENDIF.
ELSE.
wa_mhis1-count = l_count_zaehl.
APPEND wa_mhis1 TO it_mhis1.
CLEAR wa_mhis1.
CLEAR: l_warpl,l_zaehl.
l_warpl = wa_mhis-warpl.
l_zaehl = wa_mhis-zaehl.
l_count_zaehl = 1.
wa_mhis1-warpl = wa_mhis-warpl.
wa_mhis1-zaehl = wa_mhis-zaehl.
ENDIF.
ENDLOOP.
IF wa_mhis-warpl IS NOT INITIAL.
wa_mhis1-warpl = wa_mhis-warpl.
wa_mhis1-zaehl = wa_mhis-zaehl.
wa_mhis1-count = l_count_zaehl.
APPEND wa_mhis1 TO it_mhis1.
ENDIF.

CLEAR: l_warpl,l_zaehl,l_count_zaehl.

*Get the No of operations from table PLMZ
SELECT p~plnty
p~plnnr
p~zuonr
p~zaehl
p~loekz
p~plnal
p~plnkn
p~stlty
p~stlnr
p~stlal
p~stlkn
p~imeng
p~imein
s~stpoz
s~idnrk
INTO TABLE it_plmz
FROM plmz AS p
INNER JOIN stpo AS s ON p~stlty = s~stlty
AND p~stlnr = s~stlnr
AND p~stlkn = s~stlkn
FOR ALL ENTRIES IN it_vimpla
WHERE p~plnty = it_vimpla-plnty
AND p~plnnr = it_vimpla-plnnr
AND p~loekz = space
AND p~plnal = it_vimpla-plnal.

*Get the Package number & Operation number against Task list
SELECT p~plnty
p~plnnr
p~plnal
p~plnfl
p~plnkn
p~paket
p~zaehl
p~strat
o~vornr
o~arbid
o~aufkt
INTO TABLE it_plwp
FROM plwp AS p
INNER JOIN plpo AS o ON p~plnty = o~plnty
AND p~plnnr = o~plnnr
AND p~plnkn = o~plnkn
FOR ALL ENTRIES IN it_vimpla
WHERE p~plnty = it_vimpla-plnty
AND p~plnnr = it_vimpla-plnnr
AND p~plnal = it_vimpla-plnal
AND p~strat = it_vimpla-strat
AND p~loekz <> 'X'. "10-01-2011
*Get Material Description
SELECT * FROM makt
INTO TABLE it_makt
FOR ALL ENTRIES IN it_plmz
WHERE matnr = it_plmz-idnrk
AND spras = sy-langu.

SORT it_makt BY matnr.
*Get Quantity description
SELECT spras
msehi
msehl
INTO TABLE it_t006a
FROM t006a
FOR ALL ENTRIES IN it_plmz
WHERE spras = sy-langu
AND msehi = it_plmz-imein.
*Get Maintenance Plan History data for 'Next Due Date' and 'Package'
*irrespective of period on selection screen
SELECT warpl
abnum
zaehl
nplda
tsenm
tstat
FROM mhis AS h
INTO TABLE it_mhis2
FOR ALL ENTRIES IN it_vimpla
WHERE warpl = it_vimpla-warpl
AND tsenq = 'X'
AND tsvbt = 'X'.
*Sort this by planned date.
SORT it_mhis2 BY warpl nplda.
ENDIF.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form BUILD_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_output .
IF it_vimpla IS NOT INITIAL.
LOOP AT it_vimpla INTO wa_vimpla.
*Check Inactive/Delete Flag
READ TABLE it_jest INTO wa_jest
WITH KEY objnr = wa_vimpla-objnr
stat = 'I0320'
inact = space.
IF sy-subrc EQ 0.
CONTINUE.
ENDIF.

READ TABLE it_jest INTO wa_jest
WITH KEY objnr = wa_vimpla-objnr
stat = 'I0076'
inact = space.
IF sy-subrc EQ 0.
CONTINUE.
ENDIF.

wa_output-warpl = wa_vimpla-warpl.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = wa_output-warpl
IMPORTING
output = wa_output-warpl.
*When Task List is not available
IF wa_vimpla-plnnr IS INITIAL.
CONTINUE.
ELSE.
wa_output-plnnr = wa_vimpla-plnnr.
ENDIF.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = wa_output-plnnr
IMPORTING
output = wa_output-plnnr.
wa_output-plnal = wa_vimpla-plnal.

wa_output-wapos = wa_vimpla-wapos.
wa_output-wpgrp = wa_vimpla-wpgrp.
wa_output-mityp = wa_vimpla-mityp.

wa_output-equnr = wa_vimpla-equnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = wa_output-equnr
IMPORTING
output = wa_output-equnr.

wa_output-tplnr = wa_vimpla-tplnr.

CALL FUNCTION 'CONVERSION_EXIT_TPLNR_OUTPUT'
EXPORTING
input = wa_output-tplnr
IMPORTING
output = wa_output-tplnr.

LOOP AT it_plwp INTO wa_plwp
WHERE plnty = wa_vimpla-plnty
AND plnnr = wa_vimpla-plnnr
AND plnal = wa_vimpla-plnal.

LOOP AT it_plmz INTO wa_plmz
WHERE plnty = wa_plwp-plnty
AND plnnr = wa_plwp-plnnr
AND plnal = wa_plwp-plnal
AND plnkn = wa_plwp-plnkn.
*Read frequecy(count) for the Package against the frequency
READ TABLE it_mhis1 INTO wa_mhis1
WITH KEY warpl = wa_vimpla-warpl
zaehl = wa_plwp-paket.
IF sy-subrc EQ 0.
wa_output-imeng = wa_output-imeng + ( wa_plmz-imeng * wa_mhis1-count ).
ELSE.
* wa_output-imeng = wa_output-imeng + wa_plmz-imeng.
CONTINUE.
ENDIF.
*Multiply Output Quantity with Operation Execution factor (PLPO-AUFKT)
IF wa_plwp-aufkt IS NOT INITIAL.
wa_output-imeng = wa_output-imeng * wa_plwp-aufkt.
ENDIF.
*Multiplt Output Quantity to Execution factor of whole Task List (MPOS-APFKT)
IF wa_vimpla-apfkt IS NOT INITIAL.
wa_output-imeng = wa_output-imeng * wa_vimpla-apfkt.
ENDIF.

*Material Number
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = wa_plmz-idnrk
IMPORTING
output = wa_output-matnr.
*Material Description
READ TABLE it_makt INTO wa_makt
WITH KEY matnr = wa_plmz-idnrk.
IF sy-subrc EQ 0.
wa_output-maktx = wa_makt-maktx.
ENDIF.
*Unit of measure
READ TABLE it_t006a INTO wa_t006a
WITH KEY spras = sy-langu
msehi = wa_plmz-imein.
IF sy-subrc EQ 0.
wa_output-imein = wa_t006a-msehl.
ELSE.
wa_output-imein = wa_plmz-imein.
ENDIF.
*Next Due Date
READ TABLE it_mhis2 INTO wa_mhis2
WITH KEY warpl = wa_vimpla-warpl.
wa_output-nplda = wa_mhis2-nplda.
*Package
wa_output-paket = wa_mhis2-zaehl.
*When No Material in Task List
IF wa_output-matnr IS INITIAL.
CLEAR: wa_output-matnr,wa_output-imeng,wa_plmz,wa_mhis1,
wa_mhis2.
CONTINUE.
ENDIF.

COLLECT wa_output INTO it_output.
CLEAR: wa_output-matnr,wa_output-imeng,wa_plmz,wa_mhis1,
wa_mhis2.
ENDLOOP.
CLEAR wa_plwp.
ENDLOOP.
IF sy-subrc <> 0.
*When No Task list/No Material in Task List
IF wa_output-matnr IS INITIAL.
CLEAR: wa_output,wa_plmz,wa_plwp,wa_mhis1,
wa_mhis2.
CONTINUE.
ENDIF.

COLLECT wa_output INTO it_output.
ENDIF.
CLEAR: wa_vimpla,wa_output.
ENDLOOP.
SORT it_output BY warpl wapos wpgrp plnnr plnal equnr matnr.
ENDIF.
ENDFORM. " BUILD_OUTPUT
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_fieldcatalog .
it_fieldcatalog-fieldname = 'WARPL'.
it_fieldcatalog-seltext_l = 'Maintenance Plan'.
it_fieldcatalog-col_pos = 1.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'WAPOS'.
it_fieldcatalog-seltext_l = 'Maintenance item'.
it_fieldcatalog-col_pos = 2.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'WPGRP'.
it_fieldcatalog-seltext_l = 'Planner Group'.
it_fieldcatalog-col_pos = 3.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'PLNNR'.
it_fieldcatalog-seltext_l = 'Task List Group'.
it_fieldcatalog-col_pos = 4.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'PLNAL'.
it_fieldcatalog-seltext_l = 'Group Counter'.
it_fieldcatalog-col_pos = 5.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'EQUNR'.
it_fieldcatalog-seltext_l = 'Equipment'.
it_fieldcatalog-col_pos = 6.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'TPLNR'.
it_fieldcatalog-seltext_l = 'Functional Location'.
it_fieldcatalog-col_pos = 7.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'MATNR'.
it_fieldcatalog-seltext_l = 'Material No.'.
it_fieldcatalog-col_pos = 8.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'MAKTX'.
it_fieldcatalog-seltext_l = 'Material Description'.
it_fieldcatalog-col_pos = 9.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'MITYP'.
it_fieldcatalog-seltext_l = 'Maintenance item category'.
it_fieldcatalog-col_pos = 10.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'IMENG'.
it_fieldcatalog-seltext_l = 'Quantity'.
it_fieldcatalog-col_pos = 11.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'IMEIN'.
it_fieldcatalog-seltext_l = 'Unit of Measure'.
it_fieldcatalog-col_pos = 12.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'NPLDA'.
it_fieldcatalog-seltext_l = 'Next Due Date'.
it_fieldcatalog-col_pos = 13.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'PAKET'.
it_fieldcatalog-seltext_l = 'Package'.
it_fieldcatalog-col_pos = 14.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.
ENDFORM. " BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*& Form DISPLAY_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display_output .
ls_layout-colwidth_optimize = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = ls_layout
i_callback_program = sy-repid
i_callback_top_of_page = 'TOP_OF_PAGE'
it_fieldcat = it_fieldcatalog[]
TABLES
t_outtab = it_output
EXCEPTIONS
program_error = 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.
ENDFORM. " DISPLAY_OUTPUT
*&---------------------------------------------------------------------*
*& Form TOP_OF_PAGE
*&---------------------------------------------------------------------*
FORM top_of_page.
*ALV Header declarations
DATA: t_header TYPE slis_t_listheader,
wa_header TYPE slis_listheader,
l_info TYPE slis_listheader-info,
l_from(10) TYPE c,
l_to(10) TYPE c.

wa_header-typ = 'H'.
wa_header-info = 'Material Requirement Planning for PM between Two Dates'.
APPEND wa_header TO t_header.
CLEAR wa_header.

CONCATENATE s_period-low+6(2) '-' s_period-low+4(2) '-' s_period-low+0(4)
INTO l_from.
CONCATENATE s_period-high+6(2) '-' s_period-high+4(2) '-' s_period-high+0(4)
INTO l_to.

CONCATENATE 'Period From:' l_from ' ' 'To:' l_to
INTO l_info SEPARATED BY space.
wa_header-typ = 'S'.
wa_header-info = l_info.
APPEND wa_header TO t_header.
CLEAR wa_header.


CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = t_header.
ENDFORM. "top_of_page