You are on page 1of 13

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

* This report is used to update the table T5P1P (Table of


* retention taxes).
* The report output is displayed using Application log.
*----------------------------------------------------------------------*
REPORT rputaxp0.

TABLES: t5p1p.

* File names for Check and Upload


DATA: gv_cod_file LIKE rlgrap-filename.
DATA: gv_irs_file_aux TYPE string,
gv_cod_file_aux TYPE string.

DATA: gt_file_data(100) OCCURS 5 WITH HEADER LINE.

FIELD-SYMBOLS: <test>.

DATA: gv_return TYPE sy-subrc,


gv_actual_len(2) TYPE n,
gv_curr_init TYPE c.

DATA: gv_nr_rec(6) TYPE n,


gv_nr_del(6) TYPE n,
gv_nr_cop(6) TYPE n.

DATA: gv_rule(18) VALUE '1A2B3C4D5E6F7G8H9I'.

* Definition of colums in import files


DATA: BEGIN OF gt_col_def OCCURS 5,
col(2) TYPE n,
beg(3) TYPE n,
end(3) TYPE n,
END OF gt_col_def.

* Definition of files (each corresponding to one tax table)


DATA: BEGIN OF gt_key_tab OCCURS 5,
tab(2) TYPE c,
nr_col(2) TYPE n,
END OF gt_key_tab.

* New entries (for current year)


DATA: BEGIN OF gt_i5p1p OCCURS 20.
INCLUDE STRUCTURE t5p1p.
DATA: END OF gt_i5p1p.

* Entries to be changed (from previous year - limit end date)


DATA: BEGIN OF gt_d5p1p OCCURS 20.
INCLUDE STRUCTURE t5p1p.
DATA: END OF gt_d5p1p.

* Entries TAB/COLUMN/WAERS/valid until 31.12.9999


DATA gt_sel LIKE t5p1p OCCURS 10 WITH HEADER LINE.

* Second input table for the transport generation


DATA gt_e071k LIKE e071k OCCURS 1 WITH HEADER LINE.

* Global constants-------------------------------------------
CONSTANTS: gc_true TYPE sap_bool VALUE 'X', "Flag
gc_use_grid TYPE c VALUE 'X', "use_grid parameter
gc_currency TYPE t500c-waers VALUE 'EUR'.

* Global Variables-------------------------------------------
DATA : gv_log_handle TYPE balloghndl, "Log Handle
gv_text(132) TYPE c, "Message text
gv_temp(16). "For concatenation

SELECTION-SCREEN BEGIN OF BLOCK filedata WITH FRAME TITLE text-t01.


PARAMETERS: cod_dir LIKE rlgrap-filename OBLIGATORY,
tdate TYPE begda OBLIGATORY,
area TYPE hrpaypt_geographical_area AS LISTBOX VISIBLE LENGTH 12
OBLIGATORY,
var_rem AS CHECKBOX DEFAULT space.
SELECTION-SCREEN END OF BLOCK filedata.

SELECTION-SCREEN BEGIN OF BLOCK settings WITH FRAME TITLE text-t02.

PARAMETERS: separat(1) TYPE c DEFAULT ';' OBLIGATORY.


PARAMETERS: test TYPE c AS CHECKBOX DEFAULT 'X'.

SELECTION-SCREEN END OF BLOCK settings.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR cod_dir.


PERFORM get_directory_path.

AT SELECTION-SCREEN ON BLOCK filedata.


IF var_rem IS INITIAL.
CONCATENATE cod_dir tdate '_cod.dat' INTO gv_cod_file.
CONCATENATE tdate '_cod.dat' INTO gv_cod_file_aux.
ELSE.
CONCATENATE cod_dir tdate '_var.dat' INTO gv_cod_file.
CONCATENATE tdate '_var.dat' INTO gv_cod_file_aux.
ENDIF.

PERFORM check_file USING gv_cod_file.

START-OF-SELECTION.

* Create an Application Log


PERFORM appl_log_create.

* Begin processing "table key" table (COD/VAR file)


PERFORM read_file USING gv_cod_file_aux.
SORT gt_file_data.

LOOP AT gt_file_data.

PERFORM build_col_def.

READ TABLE gt_col_def WITH KEY col = '1'.


gv_actual_len = gt_col_def-end - gt_col_def-beg - 1.
ASSIGN gt_file_data+gt_col_def-beg(gv_actual_len) TO <test>.
gt_key_tab-tab = <test>.
READ TABLE gt_col_def WITH KEY col = '2'.
gv_actual_len = gt_col_def-end - gt_col_def-beg - 1.
ASSIGN gt_file_data+gt_col_def-beg(gv_actual_len) TO <test>.
gt_key_tab-nr_col = <test>.
APPEND gt_key_tab.
ENDLOOP.

* End processing of "table key" table (COD/VAR file)

gv_curr_init = gc_currency(1).

* Begin processing of IRS/VAR tables (.CSV file)

REFRESH gt_i5p1p. CLEAR gt_i5p1p.


REFRESH gt_sel. CLEAR gt_sel.

SORT gt_key_tab.

LOOP AT gt_key_tab.
* Process file with IRS/VAR table
CONCATENATE tdate '_' gt_key_tab-tab '_'
gv_curr_init area '.csv' INTO gv_irs_file_aux.

PERFORM read_file USING gv_irs_file_aux.

PERFORM process_file_data.

ENDLOOP. "key_tab

SORT gt_sel.
DELETE ADJACENT DUPLICATES FROM gt_sel
COMPARING tab colum endda waers.

* Retrieve entries from previous year and delimit end date


* if not from "tyear"
IF gt_sel[] IS NOT INITIAL.
SELECT * FROM t5p1p INTO TABLE gt_d5p1p FOR ALL ENTRIES IN gt_sel
WHERE tab = gt_sel-tab AND
colum = gt_sel-colum AND
endda = gt_sel-endda AND
waers = gt_sel-waers.
ENDIF.

LOOP AT gt_d5p1p.
IF gt_d5p1p-begda NE tdate.
gt_d5p1p-endda = tdate - 1.
MODIFY gt_d5p1p.
IF test NE 'X'.
PERFORM store_transport_entry USING gt_d5p1p-tab gt_d5p1p-colum
gt_d5p1p-waers gt_d5p1p-endda.
ENDIF.
ELSE.
DELETE gt_d5p1p INDEX sy-tabix.
ENDIF.
ENDLOOP.

SORT gt_e071k.
DELETE ADJACENT DUPLICATES FROM gt_e071k
COMPARING tabkey.

LOOP AT gt_sel.
* Delete entries from previous year or
* "tyear" if already processed
DELETE FROM t5p1p WHERE tab = gt_sel-tab AND
colum = gt_sel-colum AND
endda = gt_sel-endda AND
waers = gt_sel-waers.
ADD sy-dbcnt TO gv_nr_del.
IF test NE 'X'.
PERFORM store_transport_entry USING gt_sel-tab gt_sel-colum
gt_sel-waers gt_sel-endda.
ENDIF.
ENDLOOP.

* Insert changed entries from previous year


INSERT t5p1p FROM TABLE gt_d5p1p.
gv_nr_cop = sy-dbcnt.
SUBTRACT sy-dbcnt FROM gv_nr_del.
IF test NE 'X'.
PERFORM add_to_transport USING gv_return.
ENDIF.

IF gv_return NE 0.
** WRITE: / 'No data updated: '(005).
CLEAR gv_temp.
MOVE text-005 TO gv_text.
* Add the messages in application log.
PERFORM add_msg_to_appl_log USING gv_text 'E'.
ELSE.
IF NOT gt_d5p1p[] IS INITIAL.
* Insert changed entries from previous year
** WRITE: / 'Number of lines NOT copied: '(003), gv_nr_del.
** WRITE: / 'Number of lines copied: '(004), gv_nr_cop.
IF gv_nr_del NE 0.
CLEAR gv_temp.
WRITE gv_nr_del TO gv_temp.
CONCATENATE TEXT-003 gv_temp INTO gv_text SEPARATED BY SPACE.
* Add the messages in application log.
PERFORM add_msg_to_appl_log USING gv_text 'E'.
ENDIF.

CLEAR gv_temp.
WRITE gv_nr_cop TO gv_temp.
CONCATENATE TEXT-004 gv_temp INTO gv_text SEPARATED BY SPACE.
* Add the messages in application log.
PERFORM add_msg_to_appl_log USING gv_text 'S'.
ELSE.
IF gv_nr_del NE 0.
** WRITE: / 'Number of lines deleted:'(006), gv_nr_del.
CLEAR gv_temp.
WRITE gv_nr_del TO gv_temp.
CONCATENATE TEXT-006 gv_temp INTO gv_text SEPARATED BY SPACE.

* Add the messages in application log.


PERFORM add_msg_to_appl_log USING gv_text 'S'.
ENDIF.
ENDIF.
* Process entries for current year
* Fill lower limit for each entry
SORT gt_i5p1p BY tab colum maxv.
PERFORM fill_min_value.
* Insert entries for current year
SORT gt_i5p1p.
DESCRIBE TABLE gt_i5p1p LINES gv_nr_rec.
INSERT t5p1p FROM TABLE gt_i5p1p.
SUBTRACT sy-dbcnt FROM gv_nr_rec.
** WRITE: / 'Number of new lines NOT inserted: '(001), gv_nr_rec.
** WRITE: / 'Number of new lines inserted: '(002), sy-dbcnt.
IF gv_nr_rec NE 0.
CLEAR gv_temp.
WRITE gv_nr_rec TO gv_temp.
CONCATENATE TEXT-001 gv_temp INTO gv_text SEPARATED BY SPACE.
* Add the messages in application log.
PERFORM add_msg_to_appl_log USING gv_text 'E'.
ENDIF.

CLEAR gv_temp.
WRITE sy-dbcnt TO gv_temp.
CONCATENATE TEXT-002 gv_temp INTO gv_text SEPARATED BY SPACE.
* Add the messages in application log.
PERFORM add_msg_to_appl_log USING gv_text 'S'.
ENDIF.

IF test = 'X'.
ROLLBACK WORK.
* WRITE: / 'No data updated: '(005).
clear gv_temp.
move text-005 to gv_text.
* Add the messages in application log.
PERFORM add_msg_to_appl_log USING gv_text 'E'.
ENDIF.

END-OF-SELECTION.

*Display Application Logs in full screen.


PERFORM appl_log_display_popup.

*&---------------------------------------------------------------------*
*& Form READ_FILE
*&---------------------------------------------------------------------*
* Upload file with definitions or values
*----------------------------------------------------------------------*
* --> P_FILE text *
* <-- global data text
*----------------------------------------------------------------------*
FORM read_file USING p_file.

CLEAR gt_file_data. REFRESH gt_file_data.


DATA lv_initial_directory TYPE string.
lv_initial_directory = cod_dir.

CALL FUNCTION 'HR_99S_UPLOAD'


EXPORTING
p_filename = p_file
p_filetype = 'ASC'
p_fsdialog = ' '
p_initial_directory = lv_initial_directory
TABLES
data_tab = gt_file_data
EXCEPTIONS
upload_error = 1
OTHERS = 2.

CASE sy-subrc.
WHEN '1' OR '2' OR '3'.
MESSAGE e053(3i) WITH p_file.
WHEN '4.'.
MESSAGE e054(3i).
ENDCASE.
ENDFORM. " READ_FILE

*&---------------------------------------------------------------------*
*& Form BUILD_COL_DEF
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_col_def.

DATA: lv_actual_pos(3) TYPE n,


lv_maxlen(3) TYPE n.

CLEAR lv_actual_pos.

REFRESH gt_col_def. CLEAR gt_col_def.

TRANSLATE gt_file_data USING '" '.


CONDENSE gt_file_data NO-GAPS.

lv_maxlen = strlen( gt_file_data ).


DO lv_maxlen TIMES.
lv_actual_pos = sy-index - 1.
ASSIGN gt_file_data+lv_actual_pos(1) TO <test>.
IF <test> EQ separat.
IF sy-index GT 1.
gt_col_def-end = sy-index.
APPEND gt_col_def.
ENDIF.
ADD 1 TO gt_col_def-col.
gt_col_def-beg = sy-index.
ELSE.
IF sy-index EQ 1.
gt_col_def-col = 1.
ENDIF.
ENDIF.
ENDDO.
gt_col_def-end = lv_maxlen + 1.
APPEND gt_col_def.

ENDFORM. " build_col_def

*&---------------------------------------------------------------------*
*& Form CHECK_FILE
*&---------------------------------------------------------------------*
* Check if definition file(.DAT) exists
*----------------------------------------------------------------------*
* --> P_FILE text *
*----------------------------------------------------------------------*
FORM check_file USING p_file.

DATA: lv_result.

CALL FUNCTION 'WS_QUERY'


EXPORTING
filename = p_file
query = 'FE'
winid = ' '
IMPORTING
return = lv_result
EXCEPTIONS
inv_query = 1.

IF sy-subrc EQ 0.
IF lv_result EQ 0.
MESSAGE e052(3i) WITH p_file.
ENDIF.
ENDIF.

ENDFORM. " CHECK_FILE

*&---------------------------------------------------------------------*
*& Form STORE_TRANSPORT_ENTRY
*&---------------------------------------------------------------------*
* Define transport entries
*----------------------------------------------------------------------*
* --> P_TAB text *
* --> P_COLUMN text *
* --> P_WAERS text *
* --> P_ENDDA text *
* <-- global data text
*----------------------------------------------------------------------*
FORM store_transport_entry USING p_tab p_column p_waers p_endda.

* Definition for automatic creation of entries in the transport


DATA: BEGIN OF ls_task_key,
tab TYPE t5p1p-tab,
colum TYPE t5p1p-colum,
waers TYPE t5p1p-waers,
endda TYPE t5p1p-endda,
END OF ls_task_key.

gt_e071k-pgmid = 'R3TR'.
gt_e071k-object = 'TABU'.
gt_e071k-objname = 'T5P1P'.
gt_e071k-mastertype = 'TABU'.
gt_e071k-mastername = 'T5P1P'.
ls_task_key-tab = p_tab.
ls_task_key-colum = p_column.
ls_task_key-waers = p_waers.
ls_task_key-endda = p_endda.
CONCATENATE ls_task_key '*' INTO gt_e071k-tabkey.

APPEND gt_e071k.

ENDFORM. " STORE_TRANSPORT_ENTRY


*&---------------------------------------------------------------------*
*& Form ADD_TO_TRANSPORT
*&---------------------------------------------------------------------*
* Add entries in transport
*----------------------------------------------------------------------*
* <-- P_RETURN text *
*----------------------------------------------------------------------*
FORM add_to_transport USING p_return.

* FIRST INPUT TABLE FOR THE TWO FUNCTION MODULES TO BE USED:


* (FM's: TR_OBJECTS_CHECK and TR_OBJECTS_INSERT)
DATA lt_ko200 LIKE ko200 OCCURS 1 WITH HEADER LINE.

DATA: ld_order LIKE e070-trkorr,


ld_task LIKE e070-trkorr,
ld_appendable LIKE trpari-s_checked.

CLEAR: sy-subrc.

REFRESH lt_ko200. CLEAR lt_ko200.

lt_ko200-pgmid = 'R3TR'.
lt_ko200-object = 'TABU'.
lt_ko200-obj_name = 'T5P1P'.
lt_ko200-objfunc = 'K'.
APPEND lt_ko200.

SORT gt_e071k.

CALL FUNCTION 'TR_OBJECTS_CHECK'


* EXPORTING
* IV_NO_STANDARD_EDITOR = ' '
* IV_NO_SHOW_OPTION = ' '
IMPORTING
we_order = ld_order
we_task = ld_task
we_objects_appendable = ld_appendable
TABLES
wt_ko200 = lt_ko200
wt_e071k = gt_e071k
* TT_TADIR =
EXCEPTIONS
cancel_edit_other_error = 1 "FTSAHRK063615
show_only_other_error = 2 "FTSAHRK063615
OTHERS = 3. "FTSAHRK063615

IF sy-subrc NE 0.
ROLLBACK WORK.
p_return = 1.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.

IF ld_appendable IS INITIAL.
ROLLBACK WORK.
p_return = 2.
MESSAGE i732(tk). " Transport system is not established
EXIT.
ENDIF.

CALL FUNCTION 'TR_OBJECTS_INSERT'


* EXPORTING
* WI_ORDER = ld_order
* IV_NO_STANDARD_EDITOR = ' '
* IV_NO_SHOW_OPTION = ' '
IMPORTING
we_order = ld_order
we_task = ld_task
TABLES
wt_ko200 = lt_ko200
wt_e071k = gt_e071k
* TT_TADIR =
EXCEPTIONS
cancel_edit_other_error = 1 "FTSAHRK063615
show_only_other_error = 2 "FTSAHRK063615
OTHERS = 3. "FTSAHRK063615

IF sy-subrc NE 0.
ROLLBACK WORK.
p_return = 3.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

ENDFORM. " ADD_TO_TRANSPORT


*&---------------------------------------------------------------------*
*& Form PROCESS_FILE_DATA
*&---------------------------------------------------------------------*
* Creates new table entries for date 31.12.9999
*----------------------------------------------------------------------*
* <-- global data text
*----------------------------------------------------------------------*
FORM process_file_data.

DATA: lv_max_amount LIKE t5p1p-maxv,


lv_col_nr(1) TYPE n.

DATA: lv_num_with_dec(10) TYPE p DECIMALS 2.

LOOP AT gt_file_data.
PERFORM build_col_def.
* Process lines of file with amount range
READ TABLE gt_col_def WITH KEY col = '1'.
gv_actual_len = gt_col_def-end - gt_col_def-beg - 1.
ASSIGN gt_file_data+gt_col_def-beg(gv_actual_len) TO <test>.

TRANSLATE <test> USING '. ,.'.


CONDENSE <test> NO-GAPS.
lv_num_with_dec = <test>.
MULTIPLY lv_num_with_dec BY 100.
lv_max_amount = lv_num_with_dec.

lv_col_nr = 1.
DO gt_key_tab-nr_col TIMES.
* Process column of file with tax rates
ADD 1 TO lv_col_nr.
READ TABLE gt_col_def WITH KEY col = lv_col_nr.
gv_actual_len = gt_col_def-end - gt_col_def-beg - 1.
ASSIGN gt_file_data+gt_col_def-beg(gv_actual_len) TO <test>.
TRANSLATE <test> USING '% ,.'.
gt_i5p1p-rate = <test>.
CONCATENATE area gt_key_tab-tab INTO gt_i5p1p-tab.
TRANSLATE gt_i5p1p-tab USING 'C '.
gt_i5p1p-colum = lv_col_nr - 1.
TRANSLATE gt_i5p1p-colum USING gv_rule."Numbers into letter
gt_i5p1p-maxv = lv_max_amount.
gt_i5p1p-begda = tdate.
gt_i5p1p-endda = '99991231'.
gt_i5p1p-waers = gc_currency.
APPEND gt_i5p1p.

gt_sel-tab = gt_i5p1p-tab.
gt_sel-colum = gt_i5p1p-colum.
gt_sel-endda = '99991231'.
gt_sel-waers = gc_currency.
APPEND gt_sel.

CLEAR gt_i5p1p.
CLEAR gt_sel.
ENDDO.
ENDLOOP.

ENDFORM. " PROCESS_FILE_DATA

*&---------------------------------------------------------------------*
*& Form fill_min_value
*&---------------------------------------------------------------------*
* Calculates Minimun Value for each NEW entry table
*----------------------------------------------------------------------*
* <-- global data text
*----------------------------------------------------------------------*
FORM fill_min_value.

* Data structures to fill lower limit of T5P1P


DATA: lv_oldval LIKE t5p1p-minv.

LOOP AT gt_i5p1p.

AT NEW colum.
lv_oldval = 0.
ENDAT.
AT NEW tab.
lv_oldval = 0.
ENDAT.

gt_i5p1p-minv = lv_oldval.
MODIFY gt_i5p1p INDEX sy-tabix.
lv_oldval = gt_i5p1p-maxv + 1.
ENDLOOP.

ENDFORM. " fill_min_value


*&---------------------------------------------------------------------*
*& Form appl_log_create
*&---------------------------------------------------------------------*
* Create an application log for the
* error messages.
*----------------------------------------------------------------------*
FORM appl_log_create .

DATA : ls_log TYPE bal_s_log.

* Create an internal log file


CALL FUNCTION 'BAL_LOG_CREATE'
EXPORTING
I_S_LOG = ls_log
IMPORTING
E_LOG_HANDLE = gv_log_handle
EXCEPTIONS
OTHERS = 1.

IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM. " appl_log_create


*&---------------------------------------------------------------------*
*& Form add_msg_to_appl_log
*&---------------------------------------------------------------------*
* Add the message in application log
*----------------------------------------------------------------------*
* -->IV_MSG_TEXT
* -->IV_MESSAGES_MSGTY
*----------------------------------------------------------------------*
FORM add_msg_to_appl_log USING VALUE(IV_MSG_TEXT)
TYPE ANY value(IV_MESSAGES_MSGTY) TYPE C.

CALL FUNCTION 'BAL_LOG_MSG_ADD_FREE_TEXT'


EXPORTING
I_LOG_HANDLE = gv_log_handle
I_MSGTY = iv_messages_msgty
I_TEXT = iv_msg_text
EXCEPTIONS
LOG_NOT_FOUND = 1
MSG_INCONSISTENT = 2
LOG_IS_FULL = 3
OTHERS = 4.

IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " add_msg_to_appl_log
*&---------------------------------------------------------------------*
*& Form appl_log_display_popup
*&---------------------------------------------------------------------*
* Display Application Logs as popup
*----------------------------------------------------------------------*
FORM appl_log_display_popup .

DATA : ls_display_profile TYPE bal_s_prof. "For display profile

CALL FUNCTION 'BAL_DSP_PROFILE_NO_TREE_GET'


IMPORTING
E_S_DISPLAY_PROFILE = ls_display_profile
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

* To show application logs in grid


MOVE gc_true TO ls_display_profile-use_grid.
ls_display_profile-START_COL = 5.
ls_display_profile-START_ROW = 5.
ls_display_profile-END_COL = 87.
ls_display_profile-END_ROW = 25.
ls_display_profile-pop_adjst = gc_true.

CALL FUNCTION 'BAL_DSP_LOG_DISPLAY'


EXPORTING
I_S_DISPLAY_PROFILE = ls_display_profile
EXCEPTIONS
PROFILE_INCONSISTENT = 1
INTERNAL_ERROR = 2
NO_DATA_AVAILABLE = 3
NO_AUTHORITY = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " appl_log_display_popup

FORM get_directory_path.
DATA lv_path_sel TYPE string.
DATA lv_separator_symbol TYPE c.

cl_gui_frontend_services=>directory_browse(
CHANGING
selected_folder = lv_path_sel
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4
).

IF sy-subrc = 0.
cl_gui_cfw=>flush( ).
IF lv_path_sel IS NOT INITIAL.

cl_gui_frontend_services=>get_file_separator(
CHANGING
file_separator = lv_separator_symbol
EXCEPTIONS
not_supported_by_gui = 1
error_no_gui = 2
cntl_error = 3
OTHERS = 4
).
IF sy-subrc = 0.
CONCATENATE lv_path_sel lv_separator_symbol INTO lv_path_sel.
cod_dir = lv_path_sel.
ENDIF.

ENDIF.
ENDIF.
ENDFORM.

You might also like