Report (302)

<< Click to Display Table of Contents >>

Navigation:  All About ABAP Technique > Indonesia > ABAP Report > Html  >

Report (302)

Objektif

Membuat Report

Hasil

Kode Sintak

Include "YPRACTICE_302_CLASSES"

Kode Transaksi

SE38 - ABAP Editor

Tabel

MARA - General Material Data

MAKT - Material Descriptions

T006A - Assign Internal to Language-Dependent Unit

Support

Video

 

Membuat Report

1.Buka SE38

2.Salin Program "YPRACTICE_301" menjadi "YPRACTICE_302"

3.Seleksi Semua Objek

ar0035

4.Ubah Program "YPRACTICE_302"

5.Buka Goto > Attributes, dan ubah "Title" dengan "302 - Display List of Master Material"

6.Modifikasi Deklarasi Report

Sebelum

REPORT  ypractice_301.

 

Setelah

REPORT  ypractice_302.

 

7.Klik "ar0015"

8.Tambahkan Program Include Baru

ar0036

9.Isikan include dengan "YPRACTICE_302_CLASSES" dan kemudian klik "ar0003"

ar0037

10.Klik "abap_tutorial0017" untuk membuat include baru

ar0038

11.Simpan ke package yang sama dengan "YPRACTICE_302" dan kemudian klik "ar0003" untuk memasukkan include ke program utama.

12.Buat variabel global pada "YPRACTICE_302_CLASSES"

*----------------------------------------------------------------------*

*GLOBAL VARIABLE DECRALATION

*----------------------------------------------------------------------*

DATA : gv_html_event_tab       TYPE cntl_simple_events,

       gv_html_event           TYPE cntl_simple_event,

       gv_repid LIKE sy-repid,

       gv_frame(255),

       gv_action(256),

       gv_getdata(2048),

       gv_postdataline(1024),

       gi_postdata_tab TYPE cnht_post_data_tab,

       gi_query_table TYPE TABLE OF w3query WITH HEADER LINE.

 

13.Buat definisi Klass pada "YPRACTICE_302_CLASSES"

*---------------------------------------------------------------------*

*       CLASS cl_html_event_handler DEFINITION

*---------------------------------------------------------------------*

*

*---------------------------------------------------------------------*

CLASS cl_html_event_handler DEFINITION.

 

  PUBLIC SECTION.

*    Event yg aktif

    METHODS: on_sapevent

              FOR EVENT sapevent OF cl_gui_html_viewer

               IMPORTING action frame getdata postdata query_table.

 

ENDCLASS.                    "cl_html_event_handler DEFINITION

 

Data: gv_evt_receiver TYPE REF TO cl_html_event_handler.

 

14.Buat Implementasi Kelas pada "YPRACTICE_302_CLASSES"

*---------------------------------------------------------------------*

*       CLASS cl_html_event_handler IMPLEMENTATION

*---------------------------------------------------------------------*

*

*---------------------------------------------------------------------*

CLASS cl_html_event_handler IMPLEMENTATION.

 

*  Prsedur Event

  METHOD on_sapevent.

 

    CLEAR gv_action.

    CLEAR gv_frame.

    CLEAR gv_getdata.

    CLEAR gv_postdataline.

 

    gv_action       = action.

    gv_frame        = frame.

    gv_getdata      = getdata.

    gi_postdata_tab   = postdata.

    IF NOT gi_postdata_tab IS INITIAL.

      READ TABLE gi_postdata_tab INDEX 1 INTO gv_postdataline.

    ENDIF.

    gi_query_table[] = query_table[].

 

 

    CASE action.

*      Aksi "BUKA HALAMAN" Ketika menekan tombol di Halaman HTML

      WHEN 'SUBMIT_PAGE_NO'.

        PERFORM fm_display_data.

 

      WHEN OTHERS.

    ENDCASE.

  ENDMETHOD.                    "on_sapevent

 

ENDCLASS.                    "cl_html_event_handler IMPLEMENTATION

 

15.Pindahkan include "" diatas  "Input Screen/Selection"

...

  concatenate &1 &2 &3 into gi_html_code-line_code.

  append gi_html_code.

END-OF-DEFINITION.

 

*----------------------------------------------------------------------*

*INCLUDE PROGRAM

*----------------------------------------------------------------------*

*Anda dapat menaruh Program include pada halaman di bawah

 

INCLUDE ypractice_302_classes.

 

*----------------------------------------------------------------------*

*Input Screen/Selection

*----------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK groupbox1 WITH FRAME TITLE text_101. "Declare Group Box 1

...

 

16.Modifikasi "Input Screen/Selection" dan tambahkan parameter baru

Sebelum

...

SELECTION-SCREEN BEGIN OF BLOCK groupbox2 WITH FRAME TITLE text_201. "Declare Group Box 2

 

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(18) text_202 FOR FIELD p_fname.

PARAMETERS p_fname LIKE rlgrap-filename OBLIGATORY DEFAULT 'C:\abap_report_01.html'.

SELECTION-SCREEN END OF LINE.

 

SELECTION-SCREEN END OF BLOCK groupbox2. 

...

 

Setelah

...

SELECTION-SCREEN BEGIN OF BLOCK groupbox2 WITH FRAME TITLE text_201. "Declare Group Box 2

 

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(18) text_202 FOR FIELD p_fname.

PARAMETERS p_fname LIKE rlgrap-filename OBLIGATORY DEFAULT 'C:\abap_report_01.html'.

SELECTION-SCREEN END OF LINE.

 

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(18) text_203 FOR FIELD p_mline .

PARAMETERS p_mline TYPE n DEFAULT 20 LENGTH 4.

SELECTION-SCREEN END OF LINE.

 

SELECTION-SCREEN END OF BLOCK groupbox2.                              "End Group Box 2

...

 

17.Tambahkan teks pada "INITIALIZATION"

  text_203 = 'Max. Line per Page'.

 

18.Buat Subroutine Baru "fm_create_paging_menu"

*&--------------------------------------------------------------------*

*&      Form  fm_create_paging_menu

*&--------------------------------------------------------------------*

*       text

*---------------------------------------------------------------------*

*      -->FV_TOTAL_PAtext

*      -->FV_ACTIVE_PtextNO

*---------------------------------------------------------------------*

FORM fm_create_paging_menu USING fv_total_page fv_active_page_no.

  DATA : lv_counter TYPE n LENGTH 4,

         lv_item(256).

  lv_counter = 0.

 

  write_code1 '  <form name="form1" method="post" action="SAPEVENT:SUBMIT_PAGE_NO">'.

  write_code1 '    <tr colspan="6" class="style2">'.

  write_code1 '      <td>Page : '.

  write_code1 '        <select name="PAGE_NO" id="PAGE_NO">'.

 

  WHILE fv_total_page > lv_counter.

    lv_counter = lv_counter + 1.

    IF lv_counter = fv_active_page_no.

      CONCATENATE '<option value="' lv_counter '" selected>' lv_counter '</option>' INTO lv_item.

    ELSE.

      CONCATENATE '<option value="' lv_counter '" >' lv_counter '</option>' INTO lv_item.

    ENDIF.

    write_code1 lv_item.

 

  ENDWHILE.

 

 

  write_code3 '        </select> / ' fv_total_page ' '.

  write_code1 '        <input name="Open_Submit" type="submit" id="Open_Submit" value="Open"></td>'.

  write_code1 '    </tr>'.

  write_code1 '  </form>'.

 

ENDFORM.                    "fm_create_paging_menu

 

19.Modifikasi subroutine "fm_display_data"

Sebelum

*&--------------------------------------------------------------------*

*&      Form  fm_display_data

*&--------------------------------------------------------------------*

*       text

*---------------------------------------------------------------------*

FORM fm_display_data.

  REFRESH gi_html_code.

 

  PERFORM fm_create_css.

  write_code1 '<body>'.

  write_code1 '<table width="100%" border="0" cellspacing="2" cellpadding="0">'.

 

*  Membuat Teks Header

  write_code1 '  <tr bgcolor="#999999" class="styleHeader">'.

  write_code1 '    <td>Mat. Group</td>'.

  write_code1 '    <td>Mat. No.</td>'.

  write_code1 '    <td>Description</td>'.

  write_code1 '    <td>Old Mat. No.</td>'.

  write_code1 '    <td>Base Unit of Measure</td>'.

  write_code1 '    <td>Measure</td>'.

  write_code1 '  </tr>'.

 

 

*  Menampilkan Data Ke layar

  LOOP AT gi_header.

    write_code1 '  <tr bgcolor="#EBEBEB">'.

    write_code3 '    <td class="style1">' gi_header-matkl '</td>'.

    write_code3 '    <td class="style1">' gi_header-matnr '</td>'.

    write_code3 '    <td class="style2">' gi_header-maktx '</td>'.

    write_code3 '    <td class="style2">' gi_header-bismt '</td>'.

    write_code3 '    <td class="style1">' gi_header-meins '</td>'.

    write_code3 '    <td class="style2">' gi_header-mseht '</td>'.

    write_code1 '  </tr>'.

 

  ENDLOOP.

 

*  Akhir dari Baris

  write_code1 '</table>'.

  write_code1 '</body>'.

 

 

  PERFORM fm_create_html_file TABLES gi_html_code USING p_fname.

  PERFORM fm_load_html USING p_fname.

 

  CALL SCREEN 2000.

 

ENDFORM.                    "fm_display_data

 

Setelah

*&--------------------------------------------------------------------*

*&      Form  fm_display_data

*&--------------------------------------------------------------------*

*       text

*---------------------------------------------------------------------*

FORM fm_display_data.

  DATA : lv_active_page_no TYPE n LENGTH 4,

         lv_limit_top TYPE i,

         lv_limit_bottom TYPE i,

         lv_total_page LIKE lv_active_page_no,

         lv_remainder LIKE lv_active_page_no.

 

*  Menghitung Total Halaman

  lv_total_page = ( LINES( gi_header ) DIV p_mline ).

  lv_remainder = LINES( gi_header ) MOD p_mline.

 

  IF lv_remainder > 0.

    lv_total_page = lv_total_page+1.

  ENDIF.

 

*  Memnghitung Batas Halaman

  IF LINES( gi_query_table ) > 0 AND gv_action = 'SUBMIT_PAGE_NO'.

    READ TABLE gi_query_table WITH KEY name = 'PAGE_NO'.

    IF sy-subrc = 0.

      lv_active_page_no = gi_query_table-value.

 

      lv_limit_top = lv_active_page_no * p_mline.

    ENDIF.

  ELSE.

    lv_active_page_no = 1.

    lv_limit_top = 1.

  ENDIF.

 

  lv_limit_bottom = lv_limit_top + p_mline.

 

 

  REFRESH gi_html_code.

  PERFORM fm_create_css.

 

  write_code1 '<body>'.

 

 

  write_code1 '<table width="100%" border="0" cellspacing="2" cellpadding="0">'.

  PERFORM fm_create_paging_menu USING lv_total_page lv_active_page_no.

 

*  Membuat Teks Header

  write_code1 '  <tr bgcolor="#999999" class="styleHeader">'.

  write_code1 '    <td>Mat. Group</td>'.

  write_code1 '    <td>Mat. No.</td>'.

  write_code1 '    <td>Description</td>'.

  write_code1 '    <td>Old Mat. No.</td>'.

  write_code1 '    <td>Base Unit of Measure</td>'.

  write_code1 '    <td>Measure</td>'.

  write_code1 '  </tr>'.

 

*  Menampilkan Data Ke layar

  LOOP AT gi_header FROM lv_limit_top TO lv_limit_bottom.

    write_code1 '  <tr bgcolor="#EBEBEB">'.

    write_code3 '    <td class="style1">' gi_header-matkl '</td>'.

    write_code3 '    <td class="style1">' gi_header-matnr '</td>'.

    write_code3 '    <td class="style2">' gi_header-maktx '</td>'.

    write_code3 '    <td class="style2">' gi_header-bismt '</td>'.

    write_code3 '    <td class="style1">' gi_header-meins '</td>'.

    write_code3 '    <td class="style2">' gi_header-mseht '</td>'.

    write_code1 '  </tr>'.

 

  ENDLOOP.

 

*  Akhir Dari Baris Line

  write_code1 '  <td bgcolor="#999999" class="styleHeader" colspan="6">&nbsp;</td>'.

  PERFORM fm_create_paging_menu USING lv_total_page lv_active_page_no.

  write_code1 '</table>'.

  write_code1 '</body>'.

 

 

  PERFORM fm_create_html_file TABLES gi_html_code USING p_fname.

  PERFORM fm_load_html USING p_fname.

 

  CALL SCREEN 2000.

 

ENDFORM.                    "fm_display_data

 

20.Modifikasi subroutine "fm_load_html"

Sebelum

*&--------------------------------------------------------------------*

*&      Form  fm_load_html

*&--------------------------------------------------------------------*

*       text

*---------------------------------------------------------------------*

*      -->URL        text

*---------------------------------------------------------------------*

FORM fm_load_html USING fv_url.

  CALL METHOD cc_report_display->show_url

    EXPORTING

      url = fv_url.

ENDFORM.                    "fm_load_html

 

Setelah

*&--------------------------------------------------------------------*

*&      Form  fm_load_html

*&--------------------------------------------------------------------*

*       text

*---------------------------------------------------------------------*

*      -->URL        text

*---------------------------------------------------------------------*

FORM fm_load_html USING fv_url.

  TRY.

      CALL METHOD cc_report_display->show_url

        EXPORTING

          url = fv_url.

    CATCH cx_sy_ref_is_initial.

      LEAVE TO SCREEN 0.

  ENDTRY.

ENDFORM.                    "fm_load_html

 

21.Modifikasi modul "status_2000_OUTPUT"

Sebelum

*&---------------------------------------------------------------------*

*&      Module  STATUS_2000  OUTPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

MODULE status_2000 OUTPUT.

  SET PF-STATUS 'ST_2000'.

*  SET TITLEBAR 'xxx'.

 

ENDMODULE.                 " STATUS_2000  OUTPUT

 

Setelah

*&---------------------------------------------------------------------*

*&      Module  STATUS_2000  OUTPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

MODULE status_2000 OUTPUT.

  SET PF-STATUS 'ST_2000'.

*  SET TITLEBAR 'xxx'.

 

* Meregrister Event

  IF NOT cc_report_display IS INITIAL.

    gv_html_event-eventid = cc_report_display->m_id_sapevent.

    gv_html_event-appl_event = 'x'.

    APPEND gv_html_event TO gv_html_event_tab.

 

    CALL METHOD cc_report_display->set_registered_events

      EXPORTING

        events = gv_html_event_tab.

 

    CREATE OBJECT gv_evt_receiver.

 

    SET HANDLER gv_evt_receiver->on_sapevent

                FOR cc_report_display.

  ELSE.

    LEAVE TO SCREEN 0.

  ENDIF.

ENDMODULE.                 " STATUS_2000  OUTPUT

 

22.Modifikasi modul "user_command_2000"

Sebelum

*&---------------------------------------------------------------------*

*&      Module  USER_COMMAND_2000  INPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

MODULE user_command_2000 INPUT.

  save_ok = ok_code.

  CLEAR ok_code.

 

  CASE save_ok.

    WHEN 'BACK'.

      LEAVE TO SCREEN 0.

    WHEN OTHERS.

 

  ENDCASE.

 

  CLEAR ok_code.

ENDMODULE.                 " USER_COMMAND_2000  INPUT

 

Setelah

*&---------------------------------------------------------------------*

*&      Module  USER_COMMAND_2000  INPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

MODULE user_command_2000 INPUT.

  save_ok = ok_code.

  CLEAR ok_code.

 

  CASE save_ok.

    WHEN 'BACK'.

      REFRESH gi_query_table.

      IF NOT cc_report_display IS INITIAL.

        CALL METHOD cc_report_display->free.

        FREE cc_report_display.

      ENDIF.

      LEAVE TO SCREEN 0.

    WHEN OTHERS.

      CALL METHOD cl_gui_cfw=>dispatch.

 

  ENDCASE.

 

  CLEAR ok_code.

ENDMODULE.                 " USER_COMMAND_2000  INPUT

 

23.Simpan dan Aktivasi Program

24.Seleksi 4 Objek seperti pada gambar dibawah

ar0039

25.Klik "ar0003" untuk mengaktifkan semua objek

26.Tes dan Jalankan Program

27.Buat T-Code "YP302"

28.Selesai

 

Hasil

Seleksi Input

ar0040

Output

ar0041