Pages

Sunday, April 4, 2010

Download Internal Table to Excel with headers

lv_del = cl_abap_char_utilities=>horizontal_tab.

lv_file = p_file.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =
filename = lv_file
filetype = c_ftype_asc
* APPEND = ' '
write_field_separator = lv_del
* HEADER = '00'
* TRUNC_TRAILING_BLANKS = ' '
* WRITE_LF = 'X'
* COL_SELECT = ' '
* COL_SELECT_MASK = ' '
* DAT_MODE = ' '
* CONFIRM_OVERWRITE = ' '
* NO_AUTH_CHECK = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* WRITE_BOM = ' '
* trunc_trailing_blanks_eol =
* IMPORTING
* FILELENGTH =
TABLES
data_tab = p_table
fieldnames = p_heading
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 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
MESSAGE i003 WITH 'File downloaded successfully:'(i04) lv_file.
ENDIF.
***********************************

Header Part.
We need to populate header data just like field catalog and pass the header details internal table to the Download FM above. Here we have passed P_HEADER which has been built in the following ways:

wa_header-fname = 'Reason'(r16).
APPEND wa_header TO p_header.
CLEAR wa_header.

wa_header-fname = 'ZPID'(r02).
APPEND wa_header TO p_header.
CLEAR wa_header.
*****************************

Do Varying usage

DATA: lv_subty TYPE subty,
lv_lgaxx TYPE lgart,
lv_betxx TYPE pad_amt7s.

* Extract PERNR Wage-type details from IT9027
**********************************************
lv_subty = '0'."Read SUBTYPE 0 only as it hold the valid record
"Read Infotype Table
SELECT * FROM pa9027
INTO TABLE it_9027
WHERE pernr EQ p0008-pernr
AND subty EQ lv_subty. "#EC CI_SGLSELECT
"If data found in IT9027
IF sy-subrc EQ 0.
"Delete all other reason code entries from Table
DELETE it_9027 WHERE preas NE c_prog_reason.
"Bring the latest record at top
SORT it_9027 BY endda DESCENDING.
"Read latest record
READ TABLE it_9027 INTO wa_9027 INDEX 1.
"If data found
IF sy-subrc EQ 0.
"Read work area row for all Wage type values
DO 40 TIMES VARYING lv_lgaxx FROM wa_9027-lga01 NEXT wa_9027-lga02
VARYING lv_betxx FROM wa_9027-bet01 NEXT wa_9027-bet02.
"Read only Annual Salary Wage types (Refer view V_T539J)
"NOTE: As of now 1000,2NPY and 1NPY make up the Annual Salary
wa_wage_tab-pernr = p0008-pernr.
CASE lv_lgaxx.
WHEN c_wage_type_1.
gv_1000 = lv_betxx. "Store Amount per Wage-Type
WHEN c_wage_type_2.
gv_2npy = lv_betxx."Store Amount per Wage-Type
WHEN c_wage_type_3.
gv_1100 = lv_betxx."Store Amount per Wage-Type
WHEN c_wage_type_4.
gv_1npy = lv_betxx."Store Amount per Wage-Type
WHEN c_wage_type_5.
gv_1005 = lv_betxx."Store Amount per Wage-Type
WHEN c_wage_type_6.
gv_mf02 = lv_betxx."Store Amount per Wage-Type
WHEN c_wage_type_7.
gv_mf04 = lv_betxx."Store Amount per Wage-Type
WHEN OTHERS.
"do nothing as only previous Wate-Type should be considered
ENDCASE.
ENDDO.
ENDIF.

* Calculate share of Annual Salary Amount per Wage-Type
*******************************************************

PERFORM get_wagetype_share USING p_oldsal p_newsal c_wage_type_1
CHANGING gv_1000.
PERFORM get_wagetype_share USING p_oldsal p_newsal c_wage_type_2
CHANGING gv_2npy.

Convert Date to external format

FORM date_to_external CHANGING p_input TYPE sy-datum
p_output TYPE char10.

IF p_input+4(2) GE '13'.
p_input+0(4) = p_input+0(4) + 1."Increment Year
ENDIF.

CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = p_input
IMPORTING
date_external = p_output
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
p_output = p_input.
ENDIF.


ENDFORM. " DATE_TO_EXTERNAL

Date FM: to get difference between 2 dates in different formats

* Check difference between Input Date and current date

*Program should pay attention to only the month and the year
************************************************************
CALL FUNCTION 'HR_99S_INTERVAL_BETWEEN_DATES'
EXPORTING
begda = p_input_dt
endda = p_check_dt
* TAB_MODE = ' '
IMPORTING
* DAYS =
* C_WEEKS =
c_months = lv_months
c_years = lv_years
* WEEKS =
* MONTHS =
* YEARS =
* D_MONTHS =
* MONTH_TAB =
.