report abap alv xls

Upload: david-roque

Post on 07-Jul-2018

257 views

Category:

Documents


2 download

TRANSCRIPT

  • 8/18/2019 Report Abap Alv Xls

    1/10

    REPORT Y_LALP_OLE_XLS Message-id ym. .

    DATA zjnccontainer TYPE REF TO cl_gui_custom_container.DATA zjnccontrol TYPE REF TO i_oi_container_control.DATA zjncdocument TYPE REF TO i_oi_document_proxy.DATA zjncspreadsheet TYPE REF TO i_oi_spreadsheet.DATA zjncerror TYPE REF TO i_oi_error.DATA zjncretcode TYPE SOI_RET_STRING.

    DATA zjncexcelsheet TYPE soi_document_type VALUESOI_DOCTYPE_EXCEL_SHEET.

    DATA: zjnc_ok_code LIKE sy-ucomm," return code from screen zjnc_repid LIKE sy-repid.

    DATA spreadsheetintf TYPE REF TO i_oi_spreadsheet.DATA documentintf TYPE REF TO i_oi_document_proxy.DATA pivotintf TYPE REF TO i_oi_pivot.

    DATA: numRows type I, maxRows type I.

    DATA: usa_sales TYPE i VALUE 1000, europe_sales TYPE i VALUE 2000,

    japan_sales TYPE i VALUE 1000, asia_sales TYPE i VALUE 100, america_sales TYPE i VALUE 100, africa_sales TYPE i VALUE 100.

    DATA: BEGIN OF head_table Occurs 0, hd_region(10), hd_sales(10), hd_date(10), hd_time(10), hd_weight(10), hd_amount(10), hd_id(10),

    END OF head_table.

    DATA: BEGIN OF sales_table Occurs 0, region(60), sales TYPE i, date TYPE d, time TYPE t, weight TYPE f, amount TYPE p DECIMALS 3, id(10) TYPE n, END OF sales_table.

    DATA: ind TYPE i.

    Data: Begin of WA_PIVOT, region(60), date TYPE d, amount TYPE p DECIMALS 3, End of WA_PIVOT.

    * Qty Internal Table for Date-wise Plant-WiseData: IT_PIVOT Like Sorted Table Of WA_PIVOT With Header Line

  • 8/18/2019 Report Abap Alv Xls

    2/10

    With Unique Key region date.

    Data: DT_PIVOT Like Table Of WA_PIVOT With Header Line.

    Data: IT_ITEMS type SOI_NAMETYPE_TABLE.

    Data: WA_ITEMS like line of IT_ITEMS.

    DATA: WA_NAMECOL TYPE SOI_NAMECOL_ITEM.

    DATA: NAMECOL TYPE SOI_NAMECOL_TABLE.

    DATA: WA_FIELD LIKE RFC_FIELDS.

    DATA: FIELDS_TABLE TYPE TABLE OF RFC_FIELDS.

    DATA: OFFSET LIKE RFC_FIELDS-OFFSET VALUE 0.DATA: N TYPE I.DATA: POS TYPE I VALUE 1.DATA: ALIGNMENT TYPE I.

    call screen 0100.

    CLEAR: sales_table.sales_table-region = 'America'(ame).sales_table-sales = america_sales.APPEND sales_table.

    sales_table-region = 'Africa'(afr).sales_table-sales = africa_sales.APPEND sales_table.

    sales_table-region = 'USA'(usa).sales_table-sales = usa_sales.APPEND sales_table.

    sales_table-region = 'Europe'(eur).sales_table-sales = europe_sales.APPEND sales_table.

    sales_table-region = 'Japan'(jap).sales_table-sales = japan_sales.APPEND sales_table.

    sales_table-region = 'Asia'(asi).sales_table-sales = asia_sales.APPEND sales_table.

    LOOP AT sales_table. ind = sy-tabix. sales_table-date = sy-datum + ind. sales_table-time = sy-uzeit + ind. sales_table-weight = 100000 * ind. sales_table-amount = 11111 * ind. sales_table-id = ind. MODIFY sales_table.ENDLOOP.

  • 8/18/2019 Report Abap Alv Xls

    3/10

    Describe Table sales_table Lines numRows.

    LOOP AT sales_table. Move sales_table-region to WA_PIVOT-region. Move sales_table-date to WA_PIVOT-date. Move sales_table-amount to WA_PIVOT-amount. Collect WA_PIVOT Into IT_PIVOT.ENDLOOP.

    DT_PIVOT[] = IT_PIVOT[].** CALL FUNCTION 'ZJNC_START_EXCEL'* IMPORTING* SPREADSHEETINTF = SPREADSHEETINTF* DOCUMENTINTF = DOCUMENTINTF.

    CALL METHOD zjncdocument->get_pivot_interface EXPORTING no_flush = ' ' IMPORTING pivot_interface = pivotintf error = zjncerror retcode = zjncretcode.

    * If zjncretcode c_oi_errors=>ret_ok.

    * CALL METHOD c_oi_errors=>raise_message* EXPORTING type = 'E'.* EndIf.

    If pivotintf Is Initial. message e999 with 'NULL pivot interface'.EndIf.

    * PERFORM DYN_ANALYSE_SINGLE TABLES FIELDS_TABLE* USING DT_PIVOT* CHANGING POS N OFFSET ALIGNMENT.

    WA_NAMECOL-NAME = 'REGION'.

    WA_NAMECOL-COLUMN = '1'.APPEND WA_NAMECOL TO NAMECOL.WA_NAMECOL-NAME = 'DATE'.WA_NAMECOL-COLUMN = '2'.APPEND WA_NAMECOL TO NAMECOL.WA_NAMECOL-NAME = 'AMOUNT'.WA_NAMECOL-COLUMN = '3'.APPEND WA_NAMECOL TO NAMECOL.

    LOOP AT NAMECOL INTO WA_NAMECOL. READ TABLE FIELDS_TABLE INTO WA_FIELD INDEX WA_NAMECOL-COLUMN. IF SY-SUBRC EQ 0. WA_FIELD-FIELDNAME = WA_NAMECOL-NAME.

    MODIFY FIELDS_TABLE INDEX WA_NAMECOL-COLUMN FROM WA_FIELD. ENDIF.ENDLOOP.

    Move 'REGION' to WA_ITEMS-name.Move i_oi_pivot=>rowfield to WA_ITEMS-type.Append WA_ITEMS to IT_ITEMS.

    Move 'DATE' to WA_ITEMS-name.Move i_oi_pivot=>columnfield to WA_ITEMS-type.

  • 8/18/2019 Report Abap Alv Xls

    4/10

    Append WA_ITEMS to IT_ITEMS.

    Move 'AMOUNT' to WA_ITEMS-name.Move i_oi_pivot=>datafield to WA_ITEMS-type.Append WA_ITEMS to IT_ITEMS.

    * CALL METHOD pivotintf->set_source_table* EXPORTING data_table = DT_PIVOT[]* fields_table = FIELDS_TABLE[]* name = 'PlanningPivot'* items = IT_ITEMS[]* IMPORTING error = zjncerror* retcode = zjncretcode.*

    CLEAR: head_table.

    Head_Table-hd_region = 'Region'.Head_Table-hd_sales = 'Sales'.Head_Table-hd_date = 'Date'.Head_Table-hd_time = 'Time'.Head_Table-hd_weight = 'Weight in MT'.Head_Table-hd_amount = 'Value in Rupees'.

    Head_Table-hd_id = 'Sytem ID'.Append Head_Table.

    Head_Table-hd_region = 'Region'.Head_Table-hd_sales = 'Sales'.Head_Table-hd_date = 'Date'.Head_Table-hd_time = 'Time'.Head_Table-hd_weight = 'Weight in MT'.Head_Table-hd_amount = 'Value in Rupees'.Head_Table-hd_id = 'Sytem ID'.

    Append Head_Table.

    Head_Table-hd_region = 'Region'.Head_Table-hd_sales = 'Sales'.Head_Table-hd_date = 'Date'.Head_Table-hd_time = 'Time'.Head_Table-hd_weight = 'Weight in MT'.Head_Table-hd_amount = 'Value in Rupees'.Head_Table-hd_id = 'Sytem ID'.

    Append Head_Table.

    CALL METHOD zjncspreadsheet->add_sheet EXPORTING name = 'Sheet ONE'

    no_flush = ' ' IMPORTING error = zjncerror retcode = zjncretcode.maxRows = 1.

    * CALL FUNCTION 'ZJNC_ADD_RANGE'* EXPORTING* PRANGE = 'HeadRange1'* STARTROW = maxRows* STARTCOL = 1

  • 8/18/2019 Report Abap Alv Xls

    5/10

    * NUMROWS = 1* NUMCOLS = 7* PSHEET = 'Sheet ONE'* SPREADSHEETINTF = spreadsheetintf.

    Move SY-REPID to zjnc_repid.

    CALL METHOD zjncspreadsheet->select_sheet EXPORTING name = 'Sheet ONE' no_flush = ' ' IMPORTING error = zjncerror retcode = zjncretcode.

    CALL METHOD zjncspreadsheet->set_selection EXPORTING top = maxRows left = 7 rows = 1 columns = 1 no_flush = ' ' IMPORTING error = zjncerror retcode = zjncretcode.

    CALL METHOD zjncspreadsheet->insert_range EXPORTING name = 'HeadRange1'

    rows = maxRows columns = 7 no_flush = ' ' IMPORTING error = zjncerror retcode = zjncretcode.

    *** In ABAP Objects, you can only declare tables without headers.** Hence sales_table[] ensures Header is Stripped** CALL FUNCTION 'ZJNC_ADD_TABLE'* EXPORTING* PTABLE = head_table[]

    * PRANGE = 'HeadRange1'** PSIZE = -1* PBOLD = 1** PITALIC = -1** PALIGN = -1** PFRONT = -1** PBACK = -1** PFORMAT = 'NA'* SPREADSHEETINTF = spreadsheetintf.

    DATA: zjnc_fields_table Type TABLE OF rfc_fields.DATA: zjncwa_zjnc_fields_table TYPE rfc_fields.

    Move SY-REPID to zjnc_repid.

    CALL FUNCTION 'DP_GET_FIELDS_FROM_TABLE' TABLES data = head_table[] fields = zjnc_fields_table.

    CALL METHOD zjncspreadsheet->insert_one_table EXPORTING* ddic_name = ddic_name

  • 8/18/2019 Report Abap Alv Xls

    6/10

    data_table = head_table[] fields_table = zjnc_fields_table rangename = 'HeadRange1' wholetable = 'X' no_flush = ' ' IMPORTING error = zjncerror retcode = zjncretcode.

    CALL METHOD zjncspreadsheet->set_font EXPORTING rangename = 'HeadRange1' family = 'Arial' size = -1 bold = 1 italic = -1 align = -1 no_flush = ' ' IMPORTING error = zjncerror retcode = zjncretcode.

    CALL METHOD zjncspreadsheet->set_color EXPORTING rangename = 'HeadRange1' front = -1 back = -1 no_flush = ' '

    IMPORTING error = zjncerror retcode = zjncretcode.

    * Add 1 to maxrows.** Describe Table sales_table Lines numRows.** CALL FUNCTION 'ZJNC_ADD_RANGE'* EXPORTING* PRANGE = 'DataRange1'* STARTROW = maxRows* STARTCOL = 1

    * NUMROWS = numRows* NUMCOLS = 7* PSHEET = 'Sheet ONE'* SPREADSHEETINTF = spreadsheetintf.** CALL FUNCTION 'ZJNC_ADD_TABLE'* EXPORTING* PTABLE = sales_table[]* PRANGE = 'DataRange1'** PSIZE = -1* PBOLD = 0** PITALIC = -1** PALIGN = -1

    * PFRONT = 3** PBACK = -1** PFORMAT = 'NA'* SPREADSHEETINTF = spreadsheetintf.*** Start NewSheet on TOP* Move 1 to maxRows.** CALL FUNCTION 'ZJNC_ADD_SHEET'* EXPORTING

  • 8/18/2019 Report Abap Alv Xls

    7/10

    * PSHEET = 'Sheet TWO'* SPREADSHEETINTF = spreadsheetintf.** CALL FUNCTION 'ZJNC_ADD_RANGE'* EXPORTING* PRANGE = 'HeadRange2'* STARTROW = maxRows* STARTCOL = 1* NUMROWS = 1* NUMCOLS = 7* PSHEET = 'Sheet TWO'* SPREADSHEETINTF = spreadsheetintf.*** In ABAP Objects, you can only declare tables without headers.** Hence sales_table[] ensures Header is Stripped** CALL FUNCTION 'ZJNC_ADD_TABLE'* EXPORTING* PTABLE = head_table[]* PRANGE = 'HeadRange2'** PSIZE = -1* PBOLD = 1** PITALIC = -1** PALIGN = -1

    ** PFRONT = -1** PBACK = -1** PFORMAT = 'NA'* SPREADSHEETINTF = spreadsheetintf.** Add 1 to maxrows.** CALL FUNCTION 'ZJNC_ADD_RANGE'* EXPORTING* PRANGE = 'DataRange2'* STARTROW = maxRows* STARTCOL = 1* NUMROWS = numRows

    * NUMCOLS = 7* PSHEET = 'Sheet TWO'* SPREADSHEETINTF = spreadsheetintf.** CALL FUNCTION 'ZJNC_ADD_TABLE'* EXPORTING* PTABLE = sales_table[]* PRANGE = 'DataRange2'** PSIZE = -1* PBOLD = 0** PITALIC = -1** PALIGN = -1* PFRONT = 55

    * PBACK = 6** PFORMAT = 'NA'* SPREADSHEETINTF = spreadsheetintf.

    *break-point.CALL METHOD zjncdocument->save_as EXPORTING file_name = 'C:\@ALombardi\ejm.xls'.

    * CALL FUNCTION 'POPUP_TO_INFORM'

  • 8/18/2019 Report Abap Alv Xls

    8/10

    * EXPORTING* titel = sy-repid* txt2 = 'See EXCEL & SAVE if Needed'* txt1 = 'Jai Hind ....'.

    *&---------------------------------------------------------------------**& Form GET_ALIGNMENT*&---------------------------------------------------------------------*FORM GET_ALIGNMENT USING P_TYP CHANGING ALIGNBASE. ALIGNBASE = 1. CASE P_TYP.*FLOAT VALUE NEEDS 8 BYTE ALIGNMENT WHEN 'F'. ALIGNBASE = 8.*SHORT INTEGER NEEDS 2 BYTE ALIGNMENT WHEN 's'. ALIGNBASE = 2.*LONG INTEGER NEEDS 4 BYTE ALIGNMENT WHEN 'I'. ALIGNBASE = 4.*ALL OTHER TYPES ARE BYTE ALIGNED ENDCASE.

    ENDFORM.

    *&---------------------------------------------------------------------**& Form OFFSET_CORRECTION*&---------------------------------------------------------------------*FORM OFFSET_CORRECTION USING P_TYP ALIGNBASE CHANGING P_FIELDS_OFFSET.

    DATA : MODRESULT TYPE I. DATA : ADDOFFSET TYPE I. DATA : THISALIGNBASE TYPE I.

    IF P_TYP NE ' '. PERFORM GET_ALIGNMENT USING P_TYP CHANGING THISALIGNBASE. ELSE. THISALIGNBASE = ALIGNBASE. ENDIF. IF THISALIGNBASE NE 1.* If the reminder of mod operation is not equal 0 we have to adjust* the offset MODRESULT = P_FIELDS_OFFSET MOD THISALIGNBASE. IF MODRESULT NE 0. ADDOFFSET = THISALIGNBASE - MODRESULT. P_FIELDS_OFFSET = P_FIELDS_OFFSET + ADDOFFSET. ENDIF.

    ENDIF.ENDFORM.*&---------------------------------------------------------------------**& Module STATUS_0100 OUTPUT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*module STATUS_0100 output.* SET PF-STATUS 'xxxxxxxx'.* SET TITLEBAR 'xxx'.

  • 8/18/2019 Report Abap Alv Xls

    9/10

    ** IF zjncdocument IS NOT INITIAL.* RETURN.* EndIf.

    Perform ZJNC_INIT_EXCEL.

    Leave to Screen 0.

    endmodule." STATUS_0100 OUTPUT*&---------------------------------------------------------------------**& Form ZJNC_INIT_EXCEL*&---------------------------------------------------------------------*Form ZJNC_INIT_EXCEL.

    CALL METHOD c_oi_container_control_creator=>get_container_control IMPORTING control = zjnccontrol error = zjncerror.

    IF sy-subrc NE 0. CALL FUNCTION 'POPUP_TO_INFORM' EXPORTING titel = zjnc_repid txt2 = 'Create OLE zjnccontrol Failed'

    txt1 = 'to make Excel zjnccontrol'. Leave Program. ENDIF.

    CREATE OBJECT zjnccontainer EXPORTING CONTAINER_NAME = 'MYCONTROL' EXCEPTIONS CNTL_ERROR = 1 CNTL_SYSTEM_ERROR = 2 CREATE_ERROR = 3 LIFETIME_ERROR = 4 LIFETIME_DYNPRO_DYNPRO_LINK = 5.

    IF sy-subrc NE 0.* add your handling ENDIF.

    CALL METHOD zjnccontrol->init_control EXPORTING r3_application_name = 'R/3 Basis'"#EC NOTEXT inplace_enabled = 'X' inplace_scroll_documents = 'X' parent = zjnccontainer register_on_close_event = 'X' register_on_custom_event = 'X' no_flush = 'X'

    IMPORTING error = zjncerror.

    IF sy-subrc NE 0. CALL FUNCTION 'POPUP_TO_INFORM' EXPORTING titel = zjnc_repid txt2 = 'INIT OLE zjnccontrol Failed' txt1 = 'to init Excel zjnccontrol'. Leave Program. ENDIF.

  • 8/18/2019 Report Abap Alv Xls

    10/10

    CALL METHOD zjnccontrol->get_document_proxy EXPORTING document_type = zjncexcelsheet* document_format = document_format* register_container = register_container no_flush = ' ' IMPORTING document_proxy = zjncdocument retcode = zjncretcode error = zjncerror.

    IF sy-subrc NE 0. CALL FUNCTION 'POPUP_TO_INFORM' EXPORTING titel = zjnc_repid txt2 = 'Create zjncdocument PROXY Failed' txt1 = 'to make Excel zjncdocument'. Leave Program. ENDIF.

    CALL METHOD zjncdocument->create_document EXPORTING open_inplace = ' '* create_view_data = create_view_data* onsave_macro = onsave_macro* startup_macro = startup_macro

    document_title = 'JNC' no_flush = ' ' IMPORTING error = zjncerror* retcode = retcode .

    IF sy-subrc NE 0. CALL FUNCTION 'POPUP_TO_INFORM' EXPORTING titel = zjnc_repid txt2 = 'Create zjncdocument Failed' txt1 = 'to make Excel zjncdocument'. Leave Program.

    ENDIF. CALL METHOD zjncdocument->get_spreadsheet_interface EXPORTING no_flush = ' ' IMPORTING sheet_interface = zjncspreadsheet error = zjncerror retcode = zjncretcode.

    IF sy-subrc NE 0. CALL FUNCTION 'POPUP_TO_INFORM' EXPORTING titel = zjnc_repid txt2 = 'Create zjncspreadsheet INTERFACE Failed'

    txt1 = 'to make Excel zjncspreadsheet'. Leave Program. ENDIF.

    ENDFORM." ZJNC_INIT_EXCEL