YPRACTICE_303

<< Click to Display Table of Contents >>

Navigation:  All About ABAP Technique > ABAP Source Code >

YPRACTICE_303

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

*& Report  YPRACTICE_303                                               *

*&                                                                     *

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

*&                                                                     *

*&                                                                     *

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

 

REPORT  YPRACTICE_303                    .

 

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

* Tables

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

TABLES : bkpf, vbak.

 

 

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

*GLOBAL VARIABLE DECRALATION

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

TYPES: BEGIN OF ty_header,

        bulan TYPE n LENGTH 2,

        total LIKE vbak-netwr,

      END OF ty_header.

 

DATA: gi_header TYPE STANDARD TABLE OF ty_header WITH HEADER LINE,

      gi_vbak LIKE STANDARD TABLE OF vbak WITH HEADER LINE.

 

DATA: gv_width TYPE i.  " Width of list

 

DATA: ok_code LIKE sy-ucomm,

      save_ok TYPE sy-ucomm.

 

* Html Report Required

TYPES: BEGIN OF gy_html_code,

         line_code(1000),

       END OF gy_html_code.

DATA: gi_html_code TYPE TABLE OF gy_html_code WITH HEADER LINE.

 

DATA: cc_report_display TYPE REF TO cl_gui_html_viewer,

      web_container TYPE REF TO cl_gui_custom_container.

 

DEFINE write_code1.

  clear gi_html_code.

  gi_html_code-line_code = &1.

  append gi_html_code.

END-OF-DEFINITION.

 

DEFINE write_code2.

  clear gi_html_code.

  concatenate &1 &2 into gi_html_code-line_code.

  append gi_html_code.

END-OF-DEFINITION.

 

DEFINE write_code3.

  clear gi_html_code.

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

  append gi_html_code.

END-OF-DEFINITION.

 

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

*Input Screen/Selection

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

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

 

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(14) text_102 FOR FIELD so_gjahr.

SELECT-OPTIONS so_gjahr FOR bkpf-gjahr OBLIGATORY DEFAULT '2000' NO-EXTENSION NO INTERVALS.

SELECTION-SCREEN END OF LINE.

 

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(14) text_103 FOR FIELD so_waerk.

SELECT-OPTIONS so_waerk FOR vbak-waerk OBLIGATORY DEFAULT 'USD' NO-EXTENSION NO INTERVALS.

SELECTION-SCREEN END OF LINE.

 

SELECTION-SCREEN END OF BLOCK groupbox1.                              "End Group Box 1

 

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:\grafik\grafik_test.html'.

SELECTION-SCREEN END OF LINE.

 

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

 

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

*INITIALIZATION

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

INITIALIZATION.

  text_101 = 'Selection Parameter'.

  text_102 = 'Tahun'.

  text_103 = 'Curr'.

 

  text_201 = 'Save Html File'.

  text_202 = 'File Location'.

 

  PERFORM fm_initialization.

 

*======================================================================*

*MAIN PROGRAM

*Execute after Input Screen

*======================================================================*

START-OF-SELECTION.

  gv_width = 125.

  PERFORM fm_collect_data.

  PERFORM fm_process_data.

  PERFORM fm_display_data.

 

END-OF-SELECTION.

 

 

*======================================================================*

*SUB PROGRAM / SUB ROUTINE

*======================================================================*

 

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

*&      Form  fm_collect_data

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

*       text

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

FORM fm_collect_data.

  DATA : lv_low LIKE sy-datum,

         lv_high LIKE sy-datum.

 

  CONCATENATE so_gjahr-low '01' '01' INTO lv_low.

  CONCATENATE so_gjahr-low '12' '31' INTO lv_high.

 

*  Collect

  SELECT vbeln audat netwr waerk

    INTO CORRESPONDING FIELDS OF TABLE gi_vbak

  FROM vbak

  WHERE

    ( audat BETWEEN lv_low AND lv_high ) AND

    waerk IN so_waerk.

 

 

ENDFORM.                    "FM_COLLECT_DATA

 

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

*&      Form  FM_PROCESS_DATA

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

*       text

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

FORM fm_process_data.

  DATA : lv_date1 LIKE sy-datum,

         lv_date2 LIKE sy-datum,

         lv_bulan TYPE n LENGTH 2,

         lv_total LIKE vbak-netwr.

 

 

  DO 12 TIMES.

    ADD 1 TO lv_bulan.

    CONCATENATE so_gjahr-low lv_bulan '01' INTO lv_date1.

    CALL FUNCTION 'SG_PS_GET_LAST_DAY_OF_MONTH'

      EXPORTING

        day_in            = lv_date1

      IMPORTING

        last_day_of_month = lv_date2.

 

    CLEAR : gi_header, lv_total.

    SORT gi_vbak BY audat.

    LOOP AT gi_vbak WHERE audat BETWEEN lv_date1 AND lv_date2.

      ADD gi_vbak-netwr TO lv_total.

    ENDLOOP.

 

    gi_header-bulan = lv_bulan.

    gi_header-total = lv_total.

    APPEND gi_header.

 

  ENDDO.

 

ENDFORM.                    "FM_PROCESS_DATA

 

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

*&      Form  fm_display_data

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

*       text

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

FORM fm_display_data.

 

  DATA : lv_total(20),

         title(50),

         lv_bulan TYPE n LENGTH 2.

 

  DATA : li_tmp LIKE STANDARD TABLE OF gi_html_code WITH HEADER LINE.

 

  REFRESH gi_html_code.

  CONCATENATE 'Report Grafik Penjualan Tahun &nbsp' so_gjahr-low INTO title.

 

 

 

*  Create Header Text and referencing source of JQuery

  write_code1 '<html>'.

  write_code1 '<head>'.

  write_code1 '<script type="text/javascript" src="JS/jquery-1.4.js"></script>'.

  write_code1 '<script type="text/javascript" src="JS/jquery.fusioncharts.js"></script>'.

  perform  fm_create_css.

  write_code1 '</head>'.

  write_code1 '<body>'.

  write_code1 '<center>'.

  write_code3 '<h2>' title '</h2>'.

 

 

*  Display Data to Screen

  write_code1 '<table id="myHTMLTable" border="1" align="center" class="table_data">'.

  write_code1 '<tr><th>&nbsp;</th>'.

 

  DO 12 TIMES.

    ADD 1 TO lv_bulan.

    write_code3 '                 <th>' lv_bulan '</th>'.

  ENDDO.

 

  write_code1 '</tr>'.

  write_code3 '                <tr> <th>' so_gjahr-low '</th>'.

 

  LOOP AT gi_header.

    REFRESH : li_tmp.

 

* Eliminate thousand separator and change decimals separator

    WRITE gi_header-total TO lv_total CURRENCY so_waerk-low.

    REPLACE ALL OCCURRENCES OF '.' IN lv_total WITH ''.

    CONDENSE lv_total.

    REPLACE ALL OCCURRENCES OF ',' IN lv_total WITH '.'.

 

 

    write_code3 '                 <th>' lv_total '</th>'.

  ENDLOOP.

 

  write_code1 '            </tr>'.

  write_code1 '        </table>'.

 

 

*  Java Script for retrieving data from HTML tables.

  write_code1 '        <script type="text/javascript">'.

  write_code1 '        $("#myHTMLTable").convertToFusionCharts({'.

  write_code1 '                swfPath: "",'.

  write_code1 '                type: "MSColumn3D",'.

  write_code1 '                data: "#myHTMLTable",'.

  write_code1 '                dataFormat: "HTMLTable",'.

  write_code1 '             width: "600",'.

  write_code1 '             height: "300"'.

  write_code1 '        });'.

  write_code1 '        </script>'.

 

*  End of Line

  write_code1 '        </center>'.

  write_code1 '</body>'.

  write_code1 '</html>'.

 

 

  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

 

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

*&      Form  fm_initialization

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

*       text

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

FORM fm_initialization.

  IF cc_report_display IS INITIAL.

 

    CREATE OBJECT web_container

        EXPORTING

            container_name = 'CC_REPORT_DISPLAY'.

 

    CREATE OBJECT cc_report_display

         EXPORTING

              parent    = web_container.

    IF sy-subrc NE 0.

*

    ENDIF.

  ENDIF.

ENDFORM.                    "fm_initialization

 

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

*&      Form  fm_create_css

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

*       text

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

*      -->FV_CSS     text

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

FORM fm_create_css.

  write_code1 '<style type="text/css">'.

  write_code1 '<!--'.

  write_code1 '.table_data {'.

  write_code1 '        font-family: Arial, Helvetica, sans-serif;'.

  write_code1 '        font-size: 12px;'.

  write_code1 '      border: 1px solid #909090;'.

  write_code1 '      border-collapse: collapse;'.

  write_code1 '                                  }'.

  write_code1 '-->'.

  write_code1 '</style>'.

ENDFORM.

 

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

*&      Form  fm_create_temp_html

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

*       text

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

*      -->FI_FILE    text

*      -->FV_URL     text

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

FORM fm_create_html_file TABLES fi_file STRUCTURE gi_html_code USING fv_url.

  CONDENSE fv_url NO-GAPS.

 

  CALL FUNCTION 'WS_DOWNLOAD'

    EXPORTING

      filename            = fv_url

      filetype            = 'ASC'

    TABLES

      data_tab            = fi_file

    EXCEPTIONS

      file_open_error     = 1

      file_write_error    = 2

      invalid_filesize    = 3

      invalid_table_width = 4

      invalid_type        = 5

      no_batch            = 6

      unknown_error       = 7

      OTHERS              = 8.

 

ENDFORM.                    "fm_create_temp_html

 

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

*&      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

 

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

*&      Module  STATUS_2000  OUTPUT

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

*       text

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

MODULE status_2000 OUTPUT.

  SET PF-STATUS 'ST_2000'.

*  SET TITLEBAR 'xxx'.

 

ENDMODULE.                 " STATUS_2000  OUTPUT

 

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

*&      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

 

                "fm_create_css