*--[
*--[ El patrón se crea en la SE38 -> Utilidades, una vez que se le da el nombre
*--[ Se mete directamente este código como línea única: *$&$MUSTER
*--[
*--[ Luego debe crearse una función con el nombre del patrón terminada en:
*--[ _EDITOR_EXIT
*--[
*--[ La función a crear debe ser de este TIPO
FUNCTION [NOMBRE_PATRON]_EDITOR_EXIT.
*"----------------------------------------------------------------------
*"*"Interfase local
*" TABLES
*" BUFFER TYPE RSWSOURCET
*" EXCEPTIONS
*" CANCELLED
*"----------------------------------------------------------------------
CONSTANTS: c_importing TYPE i VALUE 1,
c_exporting TYPE i VALUE 2,
c_changing TYPE i VALUE 3,
c_tables TYPE i VALUE 4,
c_raise TYPE i VALUE 5,
c_call TYPE i VALUE 0,
c_end TYPE i VALUE 99,
c_tabs TYPE c LENGTH 30 VALUE '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'.
TYPES: BEGIN OF ty_out,
ord TYPE i,
pos TYPE i,
line TYPE string,
END OF ty_out.
DATA: t_out TYPE STANDARD TABLE OF ty_out,
l_out TYPE ty_out.
data: field type DYNPREAD-FIELDNAME.
* CALL FUNCTION 'RS_HELP_HANDLING'
* EXPORTING
* DYNPFIELD = FIELD
* DYNPNAME = SY-DYNNR
* OBJECT = 'FB'
* PROGNAME = 'SAPLSFUNCTION_BUILDER'
* SUPPRESS_SELECTION_SCREEN = 'X'.
DATA:
fieldtab TYPE STANDARD TABLE OF dynpread WITH HEADER LINE.
fieldtab-fieldname = 'RS38L-NAME'.
APPEND fieldtab.
PERFORM call_f4
in program SAPLSEUH
TABLES fieldtab
USING 'FB'
''
'X'
''.
read table fieldtab into data(l_tab) index 1.
IF sy-subrc = 0 AND NOT l_tab-FIELDVALUE IS INITIAL.
DATA(l_func) = l_tab-FIELDVALUE.
SELECT * FROM fupararef INTO TABLE @DATA(t_func)
WHERE funcname = @l_func.
LOOP AT t_func INTO DATA(X_func).
AT FIRST.
l_out-ord = c_call.
l_out-pos = 99.
l_out-line = 'CALL FUNCTION ''' && l_func && ''''.
TRANSLATE l_out-line USING '~ '. APPEND l_out TO t_out.
ENDAT.
CLEAR l_out.
CASE x_func-paramtype.
WHEN 'I' OR 'E' OR 'C' OR 'T'.
CASE x_func-paramtype.
WHEN 'I'.
DATA(lc_orden) = c_importing.
DATA(lc_tit) = 'EXPORTING'.
DATA(lc_prevar) = 'LF_I_'.
DATA(lc_posvar) = ''.
WHEN 'E'.
lc_orden = c_exporting.
lc_tit = 'IMPORTING'.
lc_prevar = 'LF_E_'.
lc_posvar = ''.
WHEN 'C'.
lc_orden = c_changing.
lc_tit = 'CHANGING'.
lc_prevar = 'LF_C_'.
lc_posvar = ''.
WHEN 'T'.
lc_orden = c_tables.
lc_tit = 'TABLES'.
lc_prevar = 'LF_C_'.
lc_posvar = '~STANDARD~TABLE~ OF~'.
ENDCASE.
l_out-ord = lc_orden. l_out-pos = 0. l_out-line = '~~' && lc_tit.
TRANSLATE l_out-line USING '~ '. APPEND l_out TO t_out.
l_out-ord = lc_orden.
l_out-pos = X_func-pposition.
l_out-line = '[[~]] 22 julio 2021 a las 01h41' && X_func-parameter && '~=~' && lc_prevar && X_func-parameter.
IF NOT X_func-optional IS INITIAL.
l_out-line = l_out-line && ' "Opcional'.
ENDIF.
TRANSLATE l_out-line USING '~ '. APPEND l_out TO t_out.
l_out-ord = 0.
l_out-pos = 1.
IF x_func-structure IS INITIAL.
x_func-structure = 'C'.
ENDIF.
l_out-line = 'DATA:~' && lc_prevar && X_func-parameter && '~TYPE~' && lc_posvar && x_func-structure && '.'.
TRANSLATE l_out-line USING '~ '. APPEND l_out TO t_out.
WHEN 'X'.
lc_orden = c_raise.
lc_tit = 'EXCEPTIONS'.
lc_prevar = ''.
lc_posvar = ''.
l_out-ord = lc_orden. l_out-pos = 0. l_out-line = '~~' && lc_tit.
TRANSLATE l_out-line USING '~ '. APPEND l_out TO t_out.
l_out-ord = lc_orden.
l_out-pos = X_func-pposition.
l_out-line = '[[~]] 22 julio 2021 a las 01h41' && X_func-parameter && '~=~' && X_func-pposition.
TRANSLATE l_out-line USING '~ '. APPEND l_out TO t_out.
l_out-pos = 999.
l_out-line = '[[~]] 22 julio 2021 a las 01h41others~~=~99.'.
TRANSLATE l_out-line USING '~ '. APPEND l_out TO t_out.
ENDCASE.
AT LAST.
l_out-ord = c_end.
l_out-pos = 1. l_out-line = '.'. APPEND l_out TO t_out.
l_out-pos = l_out-pos + 1.
l_out-line = 'if sy-subrc eq 0.'. APPEND l_out TO t_out.
l_out-pos = l_out-pos + 1.
l_out-line = ' '. APPEND l_out TO t_out.
l_out-pos = l_out-pos + 1.
l_out-line = 'else.'. APPEND l_out TO t_out.
l_out-pos = l_out-pos + 1.
l_out-line = ' '. APPEND l_out TO t_out.
l_out-pos = l_out-pos + 1.
l_out-line = 'endif.'. APPEND l_out TO t_out.
SORT t_out BY ord ASCENDING pos ASCENDING.
DELETE ADJACENT DUPLICATES FROM t_out.
*--[ Tabulamos iguales.
CLEAR lc_orden.
LOOP AT t_out INTO l_out WHERE line CP '*=*'.
FIND '=' IN l_out-line.
IF sy-fdpos > lc_orden.
lc_orden = sy-fdpos.
ENDIF.
ENDLOOP.
LOOP AT t_out INTO l_out WHERE line CP '*=*'.
FIND '=' IN l_out-line.
IF sy-fdpos < lc_orden.
sy-fdpos = lc_orden - sy-fdpos.
sy-lisel = c_tabs.
sy-lisel+sy-fdpos(1) = '='. ADD 1 TO sy-fdpos.
sy-lisel = sy-lisel+0(sy-fdpos).
REPLACE '=' IN l_out-line WITH sy-lisel.
TRANSLATE l_out-line USING '~ '.
ENDIF.
MODIFY t_out INDEX sy-tabix FROM l_out.
ENDLOOP.
ENDAT.
ENDLOOP.
*--[ Mostramos salida
LOOP AT t_out INTO l_out.
append l_out-line to BUFFER.
* WRITE: / l_out-line.
ENDLOOP.
ENDIF.
ENDFUNCTION.