|
<< 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  ' 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> </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