Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 18

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

*& Report ZBPS_HOJA_3


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

REPORT zbps_hoja_3.
* Type Pools
TYPE-POOLS ole2 .
*----------------------------------------------------------------------*
* CLASS lcl_data DEFINITION
*----------------------------------------------------------------------*
* Local Class Definition
*----------------------------------------------------------------------*
CLASS lcl_data DEFINITION FINAL.
PUBLIC SECTION.
*--------------------------------------------------------------------*
* Types
TYPES: BEGIN OF t_ska1,
ktopl TYPE ska1-ktopl,
saknr TYPE ska1-saknr,
xbilk TYPE ska1-xbilk,
END OF t_ska1.

TYPES : BEGIN OF t_skat,


spras TYPE skat-spras,
ktopl TYPE skat-ktopl,
saknr TYPE skat-saknr,
txt20 TYPE skat-txt20,
END OF t_skat.

TYPES: BEGIN OF t_output,


field1 TYPE char40,
field2 TYPE umxxo,
field3 TYPE umxxo,
field4 TYPE umxxo,
field5 TYPE umxxo,
field6 TYPE umxxo,
field7 TYPE umxxo,
field8 TYPE umxxo,
field9 TYPE umxxo,
END OF t_output.

TYPES:
BEGIN OF t_header,
field1 TYPE string,
field2 TYPE string,
field3 TYPE string,
field4 TYPE string,
field5 TYPE string,
field6 TYPE string,
field7 TYPE string,
field8 TYPE string,
field9 TYPE string,
END OF t_header.
*--------------------------------------------------------------------*
* Internal tables
DATA:
i_ska1 TYPE TABLE OF t_ska1,
i_skat TYPE TABLE OF t_skat,
i_output TYPE TABLE OF t_output,
i_header TYPE TABLE OF t_header,
i_header_1 TYPE TABLE OF t_header.
*--------------------------------------------------------------------*
* Work areas
DATA:
i_ska1_line TYPE t_ska1,
i_skat_line TYPE t_skat,
i_output_line TYPE t_output,
i_header_line TYPE t_header,
i_header_line3 TYPE t_header,
i_header_line4 TYPE t_header.
*--------------------------------------------------------------------*
* Data
DATA: g_ktopl TYPE ska1-ktopl,
g_saknr TYPE ska1-saknr,
g_bukrs TYPE skb1-bukrs,
g_gjahr TYPE skc1a-gjahr,
g_fullpath TYPE string,
g_name TYPE t7ru9a-regno.
DATA:
i_glt0 TYPE fagl_t_glt0,
i_glt0_line TYPE glt0.
*--------------------------------------------------------------------*
* Methods
METHODS:
validate_ktopl, " Validate Chart of Accounts
validate_sankr, " Validate G/L Account Number
validate_bukrs, " Validate Company Code
validate_gjahr, " Validate Fiscal Year
validate_month, " Validate Month
get_data, " Get Data
get_text, " Get short text
get_accounts, " Get Account Details
output_table, " Output table
download_data, " Download data
excl_format, " Format the Excl Sheet
header_data. " Header data

ENDCLASS. " Lcl_data DEFINITION


* Local class Referance Object
DATA : obj_data TYPE REF TO lcl_data.

**********************************************************************
* Initialization *
**********************************************************************
INITIALIZATION.
CREATE OBJECT obj_data.
**********************************************************************
* Selection-screen *
**********************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE text-001.
* Select options
SELECT-OPTIONS: s_ktopl FOR obj_data->g_ktopl,
s_saknr FOR obj_data->g_saknr MATCHCODE OBJECT sako,
s_bukrs FOR obj_data->g_bukrs OBLIGATORY,
s_gjahr FOR obj_data->g_gjahr OBLIGATORY NO INTERVALS.
PARAMETERS: p_monat TYPE bkpf-monat OBLIGATORY .

SELECTION-SCREEN END OF BLOCK b01.

**********************************************************************
* Selection-screen Events *
**********************************************************************

AT SELECTION-SCREEN ON s_ktopl.
* Validate Chart of Accounts
CALL METHOD obj_data->validate_ktopl.

AT SELECTION-SCREEN ON s_saknr.
* Validate G/L Account Number
CALL METHOD obj_data->validate_sankr.

AT SELECTION-SCREEN ON s_bukrs.
* Validate Company Code
CALL METHOD obj_data->validate_bukrs.

AT SELECTION-SCREEN ON s_gjahr.
* Validate year
CALL METHOD obj_data->validate_gjahr.

AT SELECTION-SCREEN ON p_monat.
* Validate month
CALL METHOD obj_data->validate_month.
**********************************************************************
* Start of Selection *
**********************************************************************
START-OF-SELECTION.
* Data retrieval
CALL METHOD obj_data->get_data.
**********************************************************************
* End of Selection *
**********************************************************************
END-OF-SELECTION.
* Initial check
IF obj_data->i_glt0 IS INITIAL.
MESSAGE 'No data found for the Selection'(007) TYPE 'S'
DISPLAY LIKE 'E'.
RETURN.
ENDIF. " IF obj_data->i_glt0 IS INITIAL.
* For Populating Output table
CALL METHOD obj_data->output_table.
* For Download the Excl Format
CALL METHOD obj_data->download_data.

*----------------------------------------------------------------------*
* CLASS lcl_data IMPLEMENTATION
*----------------------------------------------------------------------*
* Local class Implementation
*----------------------------------------------------------------------*
CLASS lcl_data IMPLEMENTATION.
**********************************************************************
* Validate Chart of Accounts
**********************************************************************
METHOD validate_ktopl.
IF s_ktopl IS NOT INITIAL.
* Validate the Chart of Accounts in G/L Account Master (Chart of Accounts)
SELECT ktopl
INTO g_ktopl
FROM t004
UP TO 1 ROWS
WHERE ktopl IN s_ktopl.
ENDSELECT. " FROM t004
IF sy-subrc NE 0.
MESSAGE e000(oo) WITH 'Please enter a valid Chart of Accounts'(002).
ENDIF. " IF sy-subrc NE 0.
ENDIF. " IF s_ktopl IS NOT INITIAL.

ENDMETHOD. " Validate_ktopl


**********************************************************************
* Validate G/L Account Number
**********************************************************************
METHOD validate_sankr.

IF s_saknr IS NOT INITIAL.


* Validate the G/L Account Number in G/L Account Master (Chart of Accounts)
SELECT saknr
INTO g_saknr
FROM ska1
UP TO 1 ROWS
WHERE ktopl IN s_ktopl
AND saknr IN s_saknr.
ENDSELECT. " FROM ska1
IF sy-subrc NE 0.
MESSAGE e000(oo) WITH 'Please enter a valid G/L Account Number'(003).
ENDIF. " IF sy-subrc NE 0.
ENDIF. " IF s_saknr IS NOT INITIAL.

ENDMETHOD. " Validate_sankr


**********************************************************************
* Validate Company Code
**********************************************************************
METHOD validate_bukrs.
* Validate the Company Code in Company Codes
SELECT bukrs
INTO g_bukrs
FROM t001
UP TO 1 ROWS
WHERE bukrs IN s_bukrs.
ENDSELECT. " FROM t001
IF sy-subrc NE 0.
MESSAGE e000(oo) WITH 'Please enter a valid Company Code'(004).
ENDIF. " IF sy-subrc NE 0
ENDMETHOD. " Validate_ktopl
**********************************************************************
* Validate year
**********************************************************************
METHOD validate_gjahr.

IF s_gjahr CS '0123456789'.
MESSAGE e000(oo) WITH 'Please enter a valid year'(005).
ENDIF. " IF s_gjahr CS '0123456789'
ENDMETHOD. " Validate_gjahr
**********************************************************************
* Validate month
**********************************************************************
METHOD validate_month.

CONSTANTS lc_12(2) TYPE n VALUE '12'.


IF p_monat GE 1 AND p_monat LE lc_12.
* Month name in genitive case
CALL FUNCTION 'HR_RU_MONTH_NAME_IN_GENITIVE'
EXPORTING
month = p_monat
IMPORTING
name = g_name.
ELSE.
MESSAGE e000(oo) WITH 'Please enter a valid month'(006).
ENDIF. " IF p_monat GE 1 AND p_monat LE
12.

ENDMETHOD. " Validate_month


**********************************************************************
* Get data
**********************************************************************
METHOD get_data.
* Get data from G/L Account Master (Chart of Accounts)
SELECT ktopl
saknr
xbilk
FROM ska1
INTO TABLE i_ska1
WHERE ktopl IN s_ktopl
AND saknr IN s_saknr.
* Get Short Text
CALL METHOD get_text.
* Get Account details
CALL METHOD get_accounts.

ENDMETHOD. " Get_data


**********************************************************************
* Get Description
**********************************************************************
METHOD get_text.
* get data from G/L Account Master Record (Chart of Accounts: Description)
SELECT spras
ktopl
saknr
txt20
FROM skat
INTO TABLE i_skat
WHERE spras = sy-langu
AND ktopl IN s_ktopl
AND saknr IN s_saknr.

ENDMETHOD. " Get_text


**********************************************************************
* Get acoounts
**********************************************************************
METHOD get_accounts.
* Ranges
DATA : r_bukrs TYPE fagl_range_t_bukrs,
r_sankr TYPE fagl_range_t_racct,
r_gjahr TYPE fagl_range_t_ryear,
r_ktopl TYPE fagl_range_t_rrcty.

DATA:
r_ktopl_line TYPE fagl_range_rrcty,
r_sankr_lne TYPE fagl_range_racct.
* Range tables
APPEND s_bukrs TO r_bukrs.
APPEND s_gjahr TO r_gjahr.

IF s_ktopl IS INITIAL.
r_ktopl_line-sign = 'I'.
r_ktopl_line-option = 'NB'.
APPEND r_ktopl_line TO r_ktopl.
ELSE.
APPEND s_ktopl TO r_ktopl.
ENDIF. " IF s_ktopl IS INITIAL.

IF s_saknr IS INITIAL.
r_sankr_lne-sign = 'I'.
r_sankr_lne-option = 'NB'.
APPEND r_sankr_lne TO r_sankr.
ELSE.
APPEND s_saknr TO r_sankr.
ENDIF. " IF s_ktopl IS INITIAL.

* Access to New GL Totals Table


CALL FUNCTION 'FAGL_GET_GLT0'
EXPORTING
i_range_rrcty = r_ktopl
i_range_bukrs = r_bukrs
i_range_ryear = r_gjahr
i_range_racct = r_sankr
IMPORTING
et_glt0 = i_glt0
EXCEPTIONS
invalid_selection = 1
OTHERS = 2.
IF sy-subrc NE 0.
CLEAR sy-subrc.
ENDIF. " IF sy-subrc NE 0
ENDMETHOD. " Get_acoounts
**********************************************************************
* Output
**********************************************************************
METHOD output_table.
* Local Types
TYPES: BEGIN OF lt_glt0,
bukrs TYPE glt0-bukrs,
ryear TYPE glt0-ryear,
racct TYPE glt0-racct,
rbusa TYPE glt0-rbusa,
rtcur TYPE glt0-rtcur,
field2 TYPE glt0-hsl01,
field3 TYPE glt0-hsl01,
END OF lt_glt0.
* Data
DATA:
li_glt0 TYPE TABLE OF lt_glt0,
li_sum TYPE t_output,
li_glt0_line TYPE lt_glt0.

DATA:
l_diff TYPE glt0-hsl01,
l_diff1 TYPE glt0-hsl01,
l_umxx TYPE glt0-hsl01.

LOOP AT i_glt0 INTO i_glt0_line.


li_glt0_line-bukrs = i_glt0_line-bukrs.
li_glt0_line-ryear = i_glt0_line-ryear.
li_glt0_line-racct = i_glt0_line-racct.
li_glt0_line-rbusa = i_glt0_line-rbusa.
li_glt0_line-rtcur = i_glt0_line-rtcur.
* Find the Currency Value for the month
DO p_monat TIMES
VARYING l_umxx FROM i_glt0_line-hsl01 NEXT i_glt0_line-hsl02.
IF sy-subrc NE 0.
RETURN.
ENDIF. " IF sy-subrc NE 0
ENDDO. " DO p_monat TIMES
* Check the Credit or Debit
IF i_glt0_line-drcrk EQ 'S'.
li_glt0_line-field2 = l_umxx.
ELSEIF i_glt0_line-drcrk EQ 'H'.
li_glt0_line-field3 = l_umxx.
ENDIF. " IF i_glt0_line-drcrk EQ 'S'
* Collect the internal table
COLLECT li_glt0_line INTO li_glt0.
ENDLOOP. " LOOP AT i_glt0 INTO i_glt0_line.
*--------------------------------------------------------------------*
* Output table populate
SORT i_skat
BY spras
saknr.
SORT i_ska1
BY saknr.
LOOP AT li_glt0 INTO li_glt0_line.
* Read the G/L Account Master Record table
CLEAR i_output_line.
READ TABLE i_skat
INTO i_skat_line
WITH KEY spras = sy-langu
saknr = li_glt0_line-racct
BINARY SEARCH.
IF sy-subrc EQ 0.
CONCATENATE i_skat_line-saknr i_skat_line-txt20
INTO i_output_line-field1
SEPARATED BY space.
ENDIF.
* For Credit or Debit
i_output_line-field2 = li_glt0_line-field2.
li_sum-field2 = li_sum-field2 + i_output_line-field2.
i_output_line-field3 = - li_glt0_line-field3.
li_sum-field3 = li_sum-field3 + i_output_line-field3.
l_diff = li_glt0_line-field2 + li_glt0_line-field3.
l_diff1 = sign( l_diff ).
* For Differance
IF l_diff1 EQ '1'.
i_output_line-field4 = l_diff.
li_sum-field4 = li_sum-field4 + i_output_line-field4.
ELSE.
i_output_line-field5 = - l_diff.
li_sum-field5 = li_sum-field5 + i_output_line-field5.
ENDIF. " IF l_diff1 EQ '1'.
* Read the G/L Account Master
READ TABLE i_ska1
INTO i_ska1_line
WITH KEY saknr = li_glt0_line-racct
BINARY SEARCH.
IF i_ska1_line-xbilk EQ 'X'.
* Inventario
IF l_diff1 EQ '1'.
i_output_line-field6 = l_diff.
li_sum-field6 = li_sum-field6 + i_output_line-field6.
ELSE.
i_output_line-field7 = - l_diff.
li_sum-field7 = li_sum-field7 + i_output_line-field7.
ENDIF. " IF l_diff1 EQ '1'.
ELSE.
* Profit/loss
IF l_diff1 EQ '1'.
i_output_line-field8 = l_diff.
li_sum-field8 = li_sum-field8 + i_output_line-field8.
ELSE.
i_output_line-field9 = - l_diff.
li_sum-field9 = li_sum-field9 + i_output_line-field9.
ENDIF. " IF l_diff1 EQ '1'.
ENDIF. " IF i_ska1_line-xbilk EQ 'X'.
APPEND i_output_line TO i_output.
ENDLOOP. " IF i_glt0_line-drcrk EQ 'S'
* sub totals
li_sum-field1 = 'Sub-Totales'(010).
APPEND li_sum TO i_output.
ENDMETHOD. " Output_table
**********************************************************************
* Download data
**********************************************************************
METHOD download_data.
* Local data for Save dialog
DATA: l_filename TYPE string,
l_path TYPE string,
l_result TYPE i.
CONSTANTS lc_name TYPE string VALUE 'Accounts'.
* Shows a File Save Dialog
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
default_extension = 'XLS'
default_file_name = lc_name
initial_directory = 'c:\'
CHANGING
filename = l_filename
path = l_path
fullpath = g_fullpath
user_action = l_result
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc NE 0.
CLEAR sy-subrc.
ENDIF. " IF sy-subrc NE 0
* Check user did not cancel request
IF l_result EQ '0'.
CALL METHOD obj_data->excl_format.
ENDIF. " IF l_result EQ '0
* Excl Sheet formation

ENDMETHOD. " Download_data


**********************************************************************
* Excl formation
**********************************************************************
METHOD excl_format.

* local data for EXCL Format


DATA: l_application TYPE ole2_object,
l_workbook TYPE ole2_object,
l_sheet TYPE ole2_object,
l_cells TYPE ole2_object,
l_cell1 TYPE ole2_object,
l_cell2 TYPE ole2_object,
l_range TYPE ole2_object,
l_font TYPE ole2_object,
l_column TYPE ole2_object,
l_border TYPE ole2_object.
DATA: l_colindx TYPE i,
l_rowindx TYPE i,
l_index TYPE i,
l_index_r TYPE i,
l_tabix TYPE i.

* Field symbol to hold values


FIELD-SYMBOLS: <fs> TYPE any.
* Constants
CONSTANTS:
lc_4108 TYPE i VALUE '-4108',
lc_12(2) TYPE c VALUE '12'.
* Header data
CALL METHOD header_data.

*--------------------------------------------------------------------*
* Excl Sheet

CREATE OBJECT l_application 'excel.application'(009).

SET PROPERTY OF l_application 'visible'(008) = 0.

CALL METHOD OF
l_application
'Workbooks' = l_workbook.
* Create new worksheet
SET PROPERTY OF l_application 'SheetsInNewWorkbook' = 1.
CALL METHOD OF
l_workbook
'Add'.

* Create first Excel Sheet


CALL METHOD OF
l_application
'Worksheets' = l_sheet
EXPORTING
#1 = 1.

CALL METHOD OF
l_sheet
'Activate'.

SET PROPERTY OF l_sheet 'Name'(012) = 'Sheet1'(013).

*--------------------------------------------------------------------*
* First header data
l_rowindx = 1. "start at row 1 for headings

LOOP AT i_header INTO i_header_line.


*Use sy-tabix for row index
l_rowindx = sy-tabix.
* Fill columns for current row
CLEAR l_colindx.
DO.
* Assign <fs> to table columns
ASSIGN COMPONENT sy-index OF STRUCTURE i_header_line TO <fs>.
IF sy-subrc NE 0.
EXIT.
ENDIF. " IF sy-subrc NE 0.
l_colindx = sy-index.
CALL METHOD OF
l_sheet
'Cells' = l_cells
EXPORTING
#1 = l_rowindx
#2 = l_colindx.

SET PROPERTY OF l_cells 'Value'(014) = <fs> .


* IF sy-index EQ 9.
** SET PROPERTY OF l_cells 'Style' = 'Date'.
** SET PROPERTY OF l_cells 'NumberFormat' = 'yyyy/dd/mm;@'.
* ENDIF.
ENDDO. " DO.
ENDLOOP. " LOOP AT i_header INTO
i_header_line.
*--------------------------------------------------------------------*
* For Title lines

CALL METHOD OF
l_application
'Worksheets' = l_sheet
EXPORTING
#1 = 2.
CLEAR: l_colindx,i_header_line.
CLEAR i_header_line.
LOOP AT i_header_1 INTO i_header_line.
l_rowindx = l_rowindx + 1.
CLEAR l_colindx.

DO.
* Assign <fs> to table columns
ASSIGN COMPONENT sy-index OF STRUCTURE i_header_line TO <fs>.
IF sy-subrc NE 0.
EXIT.
ENDIF. " IF sy-subrc NE 0.
l_colindx = sy-index.

CALL METHOD OF
l_application
'Cells' = l_cell1
EXPORTING
#1 = l_rowindx
#2 = l_colindx.
CALL METHOD OF
l_application
'Cells' = l_cell2
EXPORTING
#1 = l_rowindx
#2 = 9.
CALL METHOD OF
l_application
'Range' = l_cells
EXPORTING
#1 = l_cell1
#2 = l_cell2.

CALL METHOD OF
l_cells
'Select'.
*--Merging
CALL METHOD OF
l_cells
'Merge'.
*--Setting title data
CALL METHOD OF
l_application
'Cells' = l_cell1
EXPORTING
#1 = l_rowindx
#2 = 1.
SET PROPERTY OF l_cell1 'Value'(014) = <fs> .

SET PROPERTY OF l_cell1 'HorizontalAlignment' = lc_4108 .


ENDDO. " DO.
ENDLOOP. " LOOP AT i_header_1 INTO
i_header_line.

*--------------------------------------------------------------------*
* For empty row
* Fill columns for current row
CLEAR l_colindx.
l_rowindx = l_rowindx + 1.
CLEAR i_header_line.
DO.
* Assign <fs> to table columns
ASSIGN COMPONENT sy-index OF STRUCTURE i_header_line TO <fs>.
IF sy-subrc NE 0.
EXIT.
ENDIF. " IF sy-subrc NE 0.
l_colindx = sy-index.
CALL METHOD OF
l_sheet
'Cells' = l_cells
EXPORTING
#1 = l_rowindx
#2 = l_colindx.

SET PROPERTY OF l_cells 'Value'(014) = <fs> .


ENDDO. " DO.

l_index_r = l_rowindx + 1.
*--------------------------------------------------------------------*
* For Header line 3

CALL METHOD OF
l_application
'Worksheets' = l_sheet
EXPORTING
#1 = 3.

l_rowindx = l_rowindx + 1.
* Fill columns for current row
CLEAR l_colindx.
DO.
* Assign <fs> to table columns
ASSIGN COMPONENT sy-index OF STRUCTURE i_header_line3 TO <fs>.

IF sy-subrc NE 0.
EXIT.
ENDIF. " IF sy-subrc NE 0.
* l_colindx = sy-index.
IF sy-index EQ 1.
l_colindx = sy-index.
CALL METHOD OF
l_sheet
'Cells' = l_cells
EXPORTING
#1 = l_rowindx
#2 = l_colindx.
SET PROPERTY OF l_cells 'Value'(014) = <fs>.
ELSE.
l_colindx = l_colindx + 1.
l_index = l_colindx.
CALL METHOD OF
l_application
'Cells' = l_cell1
EXPORTING
#1 = l_rowindx
#2 = l_colindx.
l_colindx = l_colindx + 1.
CALL METHOD OF
l_application
'Cells' = l_cell2
EXPORTING
#1 = l_rowindx
#2 = l_colindx.
CALL METHOD OF
l_application
'Range' = l_cells
EXPORTING
#1 = l_cell1
#2 = l_cell2.

CALL METHOD OF
l_cells
'Select'.
*--Merging
CALL METHOD OF
l_cells
'Merge'.

*--Setting title data


CALL METHOD OF
l_application
'Cells' = l_cell1
EXPORTING
#1 = l_rowindx
#2 = l_index.
SET PROPERTY OF l_cell1 'Value'(014) = <fs> .

SET PROPERTY OF l_cell1 'HorizontalAlignment' = lc_4108.


* exit.
IF l_colindx GE 9.
EXIT.
ENDIF. " IF l_colindx GE 9.
ENDIF. " IF sy-index EQ 1.
ENDDO. " DO.
*--------------------------------------------------------------------*
* for Header 4
CALL METHOD OF
l_application
'Worksheets' = l_sheet
EXPORTING
#1 = 3.

l_rowindx = l_rowindx + 1.

CLEAR l_colindx.
DO.
* Assign <fs> to table columns
ASSIGN COMPONENT sy-index OF STRUCTURE i_header_line4 TO <fs>.
IF sy-subrc NE 0.
EXIT.
ENDIF. " IF sy-subrc NE 0.
l_colindx = sy-index.
CALL METHOD OF
l_sheet
'Cells' = l_cells
EXPORTING
#1 = l_rowindx
#2 = l_colindx.

SET PROPERTY OF l_cells 'Value'(014) = <fs> .


ENDDO. " DO.

*--------------------------------------------------------------------*
* Output data

CALL METHOD OF
l_application
'Worksheets' = l_sheet
EXPORTING
#1 = 3.

DESCRIBE TABLE i_output LINES l_tabix.


* Output Table
LOOP AT i_output INTO i_output_line.
l_rowindx = l_rowindx + 1.
CLEAR l_colindx.
DO.
* Assign <fs> to table columns
ASSIGN COMPONENT sy-index OF STRUCTURE i_output_line TO <fs> .
IF sy-subrc NE 0.
EXIT.
ENDIF. " IF sy-subrc NE 0.
l_colindx = sy-index.
CALL METHOD OF
l_sheet
'Cells' = l_cells
EXPORTING
#1 = l_rowindx
#2 = l_colindx.

SET PROPERTY OF l_cells 'Value'(014) = <fs> .

* SET PROPERTY OF l_cells 'Style' = 'currency'.


* SET PROPERTY OF l_cells 'Ss' = 'None'.

SET PROPERTY OF l_cells 'NumberFormat' = '###,###,###,##0.00'.


IF sy-tabix EQ l_tabix.
CALL METHOD OF
l_application
'Range' = l_range
EXPORTING
#1 = l_cells
#2 = l_cells.
GET PROPERTY OF l_range 'Font'(015) = l_font.
SET PROPERTY OF l_font 'Bold'(016) = 1.
ENDIF.
ENDDO. " DO.
ENDLOOP. " LOOP AT i_output INTO
i_output_line.

**********************************************************************
FREE l_range.

l_index_r = l_index_r + 1.
CALL METHOD OF l_application 'Cells' = l_cell1 "start cell
EXPORTING
#1 = 1 "down
#2 = 1. "across

CALL METHOD OF l_application 'Cells' = l_cell2 "end cell


EXPORTING
#1 = l_index_r "down
#2 = 9. "across

CALL METHOD OF
l_application
'Range' = l_range
EXPORTING
#1 = l_cell1
#2 = l_cell2.
*--------------------------------------------------------------------*
* Modify properties of cell range

* SET FONT DETAILS of range


GET PROPERTY OF l_range 'Font'(015) = l_font.
SET PROPERTY OF l_font 'Bold'(016) = 1.
SET PROPERTY OF l_font 'Size'(017) = lc_12.

*--------------------------------------------------------------------*
* Set Columns to auto fit to width of text
CALL METHOD OF
l_application
'Columns' = l_column.
CALL METHOD OF
l_column
'Autofit'.
FREE OBJECT l_column.

*--------------------------------------------------------------------*
* border Properties
l_index_r = l_index_r - 1.
FREE l_range.
CALL METHOD OF l_application 'Cells' = l_cell1 "start cell
EXPORTING
#1 = l_index_r
#2 = 1.

CALL METHOD OF l_application 'Cells' = l_cell2 "end cell


EXPORTING
#1 = l_rowindx
#2 = 9.

CALL METHOD OF
l_application
'Range' = l_range
EXPORTING
#1 = l_cell1
#2 = l_cell2.

CALL METHOD OF
l_range
'BORDERS' = l_border
EXPORTING
#1 = '1'. "left
SET PROPERTY OF l_border 'LineStyle' = '1'. "line style solid, dashed...
SET PROPERTY OF l_border 'WEIGHT' = 2. "max = 4
FREE OBJECT l_border.

CALL METHOD OF
l_range
'BORDERS' = l_border
EXPORTING
#1 = '2'. "right
SET PROPERTY OF l_border 'LineStyle' = '1'.
SET PROPERTY OF l_border 'WEIGHT' = 2. "max = 4
FREE OBJECT l_border.

CALL METHOD OF
l_range
'BORDERS' = l_border
EXPORTING
#1 = '3'. "top
SET PROPERTY OF l_border 'LineStyle' = '1'.
SET PROPERTY OF l_border 'WEIGHT' = 2. "max = 4
FREE OBJECT l_border.

CALL METHOD OF
l_range
'BORDERS' = l_border
EXPORTING
#1 = '4'. "bottom
SET PROPERTY OF l_border 'LineStyle' = '1'.
SET PROPERTY OF l_border 'WEIGHT' = 2. "max = 4
FREE OBJECT l_border.

*--------------------------------------------------------------------*
* Modify properties of cell range
* SET FONT DETAILS of range
GET PROPERTY OF l_range 'Font'(015) = l_font.
SET PROPERTY OF l_font 'Size'(017) = 10.

*--------------------------------------------------------------------*
* Set Columns to auto fit to width of text

* CALL METHOD OF
* l_application
* 'Columns' = l_column.
* set PROPERTY OF l_column 'ColumnWidth' = '30'.
*
** CALL METHOD OF
** l_column
** 'Autofit'.
** FREE OBJECT l_column.

*--------------------------------------------------------------------*
* Save excel speadsheet to particular filename

CALL METHOD OF
l_sheet
'SaveAs'
EXPORTING
#1 = g_fullpath "'c:\temp\exceldoc2.xls' "filename
#2 = 1.
IF sy-subrc EQ 0.
MESSAGE s000(oo) WITH'Successfully download the Excel Sheet'(011).
ENDIF.
* Free
FREE OBJECT l_sheet.
FREE OBJECT l_workbook.
FREE OBJECT l_application.
ENDMETHOD. " Excl_format
**********************************************************************
* header data
**********************************************************************
METHOD header_data.
DATA l_index TYPE c.
* Header 1
DO 6 TIMES.
l_index = sy-index.
CONCATENATE 'HEADER' l_index INTO i_header_line-field1 SEPARATED BY space.
IF sy-index EQ 6.
i_header_line-field8 = 'Fecha :'(033).
i_header_line-field9 = sy-datum .
ENDIF.
APPEND i_header_line TO i_header.
ENDDO. " DO 6 TIMES.
CLEAR i_header_line.
APPEND i_header_line TO i_header.

* Header 2
CLEAR i_header_line.
i_header_line-field9 = 'Balance Tributario'(032).
APPEND i_header_line TO i_header_1.

CLEAR i_header_line.
i_header_line-field9 = 'Acumulado mes/a�o'(031).
APPEND i_header_line TO i_header_1.

CLEAR i_header_line.
CONCATENATE g_name s_gjahr-low INTO i_header_line-field9
SEPARATED BY `-`.
APPEND i_header_line TO i_header_1.
* Header 3

i_header_line3-field1 = 'Cuenta Contable'(030).


i_header_line3-field2 = 'Valores Acumulados'(029).
i_header_line3-field3 = 'Saldos'(028).
i_header_line3-field4 = 'Inventario'(027).
i_header_line3-field5 = 'Resultados'(026).

* Header 4
i_header_line4-field1 = ' '.
i_header_line4-field2 = 'D�bitos'(025).
i_header_line4-field3 = 'Cr�ditos'(024).
i_header_line4-field4 = 'Deudor'(023).
i_header_line4-field5 = 'Acreedor'(022).
i_header_line4-field6 = 'Activo'(021).
i_header_line4-field7 = 'Pasivo'(020).
i_header_line4-field8 = 'P�rdida'(019).
i_header_line4-field9 = 'Ganancia'(018).

ENDMETHOD. " Header_data


ENDCLASS. " Lcl_data IMPLEMENTATION

You might also like