0% found this document useful (0 votes)
117 views82 pages

BADI

This document describes Business Add-Ins (BAdIs) in SAP, which allow customers to modify and extend standard SAP functionality. It discusses the definition and implementation views of BAdIs, and how to find BAdIs that may be useful through breakpoint methods or specific programs. It also describes different types of BAdIs such as filter-dependent and multiple-use BAdIs. An example ABAP program is provided to find extensions like BAdIs, user exits, and field exits in a specified transaction or program.

Uploaded by

v.sathyamanoj
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
117 views82 pages

BADI

This document describes Business Add-Ins (BAdIs) in SAP, which allow customers to modify and extend standard SAP functionality. It discusses the definition and implementation views of BAdIs, and how to find BAdIs that may be useful through breakpoint methods or specific programs. It also describes different types of BAdIs such as filter-dependent and multiple-use BAdIs. An example ABAP program is provided to find extensions like BAdIs, user exits, and field exits in a specified transaction or program.

Uploaded by

v.sathyamanoj
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 82

8Auls 8uslness Add lns

8Auls (8uslness Aud lns) are a new Lype of exLenslon lnLroduced ln SA 8/3 release 46c 1hey are
based ln A8A Cb[ecLs Lhey are classes wlLh dlfferenL meLhods whlch can be modlfled by cusLomers
1helr goal ls Lo leL cusLomers meeL Lhelr requlremenLs by addlng non sLandard code ln Lhe sLandard
sysLem
8aslcs
8Auls have Lwo vlews Lhe deflnlLlon vlew and Lhe lmplemenLaLlon vlew SL18 ls Lhe LransacLlon Lo
access 8Auls deflnlLlon vlew ln Lhls vlew Lhe baslc characLerlsLlcs of Lhe 8Aul are seL lnpuL and ouLpuL
parameLers Lype of 8Aul eLc ln Lhe lmplemenLaLlon vlew whlch ls accessed vla LransacLlon SL19 you
can see Lhe how Lhe deflnlLlon was lmplemenLed LhaL ls Lhe meLhods LhaL have been used Lhe code
lnserLed ln Lhem eLc ln LransacLlon SL19 you can see all Lhe lmplemenLaLlons of a speclflc 8Aul
deflnlLlon
8Auls deflnlLlons come wlLh Lhe sLandard SA SysLem lL ls noL common Lo creaLe deflnlLlons for Lhe
user ln Lhe deflnlLlon Lhe capaclLy of mulLlple lmplemenLaLlons ls seL slngle lf only one lmplemenLaLlon
can be creaLed (llke ln user LxlLs) or mulLlple ?ou can also seL Lhe fllLers for Lhe 8Aul Lhls ls used for
example Lo creaLe locallzaLlons lf you fllLer by counLry 1hls ls why Lhe SA SysLem lncludes many 8Aul
lmplemenLaLlons
lL ls also posslble Lo creaLe lndusLry speclflc exLenslons for speclflc buslness Lypes (oll lndusLry
pharmacy eLc) 1hls ls posslble because 8Auls have a mulLllayer archlLecLure (SA parLners cusLomer
soluLlons locallzaLlons lndusLry speclflc soluLlons eLc) ln conLrasL wlLh user LxlL whlch ls double layer
(SA and CusLomer soluLlons)
MeLhod for flndlng 8Auls
1o flnd a 8Aul LhaL may be useful for a speclflc goal you can use Lhe followlng meLhod
lnserL a 88LAkCln1 ln Lhe meLhod CL1_lnS1AnCL of class CL_Lxl1_PAnuLL8 (ln LransacLlon SL24)
1hen execuLe Lhe program or LransacLlon of your lnLeresL when execuLlon sLops ln Lhe 88LAkCln1
you can see 8Aul names ln Lhe exlL_name varlable 1hls meLhod wlll make execuLlon sLop a loL of Llmes
because Lhls meLhod ls execuLed very ofLen and noL all of Lhe 8Auls you wlll geL are useful
neverLheless lL ls a very useful meLhod
lf Lhls meLhod ls noL good enough for you you can download Lhls program LhaL wlll flnd all Lhe
exLenslons ln a program or LransacLlon
1ypes Cf 8Aul's
Filter dependent Badi

8uslness Addln deflnlLlon level (for example a counLry


lndusLry secLor) we can have fllLer dependenL opLlon lf an enhancemenL for
counLry speclflc verslons Lhen lL ls llkely LhaL dlfferenL parLners can lmplemenL
Lhls enhancemenL 1he lndlvldual counLrles can creaLe and acLlvaLe Lhelr own lmplemenLaLlon
ln Lhe enhancemenL deflnlLlon all Lhe meLhods creaLed ln Lhe enhancemenL's lnLerface
need Lo have fllLer value as Lhelr lmporLlng parameLer 1he appllcaLlon program provldes
Lhe fllLer values for Lhe lmplemenLaLlon meLhod
lllLer dependenL 8Adl ls called uslng one fllLer value only
lL ls posslble Lo check acLlve lmplemenLaLlon for Lhe fllLer
value uslng Lhe funcLlon module SxC_Lxl1_CPLCk_AC1lvL

MulLlple use 8adl


1here are mulLlple use and slngle use 8uslness Addlns 1hls opLlon can be choose aL 8uslness Addln
deflnlLlon
1he dlsLlncLlon ls base on Lhe procedure or evenL characLer of an enhancemenL ln Lhe flrsL case Lhe
program walLs for Lhe enhancemenL Lo reLurn a reLurn code 1yplcal example ls beneflL calculaLlon ln P8
dependlng on Lhe lmplemenLaLlon alLernaLlve calculaLlons can be execuLed ln case of mulLlple use add
lns an evenL LhaL may be lnLeresL Lo oLher componenLs ln program flow Any number of componenLs
could use Lhls evenL as a hook Lo hang Lhelr own addlLlonal acLlons on Lo

1here ls no sequence conLrol for mulLlpleuse lmplemenLaLlons of 8Adl's Sequence
conLrol ls Lechnlcally lmposslble aL Lhe Llme of Lhe deflnlLlon Lhe lnLerface
does noL know whlch lmplemenLaLlons parameLers wlll be change Lhe lmplemenLaLlons
1he concepL of mulLlple use of Lhe 8uslness Addln ls LhaL has been lmplemenLed once
already can be lmplemenLed agaln by rlghL of Lhe sofLware chaln

rogram
======================================================================
PRJGRAM....: Z_EXTENSIJNS_ALV
----------------------------------------------------------------------
AUTHJR.....: Luciano Rebuffi.
----------------------------------------------------------------------
JBJETIVJ...: FIND USER-ECITS, BADI'S, FIELD-EXITS, BTE'S AND
SUBSTITUTIJNS IN A SPECIFIED TRANSACTIJN JR PRJGRAM.
THEY ARE SHJWN IN AN ALV AND A LINK IS CREATED TJ THE
PRJGRAM WHERE THE EXTENSIJN IS FJUND.
----------------------------------------------------------------------
PARAMETERS.: P_PRJG = NAME JF THE PRJGRAM TJ BE CHECKED
P_TCJDE = TRANSACTIJN TJ BE CHECKED
JBS.: JNE JF THESE PARAMETERS MUST BE SPECIFIED
......................................................................

P_UE = CJNSIDER USER EXITS.
P_BADI = CJNSIDER BADI'S.
P_BTE = CJNSIDER BTE.
P_SUST = CJNSIDER SUBSTITUTIJNS.
P_FDEX = CJNSIDER FIELD-EXITS.
JBS.: JNE JF THESE PARAMETERS MUST BE SPECIFIED
......................................................................

P_INCL = CJNSIDER INCLUDES.
P_FUNC = CJNSIDER FUNCIJNES.
P_SUBMIT= CJNSIDER SUBMIT TJ PRJGAMS.
......................................................................

P_NIVEL = DEPTH JF THE TREE.

JBS.: P_NIVEL SHJULD BE SMALL
----------------------------------------------------------------------

======================================================================

REPJRT z_ampliaciones_block_alv LINE-SIZE 255
NJ STANDARD PAGE HEADING.

TYPE-PJJLS:
icon,
rsfs,
rsds,
slis. "Tipos de datos para listas genricas.

TABLES:
d010inc, "Tabla de utilizacin para Includes ABAP
dd03l, "Campos de tabla
modact, "Modificaciones de la CMJD
modsap, "Ampliaciones SAP
sxs_inter, "Exit: Pg.definicin: Interfaces
sscrfields, "Campos en las imgenes de seleccin
tddir, "Exits de campo activos para elementos de datos
tddirs, "Exits de campos en determinados dynpros
tftit, "Texto breve de un mdulo de funciones
trdirt, "Textos ttulo p.programas en TRDIR
tstc, "Cdigos de transaccin SAP
tstct. "Textos de cdigos de transaccin

----------------------------------------------------------------------
CJNSTANTS
----------------------------------------------------------------------
CJNSTANTS:
c_sust(22) TYPE c VALUE 'SUBSTITUTIJN',
c_user_exit(22) TYPE c VALUE 'USEREXIT',
c_badi(22) TYPE c VALUE 'BADI',
c_handler(30) TYPE c VALUE 'CL_EXITHANDLER=GET_INSTANCE',
c_method(22) TYPE c VALUE 'CALL METHJD',
c_type_ref(22) TYPE c VALUE 'TYPE REF TJ',
c_perform(22) TYPE c VALUE 'PERFJRM',
c_form(22) TYPE c VALUE 'FJRM',
c_endform(22) TYPE c VALUE 'ENDFJRM',
c_bte(22) TYPE c VALUE 'JPEN_FI_PERFJRM',
c_bte1(22) TYPE c VALUE 'JUTBJUND_CALL',
c_enhance(22) TYPE c VALUE 'CALL CUSTJMER-FUNCTIJN',
c_funcao_1(13) TYPE c VALUE 'CALLFUNCTIJN''',
c_funcao_2(13) TYPE c VALUE 'CALL FUNCTIJN',
c_enh(11) TYPE c VALUE 'ENHANCEMENT',
c_enh1(17) TYPE c VALUE 'ENHANCEMENT-PJINT',
c_enh2(19) TYPE c VALUE 'ENHANCEMENT-SECTIJN',
c_endenh(14) TYPE c VALUE 'ENDENHANCEMENT',
c_endenh1(23) TYPE c VALUE 'END-ENHANCEMENT-SECTIJN',
c_include(07) TYPE c VALUE 'INCLUDE',
c_submit(06) TYPE c VALUE 'SUBMIT',
c_struct(11) TYPE c VALUE ' STRUCTURE ',
c_comentario TYPE c VALUE '',
c_ponto TYPE c VALUE '.',
c_aspa TYPE c VALUE '''',
c_igual(3) TYPE c VALUE ' = ',
c_x TYPE c VALUE 'X'.

CJNSTANTS:
c_ue(4) TYPE c VALUE 'EXIT',
c_b(4) TYPE c VALUE 'BADI',
c_bt(4) TYPE c VALUE 'BTE',
c_st(4) TYPE c VALUE 'SUST',
c_fdex(4) TYPE c VALUE 'FDEX',
c_enht(4) TYPE c VALUE 'ENH',
c_operation(4) TYPE c VALUE 'SHJW',
c_type(4) TYPE c VALUE 'PRJG',
Textos
c_text_01 TYPE slis_fieldcat_alv-reptext_ddic VALUE 'Programa',
c_text_02 TYPE slis_fieldcat_alv-reptext_ddic VALUE 'Nivel',
c_text_03 TYPE slis_fieldcat_alv-reptext_ddic VALUE 'Linea',
c_text_04 TYPE slis_fieldcat_alv-reptext_ddic VALUE 'Cdigo fuente',
c_text_05 TYPE slis_fieldcat_alv-reptext_ddic VALUE 'Tipo',
c_text_06 TYPE string VALUE 'Breakpoint',
c_text_07 TYPE slis_fieldcat_alv-reptext_ddic VALUE 'STJP',
c_text_08 TYPE string VALUE 'Marcar todo',
c_text_09 TYPE string VALUE 'Desmarcar todo',
c_text_e01 TYPE slis_fieldcat_alv-reptext_ddic VALUE
'Debe ingresar programa o transaccin',
c_text_e02 TYPE slis_fieldcat_alv-reptext_ddic VALUE
'Debe ingresar solo programa o transaccin',
c_text_e03 TYPE slis_fieldcat_alv-reptext_ddic VALUE
'Debe seleccionar un tipo de mejora'.

CJNSTANTS:
c_std_definition(3) TYPE c VALUE 'SAP',
c_std_implmnt(3) TYPE c VALUE 'KUN'.

----------------------------------------------------------------------
TABLAS INTERNAS
----------------------------------------------------------------------
TYPES: BEGIN JF x_tadir,
obj_name TYPE sobj_name,
devclass TYPE devclass,
END JF x_tadir.

TYPES: BEGIN JF x_slog,
obj_name TYPE sobj_name,
END JF x_slog.

DATA: BEGIN JF ti_programa JCCURS 0,
cf like rssource-line,
cf(500),
END JF ti_programa.

DATA: BEGIN JF ti_includes JCCURS 0,
nome LIKE sy-repid,
nivel(2) TYPE n,
END JF ti_includes.

DATA: BEGIN JF ti_user_exit JCCURS 0,
programa LIKE sy-repid,
tipo(4),
linea(10) TYPE n,
cf LIKE rssource-line,
cf(500),
nivel(2) TYPE n,
break LIKE icon-id,
sel(1),
END JF ti_user_exit.

DATA: BEGIN JF ti_badi JCCURS 0,
programa LIKE sy-repid,
tipo(4),
linea(10) TYPE n,
cf LIKE rssource-line,
cf(500),
nivel(2) TYPE n,
break LIKE icon-id,
sel(1),
END JF ti_badi.

DATA: BEGIN JF ti_bte JCCURS 0,
programa LIKE sy-repid,
tipo(4),
linea(10) TYPE n,
cf LIKE rssource-line,
cf(500),
nivel(2) TYPE n,
break LIKE icon-id,
sel(1),
END JF ti_bte.

DATA: BEGIN JF ti_enh JCCURS 0,
programa LIKE sy-repid,
tipo(4),
linea(10) TYPE n,
cf LIKE rssource-line,
cf(500),
nivel(2) TYPE n,
break LIKE icon-id,
sel(1),
END JF ti_enh.

DATA: BEGIN JF ti_enhobj JCCURS 0,
enhname LIKE enhobj-enhname,
version LIKE enhobj-version,
obj_type LIKE enhobj-obj_type,
obj_name LIKE enhobj-obj_name,
sel(1),
END JF ti_enhobj.

DATA: BEGIN JF ti_fdex JCCURS 0,
tipo(4),
cf LIKE rssource-line,
cf(500),
sel(1),
END JF ti_fdex.

DATA:
ti_tadir TYPE STANDARD TABLE JF x_tadir WITH HEADER LINE,
ti_jtab TYPE STANDARD TABLE JF x_slog WITH HEADER LINE.

DATA: BEGIN JF ti_final JCCURS 0,
name LIKE modsap-name,
member LIKE modsap-member,
include LIKE rs38l-include, "(15), "Include name
stext LIKE tftit-stext,
programa LIKE rs38l-include,
sel(1),
END JF ti_final.

DATA: BEGIN JF ti_sust JCCURS 0,
substid LIKE gb922-substid,
subseqnr LIKE gb922-subseqnr,
conseqnr LIKE gb922-conseqnr,
substab LIKE gb922-substab,
subsfield LIKE gb922-subsfield,
subsval LIKE gb922-subsval,
exitsubst LIKE gb922-exitsubst,
sel(1),
END JF ti_sust.

DATA: BEGIN JF ti_val JCCURS 0,
valid LIKE gb931-valid,
valseqnr LIKE gb931-valseqnr,
condid LIKE gb931-condid,
checkid LIKE gb931-checkid,
sel(1),
END JF ti_val.

DATA : BEGIN JF ti_bdcdata JCCURS 0.
INCLUDE STRUCTURE bdcdata.
DATA : END JF ti_bdcdata.

DATA: ti_gb31t TYPE TABLE JF gb31t WITH HEADER LINE.

DATA: BEGIN JF ti_cimp JCCURS 0,
enhname LIKE enhobj-enhname,
obj_type LIKE enhobj-obj_type,
obj_name LIKE enhobj-obj_name,
elemusage LIKE enhobj-elemusage,
enhinclude(40), "like ENHINCINX-ENHINCLUDE,
END JF ti_cimp.

----------------------------------------------------------------------
VARIABLE GLJBALES
----------------------------------------------------------------------
DATA:
functxt TYPE smp_dyntxt,
w_tini LIKE sy-timlo,
vg_caracter TYPE c,
vg_palavra(50) TYPE c,
vg_inicial LIKE sy-index,
vg_conta_aspa TYPE n,
vg_pname LIKE tfdir-pname,
vg_texto(50) TYPE c,
vg_contador LIKE sy-tfill,
vg_nivel(2) TYPE n,
vg_ini_contagem TYPE c, " INDICA QUE DEBE SER INICIADJ EL CJNTADJR
vg_conta_espaco TYPE n. " TJTAL DE ESPACIJS ( MXIMJ 2 )

----------------------------------------------------------------------
DEFINICIJN DE Estructuras y tablas para ALV (FM).
----------------------------------------------------------------------
DATA:
wa_cat TYPE slis_fieldcat_alv, " WA catlogo
ti_cat TYPE slis_t_fieldcat_alv, " TI catlogo
wa_layout TYPE slis_layout_alv, " WA opciones lista
ti_header TYPE slis_t_listheader, " TI cabecera lista
wa_header TYPE slis_listheader, " WA cabecera lista
wa_events TYPE slis_alv_event, " WA eventos lista
ti_events TYPE slis_t_event, " TI eventos lista
wa_sort TYPE slis_sortinfo_alv, " WA sort
ti_sort TYPE slis_t_sortinfo_alv, " TI sort
wa_print TYPE slis_print_alv. " WA print

----------------------------------------------------------------------
PARAMETRJS
----------------------------------------------------------------------

- DATJS JBLIGATJRIJS.
SELECTIJN-SCREEN BEGIN JF BLJCK bl01 WITH FRAME TITLE tit1 .

SELECTIJN-SCREEN: BEGIN JF LINE,
CJMMENT 1(15) text2,
PJSITIJN 20.
PARAMETERS: p_tcode LIKE tstc-tcode. "Transaccin
SELECTIJN-SCREEN: END JF LINE.

SELECTIJN-SCREEN: BEGIN JF LINE,
CJMMENT 1(15) text1,
PJSITIJN 20.
PARAMETERS: p_prog LIKE sy-repid. "Programa
SELECTIJN-SCREEN: END JF LINE.

SELECTIJN-SCREEN END JF BLJCK bl01.

SELECTIJN-SCREEN BEGIN JF BLJCK bl02 WITH FRAME TITLE tit2 .
SELECTIJN-SCREEN: BEGIN JF LINE,
CJMMENT 1(15) text7,
PJSITIJN 20.
PARAMETERS: p_ue AS CHECKBJX. "User-exit

Boton de Exit's en la DYNPRJ.
SELECTIJN-SCREEN: PUSHBUTTJN 25(45) btn USER-CJMMAND ext
VISIBLE LENGTH 12.

Boton de Proyectos de Exit's en la DYNPRJ.
SELECTIJN-SCREEN: PUSHBUTTJN 38(45) ext1 USER-CJMMAND ext1
VISIBLE LENGTH 12.

Boton de User-Exit's en la DYNPRJ.
SELECTIJN-SCREEN: PUSHBUTTJN 51(45) ext2 USER-CJMMAND ext2
VISIBLE LENGTH 12.

SELECTIJN-SCREEN: END JF LINE.

SELECTIJN-SCREEN: BEGIN JF LINE,
CJMMENT 1(15) text8,
PJSITIJN 20.
PARAMETERS: p_badi AS CHECKBJX. "Badi's
Boton de Interface en la DYNPRJ.
SELECTIJN-SCREEN: PUSHBUTTJN 25(60) badi USER-CJMMAND badi
VISIBLE LENGTH 25.
SELECTIJN-SCREEN: END JF LINE.

SELECTIJN-SCREEN: BEGIN JF LINE,
PJSITIJN 25.
PARAMETERS: p_handl AS CHECKBJX DEFAULT 'X'.
"CL_EXITHANDLER=GET_INSTANCE
SELECTIJN-SCREEN: CJMMENT 30(40) text12.
SELECTIJN-SCREEN: END JF LINE.

SELECTIJN-SCREEN: BEGIN JF LINE,
CJMMENT 1(15) text9,
PJSITIJN 20.
PARAMETERS: p_bte AS CHECKBJX. "Bte
Boton de Tx. FIBF en la DYNPRJ.
SELECTIJN-SCREEN: PUSHBUTTJN 25(60) bte1 USER-CJMMAND bte1
VISIBLE LENGTH 1.
Boton de Tx. Evento en la DYNPRJ.
SELECTIJN-SCREEN: PUSHBUTTJN 29(60) bte2 USER-CJMMAND bte2
VISIBLE LENGTH 10.
Boton de Tx. Proceso en la DYNPRJ.
SELECTIJN-SCREEN: PUSHBUTTJN 40(60) bte3 USER-CJMMAND bte3
VISIBLE LENGTH 10.


SELECTIJN-SCREEN: END JF LINE.

SELECTIJN-SCREEN: BEGIN JF LINE,
CJMMENT 1(19) text14,
PJSITIJN 20.
PARAMETERS: p_enh AS CHECKBJX. "Punto de ampliacin

Boton de Tx. SENH en la DYNPRJ.
SELECTIJN-SCREEN: PUSHBUTTJN 25(60) senh USER-CJMMAND senh
VISIBLE LENGTH 1.

Boton de Customer Implementation en la DYNPRJ.
SELECTIJN-SCREEN: PUSHBUTTJN 29(60) cimp USER-CJMMAND cimp
VISIBLE LENGTH 24.

SELECTIJN-SCREEN: END JF LINE.

SELECTIJN-SCREEN: BEGIN JF LINE,
CJMMENT 1(15) text10,
PJSITIJN 20.
PARAMETERS: p_sust AS CHECKBJX. "Sustitucin

Boton de Sustitucin en la DYNPRJ.
SELECTIJN-SCREEN: PUSHBUTTJN 25(45) btn1 USER-CJMMAND obb
VISIBLE LENGTH 12.

Boton de programa sustitucin en la DYNPRJ.
SELECTIJN-SCREEN: PUSHBUTTJN 38(45) sust USER-CJMMAND sust
VISIBLE LENGTH 15.

SELECTIJN-SCREEN: END JF LINE.

SELECTIJN-SCREEN: BEGIN JF LINE,
CJMMENT 1(15) text13,
PJSITIJN 20.
PARAMETERS: p_val AS CHECKBJX. "Validacin

Boton de Validacin en la DYNPRJ.
SELECTIJN-SCREEN: PUSHBUTTJN 25(45) ob28 USER-CJMMAND ob28
VISIBLE LENGTH 12.

Boton de programa sustitucin en la DYNPRJ.
SELECTIJN-SCREEN: PUSHBUTTJN 38(45) val USER-CJMMAND val
VISIBLE LENGTH 15.

SELECTIJN-SCREEN: END JF LINE.

SELECTIJN-SCREEN: BEGIN JF LINE,
CJMMENT 1(15) text11,
PJSITIJN 20.
PARAMETERS: p_fdex AS CHECKBJX. "Field-exit

Boton de Field-exit en la DYNPRJ.
SELECTIJN-SCREEN: PUSHBUTTJN 25(60) btn2 USER-CJMMAND fdex
VISIBLE LENGTH 28.

SELECTIJN-SCREEN: END JF LINE.

SELECTIJN-SCREEN END JF BLJCK bl02.

- DATJS JPCIJNALES.
SELECTIJN-SCREEN BEGIN JF BLJCK bl03 WITH FRAME TITLE tit3.

SELECTIJN-SCREEN: BEGIN JF LINE.
Boton de ALL en la DYNPRJ.
SELECTIJN-SCREEN: PUSHBUTTJN 18(60) all USER-CJMMAND all
VISIBLE LENGTH 1.
Boton de DAL en la DYNPRJ.
SELECTIJN-SCREEN: PUSHBUTTJN 21(60) dal USER-CJMMAND dal
VISIBLE LENGTH 1.
SELECTIJN-SCREEN: END JF LINE.

SELECTIJN-SCREEN: ULINE.

SELECTIJN-SCREEN: BEGIN JF LINE,
CJMMENT 1(15) text3,
PJSITIJN 20.
PARAMETERS: p_incl AS CHECKBJX DEFAULT 'X'. "Includes
SELECTIJN-SCREEN: END JF LINE.

SELECTIJN-SCREEN: BEGIN JF LINE,
CJMMENT 1(15) text4,
PJSITIJN 20.
PARAMETERS: p_func AS CHECKBJX DEFAULT 'X'. "Funciones
SELECTIJN-SCREEN: END JF LINE.

SELECTIJN-SCREEN: BEGIN JF LINE,
CJMMENT 1(15) text5,
PJSITIJN 20.
PARAMETERS: p_submit AS CHECKBJX DEFAULT 'X'. "Submit
SELECTIJN-SCREEN: END JF LINE.

SELECTIJN-SCREEN: BEGIN JF LINE,
CJMMENT 1(15) text6,
PJSITIJN 20.
PARAMETERS: p_nivel(2) TYPE n DEFAULT '04'. "Nivel
SELECTIJN-SCREEN: END JF LINE.

SELECTIJN-SCREEN END JF BLJCK bl03.

Botn de Marcar todo en el STATUS GUI.
SELECTIJN-SCREEN: FUNCTIJN KEY 1.
Botn de Desmarcar todo en el STATUS GUI.
SELECTIJN-SCREEN: FUNCTIJN KEY 2.
Botn de Breakpoint en el STATUS GUI.
SELECTIJN-SCREEN: FUNCTIJN KEY 3.

-----------------------------------------------------------------------
DEFINICIJN DE MACRJS
-----------------------------------------------------------------------
DEFINE icon_create.
Creo para el botn indicado, el icono y los textos correspondientes.

call function 'ICJN_CREATE'
exporting
name = &2
text = &3
info = &4
importing
result = &1
exceptions
others = 0.

END-JF-DEFINITIJN. "icon_create

-----------------------------------------------------------------------
INICIALIZACIJN DE VARIABLES
-----------------------------------------------------------------------
INITIALIZATIJN.

PERFJRM def_text_parameter.

PERFJRM def_botones.

CLEAR ti_gb31t.
REFRESH ti_gb31t.

Jbtengo Validacin/Sustitucin/Eventos/Texto.
SELECT
INTJ TABLE ti_gb31t
FRJM gb31t
WHERE spras EQ sy-langu.

-----------------------------------------------------------------------
AT SELECTIJN-SCREEN
-----------------------------------------------------------------------

AT SELECTIJN-SCREEN.

CASE sscrfields-ucomm.
WHEN 'FC01'.
MJVE 'X' TJ : p_ue, p_badi, p_bte, p_sust, p_val, p_fdex, p_enh.
WHEN 'FC02'.
CLEAR: p_ue, p_badi, p_bte, p_sust, p_val, p_fdex, p_enh.
WHEN 'FC03'.
PERFJRM breakpoint.
WHEN 'EXT'.
PERFJRM visualizar_ampliacion.
WHEN 'EXT1'.
PERFJRM visualizar_proyecto.
WHEN 'EXT2'.
PERFJRM visualizar_fm_exit.
WHEN 'BADI'.
PERFJRM visualizar_interface.
WHEN 'JBB'.
CALL TRANSACTIJN 'JBBH'.
WHEN 'JB28'.
CALL TRANSACTIJN 'JB28'.
WHEN 'SUST' JR 'VAL'.
PERFJRM visualizar_programa.
WHEN 'FDEX'.
SUBMIT rsmodprf AND RETURN.
WHEN 'BTE1'.
CALL TRANSACTIJN 'FIBF'.
WHEN 'BTE2'.
PERFJRM cargar_bte USING 'E'.
WHEN 'BTE3'.
PERFJRM cargar_bte USING 'P'.
WHEN 'SENH'.
SUBMIT sapmsenh VIA SELECTIJN-SCREEN
AND RETURN.
WHEN 'CIMP'.
PERFJRM visualizar_imp_enh.
WHEN 'ALL'.
MJVE 'X' TJ : p_incl, p_func, p_submit.
WHEN 'DAL'.
CLEAR: p_incl, p_func, p_submit.
WHEN JTHERS.
Do Nothing !!.
ENDCASE.

AT SELECTIJN-SCREEN JN VALUE-REQUEST FJR p_prog.

PERFJRM repid_f4.

----------------------------------------------------------------------
INICIJ
----------------------------------------------------------------------
START-JF-SELECTIJN.

GET TIME FIELD w_tini.

- CJNSISTENCIAS DE LJS PARAMETRJS.
PERFJRM consisti_parametros.

- INICIALIZA TABLA.
PERFJRM inicializa_tabela.

- VERIFICA SI EN EL PRJGRAMA EXISTE ALGUN INCLUDE, FUNCIJN J SUBMIT.
PERFJRM verifica_include_funcao_submit.

- ANALISA LJS INCLUDES Y BUSCA PJR USER-EXIT, BADI'S Y BTE.
PERFJRM busca_user_exit_badi_bte.

- ANALISA LJS INCLUDES Y BUSCA LJS FIELD-EXIT'S.
PERFJRM buscar_field_exit.

- JBTENGJ LJS EXIT's DE LA TRANSACCIJN.
PERFJRM buscar_user_exit.

- JBTENGJ LAS PUNTJS DE AMPLIACIJN.
PERFJRM buscar_enh.

- JBTENGJ LAS SUSTITUCIJNES.
PERFJRM buscar_sustituciones.

- JBTENGJ LAS VALIDACIJNES.
PERFJRM buscar_validaciones.

- CARGJ LJS BREAKPJINTS.
PERFJRM cargar_break.

- VISUALIZA LAS AMPLIACIJNES ENCJNTRADAS.
PERFJRM exibe_user_exit.

----------------------------------------------------------------------
FIN
----------------------------------------------------------------------
END-JF-SELECTIJN.

&---------------------------------------------------------------------
& Form BUSCA_USER_EXIT_BADI_BTE
&---------------------------------------------------------------------
Busca EXIT's, BADI's y BTE en el cdigo fuente.
----------------------------------------------------------------------
FJRM busca_user_exit_badi_bte.

- VERIFICA SI EN LJS INCLUDES SELECIJNADJS EXISTEN EXITS.
LJJP AT ti_includes.

DESCRIBE TABLE ti_includes.
PERFJRM evitar_time_out USING sy-tfill.

- BJRRA LA TABLA INTERNA.
REFRESH ti_programa.

- REALIZA LECTURA DE INCLUDE ALMACENANDJ EN TABLA INTERNA
READ REPJRT ti_includes-nome INTJ ti_programa.

LJJP AT ti_programa.

IF p_ue EQ 'X'.
PERFJRM buscar_exit.
PERFJRM busca_enhancements.
ENDIF.

IF p_badi EQ 'X'.
PERFJRM buscar_badi.
ENDIF.

IF p_bte EQ 'X'.
PERFJRM buscar_bte.
ENDIF.

IF p_enh EQ 'X'.
PERFJRM buscar_punto_ampliacion.
ENDIF.

ENDLJJP.
ENDLJJP.

ENDFJRM. " BUSCA_USER_EXIT_BADI_BTE

&---------------------------------------------------------------------
& Form BUSCA_ENHANCEMENTS
&---------------------------------------------------------------------
Busca las llamadas a los USER-EXIT.
----------------------------------------------------------------------
FJRM busca_enhancements.

- VERIFICA SI EN LA LINEA DEL PRJGRAMA EXISTE EN ALGUN ENHANCEMENT.
SEARCH ti_programa-cf FJR c_enhance.
- SE ENCJNTRJ EL ENHANCEMENT Y LA LINEA NJ EST CJMENTADA.
IF sy-subrc EQ 0
AND ti_programa-cf+0(1) NE c_comentario.
CLEAR ti_user_exit.
- REMUEVE ESPACIJS EN EL INICIJ DEL STRING.
SHIFT ti_programa-cf LEFT DELETING LEADING space.
MJVE: ti_includes-nome TJ ti_user_exit-programa,
c_ue TJ ti_user_exit-tipo,
sy-tabix TJ ti_user_exit-linea,
ti_programa-cf TJ ti_user_exit-cf,
ti_includes-nivel TJ ti_user_exit-nivel.
APPEND ti_user_exit.
ENDIF.

ENDFJRM. " BUSCA_ENHANCEMENTS

&---------------------------------------------------------------------
& Form EXIBE_USER_EXIT
&---------------------------------------------------------------------
Muestra los datos.
----------------------------------------------------------------------
FJRM exibe_user_exit.

PERFJRM armar_alv.
PERFJRM mostrar_listado.

ENDFJRM. " EXIBE_USER_EXIT

&---------------------------------------------------------------------
& Form PRJCURA_INCLUDE
&---------------------------------------------------------------------
text
----------------------------------------------------------------------
FJRM procura_include.

CLEAR vg_palavra.

- VERIFICA SI EN LA LINEA DEL PRJGRAMA EXISTE ALGUN INCLUDE.
SEARCH ti_programa-cf FJR c_include.
- SE ENCJNTRJ EN EL INCLUDE Y LA LINEA NJ EST CJMENTADA.
IF sy-subrc EQ 0
AND ti_programa-cf+0(1) NE c_comentario.

- VERIFICA SI EN LA LINEA DEL PRJGRAMA EXISTE ALGUN STRUCTURE.
SEARCH ti_programa-cf FJR c_struct.

IF sy-subrc IS INITIAL.
EXIT.
ENDIF.

- VERIFICA TJDJS LJS 500 CARACTERES DE LA LINEA PARA MJNTAR NJMBRE
- DEL INCLUDE
DJ 500 TIMES.
vg_inicial = sy-index - 1.
MJVE ti_programa-cf+vg_inicial(1) TJ vg_caracter.
IF NJT vg_caracter IS INITIAL.
- VERIFICA SI NJ ES FIN DE CJMANDJ.
IF vg_caracter EQ c_ponto.
EXIT.
ENDIF.
- ARMA PALABRA.
CJNCATENATE vg_palavra vg_caracter INTJ vg_palavra.
- CJNVIERTE A MAYUSCULA PARA FUTURA CJMPARACIJN.
TRANSLATE vg_palavra TJ UPPER CASE.
- SE ENCJNTRJ ALGUN INCLUDE
IF vg_palavra EQ c_include.
CLEAR vg_palavra.
ENDIF.
ENDIF.
ENDDJ.
- GRABA NJMBRE DEL INCLUDE PARA FUTURA BUSQUEDA PJR USER EXIT.
READ TABLE ti_includes WITH KEY nome = vg_palavra.
IF NJT sy-subrc IS INITIAL.
IF vg_nivel LE p_nivel.
MJVE: vg_palavra TJ ti_includes-nome,
vg_nivel TJ ti_includes-nivel.
APPEND ti_includes.
ENDIF.
ENDIF.

ENDIF.

ENDFJRM. " PRJCURA_INCLUDE

&---------------------------------------------------------------------
& Form PRJCURA_FUNCAJ
&---------------------------------------------------------------------
text
----------------------------------------------------------------------
FJRM procura_funcao.

CLEAR: vg_conta_aspa,
vg_palavra.

- VERIFICA SI EN LA LINEA DEL PRJGRAMA EXISTE ALGUNA FUNCIJN.
SEARCH ti_programa-cf FJR c_funcao_2.
- SE ENCJNTRJ UNA FUNCIJN Y LA LINEA NJ ESTA CJMENTADA..
IF sy-subrc EQ 0
AND ti_programa-cf+0(1) NE c_comentario.
- VERIFICA TJDJS LJS 500 CARACTERES DE LA LINEA PARA MJNTAR NJMBRE
- DE LA INCLUDE
DJ 500 TIMES.
vg_inicial = sy-index - 1.
MJVE ti_programa-cf+vg_inicial(1) TJ vg_caracter.
IF NJT vg_caracter IS INITIAL.
- VERIFICA SI NJ ES FIN DE CJMANDJ.
IF vg_caracter EQ c_aspa.
ADD 1 TJ vg_conta_aspa.
IF vg_conta_aspa EQ 2.
EXIT.
ENDIF.
ENDIF.
- ARMA PALABRA.
CJNCATENATE vg_palavra vg_caracter INTJ vg_palavra.
- CJNVIERTE A MAYUSCULA PARA FUTURA CJMPARACIJN.
TRANSLATE vg_palavra TJ UPPER CASE.
- SE ENCJNTRJ ALGUN INCLUDE
IF vg_palavra EQ c_funcao_1.
CLEAR vg_palavra.
ENDIF.
ENDIF.
ENDDJ.
- BUSCA NJMBRE DE LA FUNCIJN PARA FUTURA BUSQUEDA PJR USER EXIT.
CLEAR vg_pname.
SELECT SINGLE pname
INTJ vg_pname
FRJM tfdir
WHERE funcname EQ vg_palavra.
IF sy-subrc EQ 0.

READ TABLE ti_includes WITH KEY nome = vg_pname.
IF NJT sy-subrc IS INITIAL.
IF vg_nivel LE p_nivel.
MJVE: vg_pname TJ ti_includes-nome,
vg_nivel TJ ti_includes-nivel.
APPEND ti_includes.
ENDIF.
ENDIF.

ENDIF.
ENDIF.

ENDFJRM. " PRJCURA_FUNCAJ

&---------------------------------------------------------------------
& Form VERIFICA_INCLUDE_FUNCAJ_SUBMIT
&---------------------------------------------------------------------
text
----------------------------------------------------------------------
FJRM verifica_include_funcao_submit.

CHECK p_ue IS NJT INITIAL JR p_badi IS NJT INITIAL
JR p_bte IS NJT INITIAL JR p_enh IS NJT INITIAL.

LJJP AT ti_includes.

ADD 1 TJ vg_contador.
DESCRIBE TABLE ti_includes.
PERFJRM evitar_time_out USING sy-tfill.
MJVE ti_includes-nivel TJ vg_nivel.
ADD 1 TJ vg_nivel.

- BJRRA TABLA INTERNA.
REFRESH ti_programa.

- REALIZA LECTURA DE INCLUDE/FUNCIJN ALMACENANDJ EN TABLA INTERNA
READ REPJRT ti_includes-nome INTJ ti_programa.

LJJP AT ti_programa.

- PRJCURA PJR INCLUDES.
IF p_incl EQ c_x.
PERFJRM procura_include.
ENDIF.
- PRJCURA PJR FUNCIJN.
IF p_func EQ c_x.
PERFJRM procura_funcao.
ENDIF.
- PRJCURA PJR SUBMIT.
IF p_submit EQ c_x.
PERFJRM procura_submit.
ENDIF.

ENDLJJP.

ENDLJJP.

ENDFJRM. " VERIFICA_INCLUDE_FUNCAJ_SUBMIT

&---------------------------------------------------------------------
& Form EVITAR_TIME_JUT
&---------------------------------------------------------------------
Evito el TIME JUT visualizando un mensaje
----------------------------------------------------------------------
FJRM evitar_time_out USING p_tfill LIKE sy-tfill.

DATA:
vl_total(10) TYPE n,
vl_atual(10) TYPE n,
l_tout LIKE sy-timlo,
l_time(10) TYPE c.

GET TIME FIELD l_tout.

l_tout = l_tout - w_tini.

MJVE:
p_tfill TJ vl_total,
vg_contador TJ vl_atual.

SHIFT vl_total LEFT DELETING LEADING '0'.
SHIFT vl_atual LEFT DELETING LEADING '0'.
WRITE l_tout TJ l_time.

CJNCATENATE 'Tpo:' l_time 'Total:' vl_total 'Actual:' vl_atual
INTJ vg_texto
SEPARATED BY space.

CALL FUNCTIJN 'SAPGUI_PRJGRESS_INDICATJR'
EXPJRTING
text = vg_texto.

ENDFJRM. " EVITAR_TIME_JUT

&---------------------------------------------------------------------
& Form PRJCURA_SUBMIT
&---------------------------------------------------------------------
text
----------------------------------------------------------------------
FJRM procura_submit.

CLEAR: vg_conta_espaco, vg_palavra, vg_ini_contagem.

- VERIFICA SI LA LINEA DEL PRJGRAMA EXISTE ALGUN INCLUDE.
SEARCH ti_programa-cf FJR c_submit.
- SE ENCJNTRJ EN EL INCLUDE Y LA LINEA NJ EST CJMENTADA.
IF sy-subrc EQ 0
AND ti_programa-cf+0(1) NE c_comentario.
- VERIFICA TJDJS LJS 500 CARACTERES DE LA LINEA PARA MJNTAR NJMBRE
- DEL INCLUDE
DJ 500 TIMES.
vg_inicial = sy-index - 1.
MJVE ti_programa-cf+vg_inicial(1) TJ vg_caracter.
IF vg_ini_contagem EQ c_x AND vg_caracter IS INITIAL.
ADD 1 TJ vg_conta_espaco.
ENDIF.

IF NJT vg_caracter IS INITIAL.
MJVE c_x TJ vg_ini_contagem.
IF vg_caracter EQ c_ponto.
EXIT.
ENDIF.
- ARMA PALABRA.
IF vg_conta_espaco LT 2.
CJNCATENATE vg_palavra vg_caracter INTJ vg_palavra.
- CJNVIERTE A MAYUSCULA PARA FUTURA CJMPARACIJN..
TRANSLATE vg_palavra TJ UPPER CASE.
- SE ENCJNTRJ ALGUN INCLUDE
IF vg_palavra EQ c_submit.
CLEAR vg_palavra.
ENDIF.
ELSE.
EXIT.
ENDIF.
ENDIF.
ENDDJ.
- BUSCA NJMBRE DE LA FUNCIJN PARA FUTURA BUSQUEDA PJR USER EXIT.
READ TABLE ti_includes WITH KEY nome = vg_palavra.
IF NJT sy-subrc IS INITIAL.
IF vg_nivel LE p_nivel.
MJVE: vg_palavra TJ ti_includes-nome,
vg_nivel TJ ti_includes-nivel.
APPEND ti_includes.
ENDIF.
ENDIF.
ENDIF.

ENDFJRM. " PRJCURA_SUBMIT

&---------------------------------------------------------------------
& Form CJNSISTI_PARAMETRJS
&---------------------------------------------------------------------
text
----------------------------------------------------------------------
FJRM consisti_parametros.

IF p_nivel IS INITIAL.
MJVE 1 TJ p_nivel.
ENDIF.

IF p_prog IS INITIAL AND p_tcode IS INITIAL.
- EL NJMBRE DEL PRJGRAMA Y EL NJMBRE DE LA TRANSACCIJN NJ PUEDEN SER
- NULJS. UNJ DE ELLJS DEBE SER INFJRMADJ.
MESSAGE ID '00' TYPE 'I' NUMBER '398' WITH c_text_e01.
STJP.
ENDIF.

IF NJT p_prog IS INITIAL AND NJT p_tcode IS INITIAL.
- SE SJLICITA AL USUARIJ QUE INFJRME NJMBRE DE PRJGRAMA J TRANSACCIJN.
MESSAGE ID '00' TYPE 'I' NUMBER '398' WITH c_text_e02.
STJP.
ENDIF.

IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIAL
AND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIAL
AND p_enh IS INITIAL.
- SE SJLICITA AL USUARIJ QUE INFJRME UN TIPJ DE MEJJRA.
MESSAGE ID '00' TYPE 'I' NUMBER '398' WITH c_text_e03.
STJP.
ENDIF.

ENDFJRM. " CJNSISTI_PARAMETRJS

&---------------------------------------------------------------------
& Form INICIALIZA_TABELA
&---------------------------------------------------------------------
text
----------------------------------------------------------------------
FJRM inicializa_tabela.

DATA:
e_tstc TYPE tstc,
l_tcode TYPE sy-tcode.

REFRESH ti_includes.

IF NJT p_prog IS INITIAL.

MJVE: p_prog TJ ti_includes-nome,
'0' TJ ti_includes-nivel.
APPEND ti_includes.

- BUSCJ EL PRJGRAMA.
READ REPJRT ti_includes-nome INTJ ti_programa.

IF sy-subrc EQ 0.
REFRESH ti_programa.
ELSE.
- EL PRJGRAMA NJ EXISTE.
MESSAGE s893(pz) WITH 'El programa' p_prog 'no existe.'.
STJP.
ENDIF.

ELSEIF NJT p_tcode IS INITIAL.

SELECT SINGLE
FRJM tstc
WHERE tcode EQ p_tcode.

IF sy-subrc EQ 0.

IF tstc-pgmna IS NJT INITIAL.
MJVE: tstc-pgmna TJ ti_includes-nome,
'0' TJ ti_includes-nivel.
APPEND ti_includes.
ELSE.
Se trata de una transaccin de parmetros. Jbtengo la transaccin
asociada.
CALL FUNCTIJN 'RS_TRANSACTIJN_SINGLE_GET'
EXPJRTING
parameter_tcode = p_tcode
IMPJRTING
tcode = l_tcode.

SELECT SINGLE
INTJ e_tstc
FRJM tstc
WHERE tcode EQ l_tcode.

IF sy-subrc EQ 0.
MJVE: e_tstc-pgmna TJ ti_includes-nome,
'0' TJ ti_includes-nivel.
APPEND ti_includes.
ELSE.
- LA TRANSACCIJN NJ EXISTE.
MESSAGE s893(pz) WITH 'La transaccin' p_tcode 'no existe.'.
ENDIF.
ENDIF.
ELSE.
- LA TRANSACCIJN NJ EXISTE.
MESSAGE s893(pz) WITH 'La transaccin' p_tcode 'no existe.'.
STJP.
ENDIF.
ENDIF.

ENDFJRM. " INICIALIZA_TABELA

&---------------------------------------------------------------------
& Form armar_alv
&---------------------------------------------------------------------
Armo el ALV.
----------------------------------------------------------------------
FJRM armar_alv .

DATA:
l_repid TYPE sy-repid.

MJVE sy-repid TJ l_repid.

CALL FUNCTIJN 'REUSE_ALV_BLJCK_LIST_INIT'
EXPJRTING
i_callback_program = l_repid
i_callback_user_command = 'USER_CJMMAND'.

IF p_ue IS NJT INITIAL.
PERFJRM construir_catalogo_exit.
PERFJRM definir_layout USING 'TI_USER_EXIT'
CHANGING wa_layout.
PERFJRM construir_eventos USING 'TJP_JF_PAGE'.
PERFJRM sort TABLES ti_sort
USING 'TI_USER_EXIT'.

CALL FUNCTIJN 'REUSE_ALV_BLJCK_LIST_APPEND'
EXPJRTING
is_layout = wa_layout
it_fieldcat = ti_cat
i_tabname = 'TI_USER_EXIT'
it_events = ti_events
it_sort = ti_sort
i_text = 'User-exit'
TABLES
t_outtab = ti_user_exit
EXCEPTIJNS
program_error = 1
maximum_of_appends_reached = 2
JTHERS = 3.


PERFJRM construir_catalogo_uexit.
PERFJRM definir_layout USING 'TI_FINAL'
CHANGING wa_layout.
PERFJRM construir_eventos USING 'TJP_JF_PAGE_UEXIT'.
PERFJRM sort TABLES ti_sort
USING 'TI_FINAL'.

CALL FUNCTIJN 'REUSE_ALV_BLJCK_LIST_APPEND'
EXPJRTING
is_layout = wa_layout
it_fieldcat = ti_cat
i_tabname = 'TI_FINAL'
it_events = ti_events
it_sort = ti_sort
i_text = 'User-exit Tx.CMJD'
TABLES
t_outtab = ti_final
EXCEPTIJNS
program_error = 1
maximum_of_appends_reached = 2
JTHERS = 3.

ENDIF.

IF p_badi IS NJT INITIAL.
PERFJRM construir_catalogo_badi.
PERFJRM definir_layout USING 'TI_BADI'
CHANGING wa_layout.
PERFJRM construir_eventos USING 'TJP_JF_PAGE_BADI'.
PERFJRM sort TABLES ti_sort
USING 'TI_BADI'.

CALL FUNCTIJN 'REUSE_ALV_BLJCK_LIST_APPEND'
EXPJRTING
is_layout = wa_layout
it_fieldcat = ti_cat
i_tabname = 'TI_BADI'
it_events = ti_events
it_sort = ti_sort
i_text = 'Badis'
TABLES
t_outtab = ti_badi
EXCEPTIJNS
program_error = 1
maximum_of_appends_reached = 2
JTHERS = 3.

ENDIF.

IF p_bte IS NJT INITIAL.
PERFJRM construir_catalogo_bte.
PERFJRM definir_layout USING 'TI_BTE'
CHANGING wa_layout.
PERFJRM construir_eventos USING 'TJP_JF_PAGE_BTE'.
PERFJRM sort TABLES ti_sort
USING 'TI_BTE'.

CALL FUNCTIJN 'REUSE_ALV_BLJCK_LIST_APPEND'
EXPJRTING
is_layout = wa_layout
it_fieldcat = ti_cat
i_tabname = 'TI_BTE'
it_events = ti_events
it_sort = ti_sort
i_text = 'BTE'
TABLES
t_outtab = ti_bte
EXCEPTIJNS
program_error = 1
maximum_of_appends_reached = 2
JTHERS = 3.

ENDIF.

IF p_enh IS NJT INITIAL.
PERFJRM construir_catalogo_enh.
PERFJRM definir_layout USING 'TI_ENH'
CHANGING wa_layout.
PERFJRM construir_eventos USING 'TJP_JF_PAGE_ENH'.
PERFJRM sort TABLES ti_sort
USING 'TI_ENH'.

CALL FUNCTIJN 'REUSE_ALV_BLJCK_LIST_APPEND'
EXPJRTING
is_layout = wa_layout
it_fieldcat = ti_cat
i_tabname = 'TI_ENH'
it_events = ti_events
it_sort = ti_sort
i_text = 'ENH'
TABLES
t_outtab = ti_enh
EXCEPTIJNS
program_error = 1
maximum_of_appends_reached = 2
JTHERS = 3.

PERFJRM construir_catalogo_enhobj.
PERFJRM definir_layout USING 'TI_ENHJBJ'
CHANGING wa_layout.
PERFJRM construir_eventos USING 'TJP_JF_PAGE_ENHJBJ'.
PERFJRM sort TABLES ti_sort
USING 'TI_ENHJBJ'.

CALL FUNCTIJN 'REUSE_ALV_BLJCK_LIST_APPEND'
EXPJRTING
is_layout = wa_layout
it_fieldcat = ti_cat
i_tabname = 'TI_ENHJBJ'
it_events = ti_events
it_sort = ti_sort
i_text = 'ENHJBJ'
TABLES
t_outtab = ti_enhobj
EXCEPTIJNS
program_error = 1
maximum_of_appends_reached = 2
JTHERS = 3.

ENDIF.

IF p_sust IS NJT INITIAL.
PERFJRM construir_catalogo_sust.
PERFJRM definir_layout USING 'TI_SUST'
CHANGING wa_layout.
PERFJRM construir_eventos USING 'TJP_JF_PAGE_SUST'.
PERFJRM sort TABLES ti_sort
USING 'TI_SUST'.

CALL FUNCTIJN 'REUSE_ALV_BLJCK_LIST_APPEND'
EXPJRTING
is_layout = wa_layout
it_fieldcat = ti_cat
i_tabname = 'TI_SUST'
it_events = ti_events
it_sort = ti_sort
i_text = 'Sustituciones'
TABLES
t_outtab = ti_sust
EXCEPTIJNS
program_error = 1
maximum_of_appends_reached = 2
JTHERS = 3.

ENDIF.

IF p_val IS NJT INITIAL.
PERFJRM construir_catalogo_val.
PERFJRM definir_layout USING 'TI_VAL'
CHANGING wa_layout.
PERFJRM construir_eventos USING 'TJP_JF_PAGE_VAL'.
PERFJRM sort TABLES ti_sort
USING 'TI_VAL'.

CALL FUNCTIJN 'REUSE_ALV_BLJCK_LIST_APPEND'
EXPJRTING
is_layout = wa_layout
it_fieldcat = ti_cat
i_tabname = 'TI_VAL'
it_events = ti_events
it_sort = ti_sort
i_text = 'Validaciones'
TABLES
t_outtab = ti_val
EXCEPTIJNS
program_error = 1
maximum_of_appends_reached = 2
JTHERS = 3.

ENDIF.

IF p_fdex IS NJT INITIAL.
PERFJRM construir_catalogo_fdex.
PERFJRM definir_layout USING 'TI_FDEX'
CHANGING wa_layout.
PERFJRM construir_eventos USING 'TJP_JF_PAGE_FDEX'.
PERFJRM sort TABLES ti_sort
USING 'TI_FDEX'.

CALL FUNCTIJN 'REUSE_ALV_BLJCK_LIST_APPEND'
EXPJRTING
is_layout = wa_layout
it_fieldcat = ti_cat
i_tabname = 'TI_FDEX'
it_events = ti_events
it_sort = ti_sort
i_text = 'Field-exit'
TABLES
t_outtab = ti_fdex
EXCEPTIJNS
program_error = 1
maximum_of_appends_reached = 2
JTHERS = 3.

ENDIF.

ENDFJRM. " armar_alv

&---------------------------------------------------------------------
& Form construir_catalogo_EXIT
&---------------------------------------------------------------------
Construir catalogo de campos para ALV
----------------------------------------------------------------------
FJRM construir_catalogo_exit .

DATA:
l_repid LIKE sy-repid.

REFRESH: ti_cat.

l_repid = sy-repid.

CALL FUNCTIJN 'REUSE_ALV_FIELDCATALJG_MERGE'
EXPJRTING
i_program_name = l_repid
i_internal_tabname = 'TI_USER_EXIT'
i_inclname = l_repid
CHANGING
ct_fieldcat = ti_cat
EXCEPTIJNS
inconsistent_interface = 1
program_error = 2
JTHERS = 3.

Asignar atributos de campo en el catalogo de reporte ALV
PERFJRM asignar_campo_a_catalogo TABLES ti_cat
USING:

'SEL' 'X' 'X' 'X' ' ' ' ' 'X' 'X' ' ' ' ' ' ',
'PRJGRAMA' 'X' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' ' c_text_01,
'TIPJ' 'X' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_05,
'NIVEL' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' c_text_02,
'BREAK' 'X' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_07,
'LINEA' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' c_text_03,
'CF' ' ' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_04.

ENDFJRM. " construir_catalogo_EXIT

&---------------------------------------------------------------------
& Form asignar_campo_a_catalogo
&---------------------------------------------------------------------
Asignar campo al catalogo ALV
----------------------------------------------------------------------
FJRM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_cat
USING p_fieldname LIKE wa_cat-fieldname
p_key LIKE wa_cat-key
p_col_pos TYPE c
p_fix_column LIKE wa_cat-fix_column
p_hotspot LIKE wa_cat-hotspot
p_do_sum LIKE wa_cat-do_sum
p_input LIKE wa_cat-input
p_checkbox LIKE wa_cat-checkbox
p_no_out LIKE wa_cat-no_out
p_icon LIKE wa_cat-icon
p_reptext_ddic LIKE wa_cat-reptext_ddic.

STATICS l_col_pos LIKE sy-cucol.

Asignar atributos de campo en el catalogo de cabecera ALV
CLEAR wa_cat.
READ TABLE pt_cat INTJ wa_cat
WITH KEY fieldname = p_fieldname.

CHECK sy-subrc EQ 0.

IF NJT p_reptext_ddic IS INITIAL.
wa_cat-seltext_l = wa_cat-seltext_m =
wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddic.
ENDIF.

IF p_col_pos EQ 'X'.
Inicializo el conteo para ordenar las columnas.
l_col_pos = 1.
ELSE.
ADD 1 TJ l_col_pos.
ENDIF.

wa_cat-fieldname = p_fieldname.
wa_cat-key = p_key.
wa_cat-col_pos = l_col_pos.
wa_cat-fix_column = p_fix_column.
wa_cat-hotspot = p_hotspot.
wa_cat-do_sum = p_do_sum.
wa_cat-edit = wa_cat-input = p_input.
wa_cat-checkbox = p_checkbox.
wa_cat-no_out = p_no_out.
wa_cat-icon = p_icon.

MJDIFY pt_cat FRJM wa_cat INDEX sy-tabix.

ENDFJRM. " asignar_campo_a_catalogo

&---------------------------------------------------------------------
& Form definir_layout
&---------------------------------------------------------------------
Definir atributos del layout de reporte
----------------------------------------------------------------------
FJRM definir_layout USING p_table TYPE slis_layout_alv-box_tabname
CHANGING p_layout TYPE slis_layout_alv .

CLEAR p_layout.

IF p_table NE 'TI_CIMP'.
Marco el campo para la seleccin.
p_layout-box_fieldname = 'SEL'.
p_layout-box_tabname = p_table.
ENDIF.
p_layout-zebra = 'X'.
p_layout-colwidth_optimize = 'X'.
p_layout-no_vline = ' '.
p_layout-no_colhead = ' '.
p_layout-lights_condense = 'X'.
p_layout-detail_popup = 'X'.
p_layout-detail_initial_lines = 'X'.
p_layout-flexible_key = ' '.
p_layout-key_hotspot = ' '.
p_layout-confirmation_prompt = 'X'.

ENDFJRM. " definir_layout

&---------------------------------------------------------------------
& Form construir_eventos
&---------------------------------------------------------------------
Asignar eventos soportados
----------------------------------------------------------------------
FJRM construir_eventos USING p_form LIKE wa_events-form.
DATA:
l_type(1) TYPE n.

REFRESH: ti_events.
CLEAR: wa_events.

ALV Simple Block append.
l_type = 2.

Buscar secciones para eventos
CALL FUNCTIJN 'REUSE_ALV_EVENTS_GET'
EXPJRTING
i_list_type = l_type
IMPJRTING
et_events = ti_events.

Leer evento 'TJP_JF_PAGE'
READ TABLE ti_events WITH KEY name = slis_ev_top_of_page
INTJ wa_events.
Asignar Rutina FJRM 'TJP_JF_PAGE' a evento
IF sy-subrc = 0.
MJVE p_form TJ wa_events-form.
MJDIFY ti_events FRJM wa_events INDEX sy-tabix.
ENDIF.

ENDFJRM. " construir_eventos

&---------------------------------------------------------------------
& Form top_of_page
&---------------------------------------------------------------------
Mostrar cabecera de pgina
----------------------------------------------------------------------
FJRM top_of_page.

DATA:
l_tfill_inc(20) TYPE c,
l_tfill_cant(20) TYPE c.

DESCRIBE TABLE ti_includes.
WRITE sy-tfill TJ l_tfill_inc.
CJNDENSE l_tfill_inc NJ-GAPS.

DESCRIBE TABLE ti_user_exit.
WRITE sy-tfill TJ l_tfill_cant.
CJNDENSE l_tfill_cant NJ-GAPS.

Construir encabezado del reporte
PERFJRM set_header USING l_tfill_cant
l_tfill_inc
'User-exit'.

ENDFJRM. "top_of_page

&---------------------------------------------------------------------
& Form TJP_JF_PAGE_UEXIT
&---------------------------------------------------------------------
Mostrar cabecera de pgina
----------------------------------------------------------------------
FJRM top_of_page_uexit.

DATA:
l_tfill_inc(20) TYPE c,
l_tfill_cant(20) TYPE c.

DESCRIBE TABLE ti_final.
WRITE sy-tfill TJ l_tfill_cant.
CJNDENSE l_tfill_cant NJ-GAPS.

Construir encabezado del reporte
PERFJRM set_header USING l_tfill_cant
l_tfill_inc
'USER-EXITs Tx.SMJD'.

ENDFJRM. "TJP_JF_PAGE_UEXIT

&---------------------------------------------------------------------
& Form TJP_JF_PAGE_FDEX
&---------------------------------------------------------------------
Mostrar cabecera de pgina
----------------------------------------------------------------------
FJRM top_of_page_fdex.

DATA:
l_tfill_inc(20) TYPE c,
l_tfill_cant(20) TYPE c.

DESCRIBE TABLE ti_fdex.
WRITE sy-tfill TJ l_tfill_cant.
CJNDENSE l_tfill_cant NJ-GAPS.

Construir encabezado del reporte
PERFJRM set_header USING l_tfill_cant
l_tfill_inc
'FIELD-EXITs'.

ENDFJRM. "TJP_JF_PAGE_FDEX

&---------------------------------------------------------------------
& Form TJP_JF_PAGE_BADI
&---------------------------------------------------------------------
Mostrar cabecera de pgina
----------------------------------------------------------------------
FJRM top_of_page_badi.

DATA:
l_tfill_inc(20) TYPE c,
l_tfill_cant(20) TYPE c.

DESCRIBE TABLE ti_includes.
WRITE sy-tfill TJ l_tfill_inc.
CJNDENSE l_tfill_inc NJ-GAPS.

DESCRIBE TABLE ti_badi.
WRITE sy-tfill TJ l_tfill_cant.
CJNDENSE l_tfill_cant NJ-GAPS.

Construir encabezado del reporte
PERFJRM set_header USING l_tfill_cant
l_tfill_inc
'BADIs'.

ENDFJRM. "TJP_JF_PAGE_BADI

&---------------------------------------------------------------------
& Form TJP_JF_PAGE_BTE
&---------------------------------------------------------------------
Mostrar cabecera de pgina
----------------------------------------------------------------------
FJRM top_of_page_bte.

DATA:
l_tfill_inc(20) TYPE c,
l_tfill_cant(20) TYPE c.

DESCRIBE TABLE ti_includes.
WRITE sy-tfill TJ l_tfill_inc.
CJNDENSE l_tfill_inc NJ-GAPS.

DESCRIBE TABLE ti_bte.
WRITE sy-tfill TJ l_tfill_cant.
CJNDENSE l_tfill_cant NJ-GAPS.

Construir encabezado del reporte
PERFJRM set_header USING l_tfill_cant
l_tfill_inc
'BTEs'.

ENDFJRM. "TJP_JF_PAGE_BTE

&---------------------------------------------------------------------
& Form TJP_JF_PAGE_ENH
&---------------------------------------------------------------------
Mostrar cabecera de pgina
----------------------------------------------------------------------
FJRM top_of_page_enh.

DATA:
l_tfill_inc(20) TYPE c,
l_tfill_cant(20) TYPE c.

DESCRIBE TABLE ti_includes.
WRITE sy-tfill TJ l_tfill_inc.
CJNDENSE l_tfill_inc NJ-GAPS.

DESCRIBE TABLE ti_enh.
WRITE sy-tfill TJ l_tfill_cant.
CJNDENSE l_tfill_cant NJ-GAPS.

Construir encabezado del reporte
PERFJRM set_header USING l_tfill_cant
l_tfill_inc
'Puntos de ampliacin'.

ENDFJRM. "TJP_JF_PAGE_ENH

&---------------------------------------------------------------------
& Form sort
&---------------------------------------------------------------------
Creo el sort del ALV (FM).
----------------------------------------------------------------------
--PT_sort Tabla
--P_tabname Nombre de la tabla
----------------------------------------------------------------------
FJRM sort TABLES pt_sort
USING p_tabname TYPE any.

CLEAR: pt_sort, wa_sort.
REFRESH pt_sort.

CASE p_tabname.
WHEN 'TI_SUST'.

wa_sort-fieldname = 'SUBSTID'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TJ pt_sort.

CLEAR: pt_sort, wa_sort.

wa_sort-fieldname = 'SUBSEQNR'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TJ pt_sort.

CLEAR: pt_sort, wa_sort.

wa_sort-fieldname = 'CJNSEQNR'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TJ pt_sort.

WHEN 'TI_VAL'.

wa_sort-fieldname = 'VALID'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TJ pt_sort.

CLEAR: pt_sort, wa_sort.

wa_sort-fieldname = 'VALSEQNR'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TJ pt_sort.

WHEN 'TI_ENHJBJ'.

wa_sort-fieldname = 'ENHNAME'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TJ pt_sort.

CLEAR: pt_sort, wa_sort.

wa_sort-fieldname = 'VERSIJN'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TJ pt_sort.

WHEN JTHERS.

IF p_tabname NE 'TI_FINAL'.

wa_sort-fieldname = 'TIPJ'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TJ pt_sort.

CLEAR: pt_sort, wa_sort.

IF p_tabname NE 'TI_FDEX'.

wa_sort-fieldname = 'NIVEL'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TJ pt_sort.

CLEAR: pt_sort, wa_sort.

wa_sort-fieldname = 'PRJGRAMA'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TJ pt_sort.

CLEAR: pt_sort, wa_sort.

wa_sort-fieldname = 'LINEA'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TJ pt_sort.

ENDIF.

ELSE.

wa_sort-fieldname = 'NAME'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TJ pt_sort.

CLEAR: pt_sort, wa_sort.

wa_sort-fieldname = 'MEMBER'.
wa_sort-tabname = p_tabname.
wa_sort-up = 'X'.
wa_sort-comp = 'X'.
APPEND wa_sort TJ pt_sort.
ENDIF.
ENDCASE.

ENDFJRM. " sort

&---------------------------------------------------------------------
& Form mostrar_listado
&---------------------------------------------------------------------
Mostrar listado ALV
----------------------------------------------------------------------
FJRM mostrar_listado .

wa_print-reserve_lines = 2.

CALL FUNCTIJN 'REUSE_ALV_BLJCK_LIST_DISPLAY'
EXPJRTING
is_print = wa_print
EXCEPTIJNS
program_error = 1
JTHERS = 2.

ENDFJRM. " mostrar_listado

&---------------------------------------------------------------------
& Form user_command
&---------------------------------------------------------------------
Evaluar acciones del usuario
----------------------------------------------------------------------
FJRM user_command USING ucomm LIKE sy-ucomm
sfields TYPE slis_selfield.

DATA l_break TYPE c.

Rescatar el registro seleccionado.
CASE sfields-tabname.
WHEN 'TI_USER_EXIT'.
READ TABLE ti_user_exit INDEX sfields-tabindex.
WHEN 'TI_BADI'.
READ TABLE ti_badi INDEX sfields-tabindex.
WHEN 'TI_BTE'.
READ TABLE ti_bte INDEX sfields-tabindex.
WHEN 'TI_ENH'.
READ TABLE ti_enh INDEX sfields-tabindex.
WHEN 'TI_ENHJBJ'.
READ TABLE ti_enhobj INDEX sfields-tabindex.
WHEN 'TI_FDEX'.
READ TABLE ti_fdex INDEX sfields-tabindex.
WHEN 'TI_FINAL'.
READ TABLE ti_final INDEX sfields-tabindex.
WHEN 'TI_SUST'.
READ TABLE ti_sust INDEX sfields-tabindex.
WHEN 'TI_VAL'.
READ TABLE ti_val INDEX sfields-tabindex.
WHEN 'TI_CIMP'.
READ TABLE ti_cimp INDEX sfields-tabindex.
ENDCASE.


Seleccion de opcion.
CASE ucomm.
DJUBLE CLICK.
WHEN '&IC1'.
Evaluar valor de campo seleccionado.
CHECK NJT sfields-value IS INITIAL.

CASE sfields-tabname.
WHEN 'TI_USER_EXIT'.
USER-EXIT.
IF ti_user_exit-tipo EQ sfields-value(4).
SEARCH ti_user_exit-cf FJR c_enhance.
CHECK sy-subrc EQ 0.
PERFJRM visualizar_exit USING ti_user_exit-programa
ti_user_exit-cf.
ELSEIF ti_user_exit-cf(60) EQ sfields-value.
PERFJRM visualizar_linea USING ti_user_exit-programa
ti_user_exit-linea.
MJVE 'X' TJ l_break.
ELSEIF ti_user_exit-break EQ sfields-value(4)
JR ti_user_exit-break+1(2) EQ sfields-value(2).
PERFJRM asignar_break USING ti_user_exit-programa
ti_user_exit-linea
ti_user_exit-break.
MJVE 'X' TJ l_break.
ENDIF.

WHEN 'TI_FINAL'.
USER-EXIT Tx. CMJD.
IF ti_final-name EQ sfields-value.
CALL FUNCTIJN 'MJD_SAP_HEAD'
EXPJRTING
mode = 'SHJM'
modname = ti_final-name
EXCEPTIJNS
attr_enqueued = 1
text_enqueued = 2
JTHERS = 3.

ELSEIF ti_final-include EQ sfields-value.
PERFJRM visualizar_linea USING ti_final-programa
'1'.
MJVE 'X' TJ l_break.
ENDIF.

WHEN 'TI_BADI'.
Badi.
IF ti_badi-tipo EQ sfields-value(4).
PERFJRM visualizar_badi USING ti_badi-cf.
ELSEIF ti_badi-cf(60) EQ sfields-value.
PERFJRM visualizar_linea USING ti_badi-programa
ti_badi-linea.
MJVE 'X' TJ l_break.
ELSEIF ti_badi-break EQ sfields-value(4)
JR ti_badi-break+1(2) EQ sfields-value(2).
PERFJRM asignar_break USING ti_badi-programa
ti_badi-linea
ti_badi-break.
MJVE 'X' TJ l_break.
ENDIF.

WHEN 'TI_BTE'.
BTE.
IF ti_bte-tipo EQ sfields-value(4).
PERFJRM fibf USING ti_bte-cf.
ELSEIF ti_bte-cf(60) EQ sfields-value.
PERFJRM visualizar_linea USING ti_bte-programa
ti_bte-linea.
MJVE 'X' TJ l_break.
ELSEIF ti_bte-break EQ sfields-value(4)
JR ti_bte-break+1(2) EQ sfields-value(2).
PERFJRM asignar_break USING ti_bte-programa
ti_bte-linea
ti_bte-break.
MJVE 'X' TJ l_break.
ENDIF.

WHEN 'TI_ENH'.
Punto de ampliacin.
IF ti_enh-cf(60) EQ sfields-value.
PERFJRM visualizar_linea USING ti_enh-programa
ti_enh-linea.
MJVE 'X' TJ l_break.
ELSEIF ti_enh-tipo EQ sfields-value(4).
PERFJRM bi_se18 USING ti_enh-cf.
ENDIF.

WHEN 'TI_ENHJBJ'.
Punto de ampliacin.
IF ti_enhobj-enhname EQ sfields-value(30).
PERFJRM bi_se19 USING ti_enhobj-enhname.
ENDIF.

WHEN 'TI_SUST'.
Sustituciones.
IF ti_sust-substid EQ sfields-value(7) JR
ti_sust-subseqnr EQ sfields-value(3).
PERFJRM visualizar_sust USING ti_sust-substid
ti_sust-subseqnr.
ENDIF.

WHEN 'TI_VAL'.
Validaciones.
IF ti_val-valid EQ sfields-value(7) JR
ti_val-valseqnr EQ sfields-value(3).
PERFJRM visualizar_val USING ti_val-valid
ti_val-valseqnr.
ENDIF.


WHEN 'TI_FDEX'.
Field-exit.
IF ti_fdex-tipo EQ sfields-value.
SUBMIT rsmodprf AND RETURN.
ELSEIF ti_fdex-cf(60) EQ sfields-value.
Visualizo el field-exit.
CALL FUNCTIJN 'RS_FUNCTIJN_SHJW'
EXPJRTING
funcname = ti_fdex-cf.

CALL FUNCTIJN 'RS_NAVIGATIJN_MJNITJR'.
ENDIF.

WHEN 'TI_CIMP'.
Customer implementation.

CASE sfields-fieldname.
WHEN 'ENHNAME'.
PERFJRM bi_se19 USING ti_cimp-enhname.
WHEN 'ENHINCLUDE'.
PERFJRM visualizar_enh_cf USING ti_cimp-enhinclude.
WHEN JTHERS.
DJ NJTHING !!!
ENDCASE.

WHEN JTHERS.
DJ NJTHING !!!
ENDCASE.

WHEN JTHERS.
DJ NJTHING !!!
ENDCASE.

IF l_break IS NJT INITIAL AND sfields-tabname NE 'TI_CIMP'.
WAIT UP TJ 1 SECJNDS.
PERFJRM cargar_break.
ENDIF.
sfields-refresh = 'X'.

ENDFJRM. "user_command

&---------------------------------------------------------------------
& Form visualizar_linea
&---------------------------------------------------------------------
Visualizo la linea de cdigo del programa.
----------------------------------------------------------------------
FJRM visualizar_linea USING p_programa TYPE sy-repid
p_linea.

Visualizo la linea seleccionada en el programa.
CALL FUNCTIJN 'RS_TJJL_ACCESS'
EXPJRTING
operation = c_operation
object_name = p_programa
object_type = c_type
position = p_linea
EXCEPTIJNS
not_executed = 1
invalid_object_type = 2
JTHERS = 3.

ENDFJRM. " visualizar_linea

&---------------------------------------------------------------------
& Form buscar_exit
&---------------------------------------------------------------------
Buscar USER-EXIT.
----------------------------------------------------------------------
FJRM buscar_exit .

- VERIFICA SI EN LA LINEA DEL PRJGRAMA EXISTE ALGUN USER-EXIT.
SEARCH ti_programa-cf FJR c_user_exit.
- SE ENCJNTRJ UN USER-EXIT Y SE VERIFICA SI LA LINEA NJ ESTA CJMENTADA
IF sy-subrc EQ 0
AND ti_programa-cf+0(1) NE c_comentario.

- VERIFICJ QUE NJ TRAIGA LJS ENDFJRM.
SEARCH ti_programa-cf FJR c_endform.
CHECK sy-subrc NE 0.

- VERIFICJ QUE NJ TRAIGA LJS PERFJRM.
SEARCH ti_programa-cf FJR c_perform.
CHECK sy-subrc NE 0.

- VERIFICJ QUE NJ TRAIGA LAS ASIGNACIJNES.
SEARCH ti_programa-cf FJR c_igual.
CHECK sy-subrc NE 0.

CLEAR ti_user_exit.
- REMUEVE ESPACIJS EN EL INICIJ DEL STRING.
SHIFT ti_programa-cf LEFT DELETING LEADING space.
MJVE: ti_includes-nome TJ ti_user_exit-programa,
c_ue TJ ti_user_exit-tipo,
sy-tabix TJ ti_user_exit-linea,
ti_programa-cf TJ ti_user_exit-cf,
ti_includes-nivel TJ ti_user_exit-nivel.
APPEND ti_user_exit.
ENDIF.

ENDFJRM. " buscar_exit

&---------------------------------------------------------------------
& Form buscar_badi
&---------------------------------------------------------------------
Buscar BADI.
----------------------------------------------------------------------
FJRM buscar_badi .

DATA:
l_subrc LIKE sy-subrc.

- VERIFICA SI EN LA LINEA DEL PRJGRAMA EXISTE ALGUNA BADI.
SEARCH ti_programa-cf FJR c_badi.
- SE ENCJNTRJ UNA BADI Y SE VERIFICA SI LA LINEA NJ EST CJMENTADA.
IF sy-subrc EQ 0
AND ti_programa-cf+0(1) NE c_comentario.

SEARCH ti_programa-cf FJR c_include.
IF sy-subrc NE 0.
CLEAR l_subrc.
SEARCH ti_programa-cf FJR c_method.
IF sy-subrc NE 0.
SEARCH ti_programa-cf FJR c_funcao_2.
IF sy-subrc NE 0.
SEARCH ti_programa-cf FJR c_perform.
IF sy-subrc NE 0.
SEARCH ti_programa-cf FJR c_type_ref.
IF sy-subrc NE 0.
SEARCH ti_programa-cf FJR c_form.
MJVE '4' TJ l_subrc.
ENDIF.
ENDIF.
ENDIF.
ENDIF.

IF l_subrc EQ 0.
CLEAR ti_badi.
- REMUEVE ESPACIJS EN EL INICIJ DEL STRING.
SHIFT ti_programa-cf LEFT DELETING LEADING space.
MJVE: ti_includes-nome TJ ti_badi-programa,
c_b TJ ti_badi-tipo,
sy-tabix TJ ti_badi-linea,
ti_programa-cf TJ ti_badi-cf,
ti_includes-nivel TJ ti_badi-nivel.
APPEND ti_badi.
ENDIF.
ENDIF.
ELSE.
CHECK p_handl IS NJT INITIAL.
- VERIFICA SI EN LA LINEA DEL PRJGRAMA EXISTE ALGUNA INSTANCIA DE
- UNA BADI.
SEARCH ti_programa-cf FJR c_handler.
- SE ENCJNTRJ UNA INSTANCIA DE IMPLEMENACIJN Y SE VERIFICA SI LA LINEA
- NJ EST CJMENTADA.
IF sy-subrc EQ 0
AND ti_programa-cf+0(1) NE c_comentario.

SEARCH ti_programa-cf FJR c_include.
CHECK sy-subrc NE 0.
CLEAR ti_badi.
- REMUEVE ESPACIJS EN EL INICIJ DEL STRING.
SHIFT ti_programa-cf LEFT DELETING LEADING space.
MJVE: ti_includes-nome TJ ti_badi-programa,
c_b TJ ti_badi-tipo,
sy-tabix TJ ti_badi-linea,
ti_programa-cf TJ ti_badi-cf,
ti_includes-nivel TJ ti_badi-nivel.
APPEND ti_badi.
ENDIF.
ENDIF.

ENDFJRM. " buscar_badi

&---------------------------------------------------------------------
& Form buscar_bte
&---------------------------------------------------------------------
Buscar BTE.
----------------------------------------------------------------------
FJRM buscar_bte .

- VERIFICA SI EN LA LINEA DEL PRJGRAMA EXISTE ALGUNA BTE.
SEARCH ti_programa-cf FJR c_bte.
- SE ENCJNTRJ UNA BTE Y SE VERIFICA SI LA LINEA NJ EST CJMENTADA.
IF sy-subrc EQ 0
AND ti_programa-cf+0(1) NE c_comentario.
'JPEN_FI_PERFJRM'.

- VERIFICJ QUE TRAIGA EL LLAMADJ A LA FUNCIJN DE LA BTE.
SEARCH ti_programa-cf FJR c_funcao_2.
CHECK sy-subrc EQ 0.
- VERIFICJ QUE NJ TRAIGA LJS INCLUDE DEL GRUPJ DE FUNCIJN.
SEARCH ti_programa-cf FJR c_include.
CHECK sy-subrc NE 0.
- VERIFICJ QUE NJ TRAIGA LJS ENDFJRM.
SEARCH ti_programa-cf FJR c_endform.
CHECK sy-subrc NE 0.

CLEAR ti_bte.
- REMUEVE ESPACIJS EN EL INICIJ DEL STRING.
SHIFT ti_programa-cf LEFT DELETING LEADING space.
MJVE: ti_includes-nome TJ ti_bte-programa,
c_bt TJ ti_bte-tipo,
sy-tabix TJ ti_bte-linea,
ti_programa-cf TJ ti_bte-cf,
ti_includes-nivel TJ ti_bte-nivel.
APPEND ti_bte.
ENDIF.

- VERIFICA SI EN LA LINEA DEL PRJGRAMA EXISTE ALGUNA BTE.
SEARCH ti_programa-cf FJR c_bte1.
- SE ENCJNTRJ UNA BTE Y SE VERIFICA SI LA LINEA NJ EST CJMENTADA.
IF sy-subrc EQ 0
AND ti_programa-cf+0(1) NE c_comentario.
'JUTBJUND_CALL'.

- VERIFICJ QUE TRAIGA EL LLAMADJ A LA FUNCIJN DE LA BTE.
SEARCH ti_programa-cf FJR c_funcao_2.
CHECK sy-subrc EQ 0.
- VERIFICJ QUE NJ TRAIGA LJS INCLUDE DEL GRUPJ DE FUNCIJN.
SEARCH ti_programa-cf FJR c_include.
CHECK sy-subrc NE 0.
- VERIFICJ QUE NJ TRAIGA LJS ENDFJRM.
SEARCH ti_programa-cf FJR c_endform.
CHECK sy-subrc NE 0.

CLEAR ti_bte.
- REMUEVE ESPACIJS EN EL INICIJ DEL STRING.
SHIFT ti_programa-cf LEFT DELETING LEADING space.
MJVE: ti_includes-nome TJ ti_bte-programa,
c_bt TJ ti_bte-tipo,
sy-tabix TJ ti_bte-linea,
ti_programa-cf TJ ti_bte-cf,
ti_includes-nivel TJ ti_bte-nivel.
APPEND ti_bte.
ENDIF.

ENDFJRM. " buscar_bte

&---------------------------------------------------------------------
& Form repid_f4
&---------------------------------------------------------------------
Ejecuto el F4 para buscar programas.
----------------------------------------------------------------------
FJRM repid_f4 .

CALL FUNCTIJN 'REPJSITJRY_INFJ_SYSTEM_F4'
EXPJRTING
object_type = 'PRJG'
object_name = p_prog
suppress_selection = 'X'
IMPJRTING
object_name_selected = p_prog
EXCEPTIJNS
cancel = 1
wrong_type = 2
JTHERS = 3.

ENDFJRM. " repid_f4

&---------------------------------------------------------------------
& Form visualizar_badi
&---------------------------------------------------------------------
Visualizo las definiciones de la BADI.
---------------------------------------------------------------------
FJRM visualizar_badi USING p_cf LIKE ti_user_exit-cf.

DATA:
l_answer(1),
l_inter_name LIKE sxs_inter-inter_name,
l_cf TYPE i.

DATA: BEGIN JF lt_cf JCCURS 0,
linea(500),
END JF lt_cf.

SEARCH p_cf FJR c_type_ref.

CHECK sy-subrc IS INITIAL.

REFRESH lt_cf.

l_cf = 500 - sy-fdpos.

SPLIT p_cf+sy-fdpos(l_cf) AT space INTJ TABLE lt_cf.

CHECK sy-subrc IS INITIAL.

READ TABLE lt_cf INDEX 4.

TRANSLATE lt_cf-linea TJ UPPER CASE.
TRANSLATE lt_cf-linea USING '. , '.

MJVE lt_cf-linea TJ l_inter_name.

Jbtengo a partir de la interface la definicin de la BADI.
SELECT SINGLE
FRJM sxs_inter
WHERE inter_name EQ l_inter_name.

CHECK sy-subrc IS INITIAL.

Muestro PJP-UP para seleccin de si se desea visualiar la definicin
o la implementacin de la BADI.
CALL FUNCTIJN 'PJPUP_WITH_2_BUTTJNS_TJ_CHJJSE'
EXPJRTING
defaultoption = '1'
diagnosetext1 = 'Definicin BADI:'
diagnosetext2 = sxs_inter-exit_name
diagnosetext3 = '.'
textline1 = ' '
textline2 = 'Defina la visualizacin:'
textline3 = ' '
text_option1 = 'Definicin BADI'
text_option2 = 'Implementacin BADI'
titel = 'Seleccionar tipo:'
IMPJRTING
answer = l_answer.

CASE l_answer.
WHEN '1'.
Visualizo la definicin de la BADI.
CALL FUNCTIJN 'SXJ_BADI_SHJW'
EXPJRTING
exit_name = sxs_inter-exit_name
EXCEPTIJNS
action_canceled = 1
access_failure = 2
badi_not_exixting = 3
JTHERS = 4.

WHEN '2'.
Visualizo la implementacin de la BADI.
CALL FUNCTIJN 'SXJ_IMPL_FJR_BADI_JVER'
EXPJRTING
exit_name = sxs_inter-exit_name
EXCEPTIJNS
no_imps_existing = 1
badi_not_existing = 2
action_canceled = 3
JTHERS = 4.

IF sy-subrc = 1.
MESSAGE s380(enhancement) WITH sxs_inter-exit_name.
ENDIF.

WHEN JTHERS.
Do Nothing !!
ENDCASE.

ENDFJRM. " visualizar_badi

&---------------------------------------------------------------------
& Form visualizar_exit
&---------------------------------------------------------------------
Visualizo el USER-EXIT.
----------------------------------------------------------------------
--P_REPID Nombre del programa.
--P_CF Linea de cdigo del programa.
----------------------------------------------------------------------
FJRM visualizar_exit USING p_repid LIKE sy-repid
p_cf LIKE ti_user_exit-cf.

DATA:
l_exit LIKE rs38l-name,
l_modname LIKE modact-name,
l_standard(3) TYPE c,
l_cf TYPE i,
l_linea(500) TYPE c.

DATA: BEGIN JF lt_cf JCCURS 0,
linea(500),
END JF lt_cf.

CLEAR: d010inc, modsap, modact.

Jbtengo el programa de control.
SELECT SINGLE
FRJM d010inc
WHERE include EQ p_repid.

IF sy-subrc NE 0.
No se trata de un INCLUDE.
MJVE p_repid TJ d010inc-master.
ENDIF.

SEARCH p_cf FJR c_enhance.

CHECK sy-subrc IS INITIAL.

REFRESH lt_cf.

l_cf = 500 - sy-fdpos.

MJVE p_cf+sy-fdpos(l_cf) TJ l_linea.

SPLIT l_linea AT space INTJ TABLE lt_cf.
Jbtengo la posicin del nmero del exit.
READ TABLE lt_cf INDEX 3.

TRANSLATE lt_cf USING ''' '.
CJNDENSE lt_cf NJ-GAPS.

Armo el nombre del exit.
CJNCATENATE 'EXIT' d010inc-master lt_cf INTJ l_exit
SEPARATED BY '_'.

Jbtengo la ampliacin.
SELECT SINGLE
FRJM modsap
WHERE member EQ l_exit.

CHECK sy-subrc IS INITIAL.

Verifico las modificaciones.
SELECT SINGLE
FRJM modact
WHERE member EQ modsap-name.

IF sy-subrc IS INITIAL.
Se encontr el proyecto para la ampliacin.
MJVE:
modact-name TJ l_modname,
c_std_implmnt TJ l_standard.

CALL FUNCTIJN 'MJD_CJMPJNENTS'
EXPJRTING
mode = 'SHJM'
modname = l_modname
p_standard = l_standard
EXCEPTIJNS
permission_failure = 1
not_found = 2
JTHERS = 3.

ELSE.
No hay proyecto para la ampliacin.
MJVE:
modsap-name TJ l_modname.

CALL FUNCTIJN 'MJD_SAP_HEAD'
EXPJRTING
mode = 'SHJM'
modname = l_modname
EXCEPTIJNS
attr_enqueued = 1
text_enqueued = 2
JTHERS = 3.

ENDIF.

ENDFJRM. " visualizar_exit

&---------------------------------------------------------------------
& Form buscar_field_exit
&---------------------------------------------------------------------
Busco los field-exit's de los campos de las DYNPRJ's.
----------------------------------------------------------------------
FJRM buscar_field_exit .

DATA: BEGIN JF lt_campo JCCURS 0,
repid LIKE sy-repid,
dnum LIKE d020s-dnum,
tabname LIKE dd03l-tabname,
fieldname LIKE dd03l-fieldname,
END JF lt_campo.

DATA: BEGIN JF lt_fe JCCURS 0,
cf(500),
END JF lt_fe.

DATA:
l_prog LIKE sy-repid,
lt_d020s LIKE d020s JCCURS 0 WITH HEADER LINE,
lt_d021s LIKE d021s JCCURS 0 WITH HEADER LINE,
lt_dd03l LIKE dd03l JCCURS 0 WITH HEADER LINE.

CHECK p_fdex IS NJT INITIAL.

CLEAR ti_fdex.
REFRESH: lt_d020s, lt_d021s, lt_dd03l, lt_fe.

MJVE: c_fdex TJ ti_fdex-tipo.
APPEND ti_fdex.

IF p_prog IS NJT INITIAL.
MJVE p_prog TJ l_prog.
ELSE.
MJVE tstc-pgmna TJ l_prog.
ENDIF.

Jbtengo las DYNPRJ del programa.
SELECT
FRJM d020s
INTJ CJRRESPJNDING FIELDS JF TABLE lt_d020s
WHERE prog EQ l_prog.

LJJP AT lt_d020s.

DESCRIBE TABLE ti_includes.
PERFJRM evitar_time_out USING sy-tfill.

REFRESH lt_d021s.

Jbtengo los campos de la DYNPRJ.
CALL FUNCTIJN 'RS_SCRP_GET_SCREEN_INFJS'
EXPJRTING
dynnr = lt_d020s-dnum
progname = lt_d020s-prog
TABLES
fieldlist = lt_d021s
EXCEPTIJNS
dynpro_does_not_exist = 1
no_field_list = 2
cancelled = 3
JTHERS = 4.

Recorro solo los campos de entrada/salida.
LJJP AT lt_d021s WHERE ityp = 'C'
JR ityp = 'N'
JR ityp = 'X'.

SEARCH lt_d021s-fnam FJR '-'.

IF sy-subrc IS INITIAL.

MJVE:
lt_d020s-prog TJ lt_campo-repid,
lt_d020s-dnum TJ lt_campo-dnum.

Separo el campo de la tabla o estructura.
SPLIT lt_d021s-fnam AT '-' INTJ lt_campo-tabname
lt_campo-fieldname.

APPEND lt_campo.

ENDIF.

ENDLJJP.
ENDLJJP.

CHECK lt_campo, IS NJT INITIAL.

SJRT lt_campo BY repid dnum tabname fieldname.
DELETE ADJACENT DUPLICATES FRJM lt_campo.

Jbtengo los elementos de datos.
SELECT
FRJM dd03l
INTJ CJRRESPJNDING FIELDS JF TABLE lt_dd03l
FJR ALL ENTRIES IN lt_campo
WHERE tabname EQ lt_campo-tabname
AND fieldname EQ lt_campo-fieldname.

SJRT lt_dd03l BY rollname.
DELETE ADJACENT DUPLICATES FRJM lt_dd03l.

LJJP AT lt_dd03l.

CLEAR: tddir, tddirs.

SELECT SINGLE
FRJM tddir
WHERE de EQ lt_dd03l-rollname.

CHECK sy-subrc IS INITIAL.

DESCRIBE TABLE ti_includes.
PERFJRM evitar_time_out USING sy-tfill.

IF tddir-activ EQ 'S'.
Selectivo en dynpros.
SELECT SINGLE
FRJM tddirs
WHERE de EQ lt_dd03l-rollname
AND prog EQ lt_d020s-prog.

CHECK sy-subrc IS INITIAL.
Verifico si se trata del programa en cuestin.
ENDIF.

Armo la FM.
CJNCATENATE 'FIELD_EXIT_' lt_dd03l-rollname INTJ lt_fe-cf.

IF tddirs-exitnr IS NJT INITIAL.
CJNCATENATE ti_user_exit-cf tddirs-exitnr INTJ lt_fe-cf
SEPARATED BY '_'.
ENDIF.

READ TABLE lt_fe WITH KEY cf = lt_fe-cf.

CHECK sy-subrc IS NJT INITIAL.
An no se encontr el field-exit.
APPEND lt_fe.
ENDLJJP.

LJJP AT lt_fe.
Cargo los field-exit's.
MJVE:
c_fdex TJ ti_fdex-tipo,
lt_fe-cf TJ ti_fdex-cf.
APPEND ti_fdex.

ENDLJJP.

ENDFJRM. " buscar_field_exit

&---------------------------------------------------------------------
& Form fibf
&---------------------------------------------------------------------
Visualizo la BTE.
----------------------------------------------------------------------
--P_CF Cdigo fuente
----------------------------------------------------------------------
FJRM fibf USING p_cf LIKE ti_bte-cf.

DATA:
l_fdpos TYPE sy-fdpos,
l_cf TYPE i,
l_tipo TYPE c,
l_linea(500) TYPE c.

SEARCH p_cf FJR c_bte.

IF sy-subrc IS INITIAL.
'JPEN_FI_PERFJRM'.
l_fdpos = sy-fdpos + 16.

l_cf = 500 - l_fdpos.

MJVE p_cf+l_fdpos(l_cf) TJ l_linea.

MJVE l_linea+9(1) TJ l_tipo.

ELSE.

SEARCH p_cf FJR c_bte1.

CHECK sy-subrc IS INITIAL.
'JUTBJUND_CALL'.
l_fdpos = sy-fdpos + 14.

l_cf = 500 - l_fdpos.

MJVE p_cf+l_fdpos(l_cf) TJ l_linea.

MJVE l_linea+9(1) TJ l_tipo.

ENDIF.

IF l_tipo IS NJT INITIAL.

PERFJRM visualizar_bte USING l_tipo
l_linea.

ELSE.
CALL TRANSACTIJN 'FIBF'.
ENDIF.

ENDFJRM. " fibf

&---------------------------------------------------------------------
& Form breakpoint
&---------------------------------------------------------------------
Seteo los breakpoint para las intancias de las BADI's
y para los eventos de las BTE's.
----------------------------------------------------------------------
FJRM breakpoint .

TYPES: BEGIN JF showbreakpointstruc.
INCLUDE TYPE breakpoint.
TYPES: mainprog TYPE trdir-name,
text(72),
mark(1).
TYPES: END JF showbreakpointstruc.
DATA: showbreakpointtab TYPE TABLE JF showbreakpointstruc.

IF p_badi IS NJT INITIAL AND p_handl IS NJT INITIAL.
Break en el mtodo GET_INSTANCE de la clase CL_EXITHANDLER para
obtener la definiciones de las BADI's.
CALL FUNCTIJN 'RS_SET_BREAKPJINT'
EXPJRTING
index = '25'
program = 'CL_EXITHANDLER================CM001'
mainprogram = 'CL_EXITHANDLER================CP'
EXCEPTIJNS
not_executed = 1
JTHERS = 2.
ENDIF.

IF p_bte IS NJT INITIAL.
Break en el mdulo de funciones BF_FUNCTIJNS_FIND para obtener los
eventos de las BTE's de proceso.
CALL FUNCTIJN 'RS_SET_BREAKPJINT'
EXPJRTING
index = '15'
program = 'LITSRU02'
mainprogram = 'SAPLITSR'
EXCEPTIJNS
not_executed = 1
JTHERS = 2.

Break en el mdulo de funciones PC_FUNCTIJN_FIND para obtener los
eventos de las P&S (publicacin y suscripcin) BTE's.
CALL FUNCTIJN 'RS_SET_BREAKPJINT'
EXPJRTING
index = '18'
program = 'LITSRU07'
mainprogram = 'SAPLITSR'
EXCEPTIJNS
not_executed = 1
JTHERS = 2.
ENDIF.

IF p_sust IS NJT INITIAL.
Break en el mdulo de funciones G_VSR_SUBSTITUTIJN_CALL del cual se
desprende el llamado a las sustituciones.
CALL FUNCTIJN 'RS_SET_BREAKPJINT'
EXPJRTING
index = '42'
program = 'LGBL5U04'
mainprogram = 'SAPLGBL5'
EXCEPTIJNS
not_executed = 1
JTHERS = 2.

Break en el mdulo de funciones G_VSR_MULTI_SUBSTITUTIJN_CALL del cual
se desprende el llamado a las sustituciones.
CALL FUNCTIJN 'RS_SET_BREAKPJINT'
EXPJRTING
index = '21'
program = 'LGBL5U09'
mainprogram = 'SAPLGBL5'
EXCEPTIJNS
not_executed = 1
JTHERS = 2.
ENDIF.

IF p_val IS NJT INITIAL.
Break en el mdulo de funciones G_VSR_VALIDATIJN_CALL del cual se
desprende el llamado a las validaciones.
CALL FUNCTIJN 'RS_SET_BREAKPJINT'
EXPJRTING
index = '30'
program = 'LGBL5U01'
mainprogram = 'SAPLGBL5'
EXCEPTIJNS
not_executed = 1
JTHERS = 2.

Break en el mdulo de funciones G_VSR_MULTI_VALIDATIJN_CALL del cual
se desprende el llamado a las validaciones.
CALL FUNCTIJN 'RS_SET_BREAKPJINT'
EXPJRTING
index = '15'
program = 'LGBL5U08'
mainprogram = 'SAPLGBL5'
EXCEPTIJNS
not_executed = 1
JTHERS = 2.
ENDIF.


Visualizo todos los breakpoint.
CALL FUNCTIJN 'RS_SHJW_BREAKPJINTS'
EXPJRTING
objektinfp = ''
objekttypp = 'PG'
text1p = ' '
text2p = ' '
text3p = ' '
TABLES
breakpoints = showbreakpointtab.

ENDFJRM. " breakpoint

&---------------------------------------------------------------------
& Form construir_catalogo_badi
&---------------------------------------------------------------------
Construir catalogo de campos para ALV.
----------------------------------------------------------------------
FJRM construir_catalogo_badi .

DATA:
l_repid LIKE sy-repid.

REFRESH: ti_cat.

l_repid = sy-repid.

CALL FUNCTIJN 'REUSE_ALV_FIELDCATALJG_MERGE'
EXPJRTING
i_program_name = l_repid
i_internal_tabname = 'TI_BADI'
i_inclname = l_repid
CHANGING
ct_fieldcat = ti_cat
EXCEPTIJNS
inconsistent_interface = 1
program_error = 2
JTHERS = 3.

Asignar atributos de campo en el catalogo de reporte ALV
PERFJRM asignar_campo_a_catalogo TABLES ti_cat
USING:

'SEL' 'X' 'X' 'X' ' ' ' ' 'X' 'X' ' ' ' ' ' ',
'PRJGRAMA' 'X' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' ' c_text_01,
'TIPJ' 'X' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_05,
'NIVEL' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' c_text_02,
'BREAK' 'X' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_07,
'LINEA' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' c_text_03,
'CF' ' ' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_04.

ENDFJRM. " construir_catalogo_badi

&---------------------------------------------------------------------
& Form construir_catalogo_bte
&---------------------------------------------------------------------
Construir catalogo de campos para ALV.
----------------------------------------------------------------------
FJRM construir_catalogo_bte .

DATA:
l_repid LIKE sy-repid.

REFRESH: ti_cat.

l_repid = sy-repid.

CALL FUNCTIJN 'REUSE_ALV_FIELDCATALJG_MERGE'
EXPJRTING
i_program_name = l_repid
i_internal_tabname = 'TI_BTE'
i_inclname = l_repid
CHANGING
ct_fieldcat = ti_cat
EXCEPTIJNS
inconsistent_interface = 1
program_error = 2
JTHERS = 3.

Asignar atributos de campo en el catalogo de reporte ALV
PERFJRM asignar_campo_a_catalogo TABLES ti_cat
USING:

'SEL' 'X' 'X' 'X' ' ' ' ' 'X' 'X' ' ' ' ' ' ',
'PRJGRAMA' 'X' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' ' c_text_01,
'TIPJ' 'X' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_05,
'NIVEL' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' c_text_02,
'BREAK' 'X' ' ' ' ' 'X' ' ' ' ' ' ' ' ' 'X' c_text_07,
'LINEA' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' c_text_03,
'CF' ' ' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_04.

ENDFJRM. " construir_catalogo_bte

&---------------------------------------------------------------------
& Form construir_catalogo_FDEX
&---------------------------------------------------------------------
Construir catalogo de campos para ALV.
----------------------------------------------------------------------
FJRM construir_catalogo_fdex .

DATA:
l_repid LIKE sy-repid.

REFRESH: ti_cat.

l_repid = sy-repid.

CALL FUNCTIJN 'REUSE_ALV_FIELDCATALJG_MERGE'
EXPJRTING
i_program_name = l_repid
i_internal_tabname = 'TI_FDEX'
i_inclname = l_repid
CHANGING
ct_fieldcat = ti_cat
EXCEPTIJNS
inconsistent_interface = 1
program_error = 2
JTHERS = 3.

Asignar atributos de campo en el catalogo de reporte ALV
PERFJRM asignar_campo_a_catalogo TABLES ti_cat
USING:

'SEL' 'X' 'X' 'X' ' ' ' ' 'X' 'X' ' ' ' ' ' ',
'TIPJ' 'X' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_05,
'CF' ' ' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_04.

ENDFJRM. " construir_catalogo_FDEX

&---------------------------------------------------------------------
& Form cargar_break
&---------------------------------------------------------------------
Cargo los break-points en las tablas correspondientes.
----------------------------------------------------------------------
FJRM cargar_break .

TYPES: BEGIN JF showbreakpointstruc.
INCLUDE TYPE breakpoint.
TYPES: mainprog TYPE trdir-name,
text(72),
mark(1).
TYPES: END JF showbreakpointstruc.

DATA:
l_tabix TYPE sy-tabix,
l_line TYPE breakpoint-line,
l_program TYPE breakpoint-program,
wa_break TYPE showbreakpointstruc,
lt_break TYPE TABLE JF showbreakpointstruc.

Jbtengo todos los breakpoints marcados.
CALL FUNCTIJN 'RS_GET_ALL_BREAKPJINTS'
TABLES
breakpointtab = lt_break.

CHECK lt_break, IS NJT INITIAL.

IF p_ue IS NJT INITIAL.
LJJP AT ti_user_exit.
l_tabix = sy-tabix.

MJVE:
ti_user_exit-linea TJ l_line,
ti_user_exit-programa TJ l_program.

READ TABLE lt_break INTJ wa_break
WITH KEY program = l_program
line = l_line.

IF sy-subrc IS INITIAL.
MJVE icon_breakpoint TJ ti_user_exit-break.
ELSE.
MJVE icon_space TJ ti_user_exit-break.
ENDIF.
MJDIFY ti_user_exit INDEX l_tabix.
ENDLJJP.
ENDIF.

IF p_badi IS NJT INITIAL.
LJJP AT ti_badi.
l_tabix = sy-tabix.

MJVE:
ti_badi-linea TJ l_line,
ti_badi-programa TJ l_program.

READ TABLE lt_break INTJ wa_break
WITH KEY program = l_program
line = l_line.

IF sy-subrc IS INITIAL.
MJVE icon_breakpoint TJ ti_badi-break.
ELSE.
MJVE icon_space TJ ti_badi-break.
ENDIF.
MJDIFY ti_badi INDEX l_tabix.
ENDLJJP.
ENDIF.

IF p_bte IS NJT INITIAL.
LJJP AT ti_bte.
l_tabix = sy-tabix.

MJVE:
ti_bte-linea TJ l_line,
ti_bte-programa TJ l_program.

READ TABLE lt_break INTJ wa_break
WITH KEY program = l_program
line = l_line.

IF sy-subrc IS INITIAL.
MJVE icon_breakpoint TJ ti_bte-break.
ELSE.
MJVE icon_space TJ ti_bte-break.
ENDIF.
MJDIFY ti_bte INDEX l_tabix.
ENDLJJP.
ENDIF.

ENDFJRM. " cargar_break

&---------------------------------------------------------------------
& Form asignar_break
&---------------------------------------------------------------------
Asigno el break a la linea.
----------------------------------------------------------------------
--P_PRJGRAMA text
--P_LINEA text
--P_BREAK text
----------------------------------------------------------------------
FJRM asignar_break USING p_programa TYPE sy-repid
p_linea LIKE ti_bte-linea
p_break TYPE icon-id.

TYPES: BEGIN JF showbreakpointstruc.
INCLUDE TYPE breakpoint.
TYPES: mainprog TYPE trdir-name,
text(72),
mark(1).
TYPES: END JF showbreakpointstruc.
DATA: showbreakpointtab TYPE TABLE JF showbreakpointstruc.

DATA:
l_tabix TYPE sy-tabix,
l_line TYPE breakpoint-line,
l_program TYPE breakpoint-program,
wa_break TYPE showbreakpointstruc,
lt_break TYPE TABLE JF showbreakpointstruc.

Jbtengo todos los breakpoints marcados.
CALL FUNCTIJN 'RS_GET_ALL_BREAKPJINTS'
TABLES
breakpointtab = lt_break.

SELECT SINGLE
FRJM d010inc
WHERE include = p_programa.

IF sy-subrc IS NJT INITIAL.
MJVE p_programa TJ d010inc-master.
ENDIF.

MJVE:
p_linea TJ l_line,
p_programa TJ l_program.

READ TABLE lt_break INTJ wa_break
WITH KEY program = l_program
line = l_line.

IF sy-subrc IS INITIAL.
Borro el break.
CALL FUNCTIJN 'RS_DELETE_BREAKPJINT'
EXPJRTING
index = p_linea
mainprog = d010inc-master
program = p_programa.
ELSE.
Seteo el breakpoint.
CALL FUNCTIJN 'RS_SET_BREAKPJINT'
EXPJRTING
index = p_linea
program = p_programa
mainprogram = d010inc-master
EXCEPTIJNS
not_executed = 1
JTHERS = 2.
ENDIF.

Visualizo todos los breakpoint.
CALL FUNCTIJN 'RS_SHJW_BREAKPJINTS'
EXPJRTING
objektinfp = ''
objekttypp = 'PG'
text1p = ' '
text2p = ' '
text3p = ' '
TABLES
breakpoints = showbreakpointtab.

ENDFJRM. " asignar_break

&---------------------------------------------------------------------
& Form buscar_user_exit
&---------------------------------------------------------------------
Jbtengo los user-exits.
----------------------------------------------------------------------
FJRM buscar_user_exit .

IF p_prog IS INITIAL.
MJVE tstc-pgmna TJ p_prog.
ENDIF.

PERFJRM get_objects. "Get Jbjects

ENDFJRM. " buscar_user_exit

&---------------------------------------------------------------------
& Form get_objects
&---------------------------------------------------------------------
Get Jbjects
----------------------------------------------------------------------
FJRM get_objects.

DATA:
l_fname LIKE rs38l-name,
l_group LIKE rs38l-area,
l_include LIKE rs38l-include,
l_namespace LIKE rs38l-namespace,
l_str_area LIKE rs38l-str_area.

DATA: v_include LIKE rodiobj-iobjnm.
DATA: e_t_include TYPE STANDARD TABLE JF abapsource WITH HEADER LINE.
DATA:
l_line TYPE string,
l_tabix LIKE sy-tabix.

SELECT obj_name devclass
INTJ TABLE ti_tadir
FRJM tadir
WHERE pgmid = 'R3TR' AND
object = 'PRJG' AND
obj_name = p_prog.

IF sy-subrc = 0.

SJRT ti_tadir BY obj_name devclass.

SELECT obj_name
INTJ TABLE ti_jtab
FRJM tadir
FJR ALL ENTRIES IN ti_tadir
WHERE pgmid = 'R3TR' AND
object = 'SMJD' AND
devclass = ti_tadir-devclass.

IF sy-subrc = 0.
SJRT ti_jtab BY obj_name.
ENDIF.
ENDIF.

- Get UserExit names
LJJP AT ti_jtab.

SELECT name member
INTJ (ti_final-name, ti_final-member)
FRJM modsap
WHERE name = ti_jtab-obj_name AND
typ = 'E'.

APPEND ti_final.
CLEAR ti_final.
ENDSELECT.
ENDLJJP.
- Process it_final contents.
LJJP AT ti_final.
l_tabix = sy-tabix.
CLEAR:
l_fname, l_group, l_include, l_namespace, l_str_area.

l_fname = ti_final-member.

CALL FUNCTIJN 'FUNCTIJN_EXISTS'
EXPJRTING
funcname = l_fname
IMPJRTING
group = l_group
include = l_include
namespace = l_namespace
str_area = l_str_area
EXCEPTIJNS
function_not_exist = 1
JTHERS = 2.

IF sy-subrc = 0.
IF NJT l_include IS INITIAL.
- Get Source code of include.
CLEAR: v_include, e_t_include, e_t_include,.
v_include = l_include.
CALL FUNCTIJN 'MU_INCLUDE_GET'
EXPJRTING
i_include = v_include
TABLES
e_t_include = e_t_include.

LJJP AT e_t_include.
IF e_t_include-line CS 'INCLUDE'.
CLEAR l_line.
l_line = e_t_include-line.
CJNDENSE l_line NJ-GAPS.
TRANSLATE l_line USING '. '.
l_line = l_line+7.
ti_final-include = l_line.
ti_final-programa = l_include.
MJDIFY ti_final INDEX l_tabix
TRANSPJRTING include programa.
ENDIF.
ENDLJJP.

CLEAR tftit.
SELECT SINGLE stext
INTJ ti_final-stext
FRJM tftit
WHERE spras = sy-langu AND
funcname = ti_final-member.
MJDIFY ti_final INDEX l_tabix TRANSPJRTING stext.
ENDIF.
ENDIF.
ENDLJJP.

ENDFJRM. " get_objects

&---------------------------------------------------------------------
& Form construir_catalogo_uexit
&---------------------------------------------------------------------
Construir catalogo de campos para ALV
----------------------------------------------------------------------
FJRM construir_catalogo_uexit .

DATA:
l_repid LIKE sy-repid.

REFRESH: ti_cat.

l_repid = sy-repid.

CALL FUNCTIJN 'REUSE_ALV_FIELDCATALJG_MERGE'
EXPJRTING
i_program_name = l_repid
i_internal_tabname = 'TI_FINAL'
i_inclname = l_repid
CHANGING
ct_fieldcat = ti_cat
EXCEPTIJNS
inconsistent_interface = 1
program_error = 2
JTHERS = 3.

Asignar atributos de campo en el catalogo de reporte ALV
PERFJRM asignar_campo_a_catalogo TABLES ti_cat
USING:

'SEL' 'X' 'X' 'X' ' ' ' ' 'X' 'X' ' ' ' ' ' ',
'NAME' 'X' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' ',
'MEMBER' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'STEXT' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'INCLUDE' ' ' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' ',
'PRJGRAMA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'X' ' ' ' '.

ENDFJRM. " construir_catalogo_uexit

&---------------------------------------------------------------------
& Form visualizar_ampliacion
&---------------------------------------------------------------------
Visualizo la ampliacin de un exit.
----------------------------------------------------------------------
FJRM visualizar_ampliacion .

DATA:
l_ret TYPE c,
l_member TYPE modsap-member,
lt_fields TYPE sval JCCURS 0 WITH HEADER LINE.

MJVE:
'MJDSAP' TJ lt_fields-tabname,
'MEMBER' TJ lt_fields-fieldname,
'User-Exit' TJ lt_fields-fieldtext.

APPEND lt_fields.

CALL FUNCTIJN 'PJPUP_GET_VALUES'
EXPJRTING
popup_title = 'Ingrese user-exit:'
IMPJRTING
returncode = l_ret
TABLES
fields = lt_fields
EXCEPTIJNS
error_in_fields = 1
JTHERS = 2.

Verifico que no haya cancelado.
CHECK l_ret NE 'A'.

READ TABLE lt_fields INDEX 1.

CHECK sy-subrc IS INITIAL.

IF lt_fields-value IS INITIAL.
El exit de funcin & no existe
MESSAGE e015(enhancement) WITH lt_fields-value.
ELSE.
MJVE lt_fields-value TJ l_member.
ENDIF.

SELECT SINGLE
FRJM modsap
WHERE member EQ l_member.

IF sy-subrc IS INITIAL.

Visualizo la ampliacin.
CALL FUNCTIJN 'MJD_SAP_HEAD'
EXPJRTING
mode = 'SHJM'
modname = modsap-name
EXCEPTIJNS
attr_enqueued = 1
text_enqueued = 2
JTHERS = 3.

ELSE.
El exit de funcin & no existe
MESSAGE e015(enhancement) WITH l_member.
ENDIF.

ENDFJRM. " visualizar_ampliacion

&---------------------------------------------------------------------
& Form visualizar_bte
&---------------------------------------------------------------------
Visualizo la BTE.
----------------------------------------------------------------------
--P_TIPJ Tipo de BTE
--P_LINEA Evento o proceso.
----------------------------------------------------------------------
FJRM visualizar_bte USING p_tipo TYPE c
p_linea.

RANGES:
r_event FJR tbe01-event,
r_procs FJR tps01-procs.

REFRESH: r_event, r_procs.

CASE p_tipo.
WHEN 'E'.
Interface de publicacin y suscripcin.
MJVE:
'I' TJ r_event-sign,
'EQ' TJ r_event-option,
p_linea(8) TJ r_event-low.
APPEND r_event.

SUBMIT rfopfi00
WITH event IN r_event
WITH xonlk = ' '
AND RETURN.
WHEN 'P'.
Interface de proceso.
MJVE:
'I' TJ r_procs-sign,
'EQ' TJ r_procs-option,
p_linea(8) TJ r_procs-low.
APPEND r_procs.

SUBMIT rfopfi01
WITH procs IN r_procs
WITH xonlk = ' '
AND RETURN.
WHEN JTHERS.
Do nothing !!
ENDCASE.

ENDFJRM. " visualizar_bte

&---------------------------------------------------------------------
& Form cargar_bte
&---------------------------------------------------------------------
Ingreso la BTE que quiero visualizar.
----------------------------------------------------------------------
--P_TIPJ Tipo de BTE
----------------------------------------------------------------------
FJRM cargar_bte USING p_tipo TYPE c.

DATA:
l_linea(500) TYPE c.

DATA:
l_ret TYPE c,
lt_fields TYPE sval JCCURS 0 WITH HEADER LINE.

CASE p_tipo.
WHEN 'E'.
Interface de publicacin y suscripcin.
MJVE:
'TBE01' TJ lt_fields-tabname,
'EVENT' TJ lt_fields-fieldname.
WHEN 'P'.
Interface de proceso.
MJVE:
'TPS01' TJ lt_fields-tabname,
'PRJCS' TJ lt_fields-fieldname.
WHEN JTHERS.
Do nothing !!
ENDCASE.
APPEND lt_fields.

CALL FUNCTIJN 'PJPUP_GET_VALUES'
EXPJRTING
popup_title = 'Ingrese BTE:'
IMPJRTING
returncode = l_ret
TABLES
fields = lt_fields
EXCEPTIJNS
error_in_fields = 1
JTHERS = 2.

Verifico que no haya cancelado.
CHECK l_ret NE 'A'.

READ TABLE lt_fields INDEX 1.

CHECK sy-subrc IS INITIAL.

MJVE lt_fields-value TJ l_linea.

PERFJRM visualizar_bte USING p_tipo
l_linea.

ENDFJRM. " cargar_bte

&---------------------------------------------------------------------
& Form visualizar_interface
&---------------------------------------------------------------------
Visualizo la definicin de la BADI que corresponde a la
interface.
----------------------------------------------------------------------
FJRM visualizar_interface .

DATA:
l_linea(500) TYPE c.

DATA:
l_ret TYPE c,
l_inter_name TYPE sxs_inter-inter_name,
lt_fields TYPE sval JCCURS 0 WITH HEADER LINE.

Interface.
MJVE:
'SXS_INTER' TJ lt_fields-tabname,
'INTER_NAME' TJ lt_fields-fieldname.
APPEND lt_fields.

CALL FUNCTIJN 'PJPUP_GET_VALUES'
EXPJRTING
popup_title = 'Ingrese interface:'
IMPJRTING
returncode = l_ret
TABLES
fields = lt_fields
EXCEPTIJNS
error_in_fields = 1
JTHERS = 2.

Verifico que no haya cancelado.
CHECK l_ret NE 'A'.

READ TABLE lt_fields INDEX 1.

CHECK sy-subrc IS INITIAL.

TRANSLATE lt_fields-value TJ UPPER CASE.
MJVE lt_fields-value TJ l_inter_name.

Jbtengo a partir de la interface la definicin de la BADI.
SELECT SINGLE
FRJM sxs_inter
WHERE inter_name EQ l_inter_name.

IF sy-subrc IS INITIAL.
Visualizo la definicin de la BADI.
CALL FUNCTIJN 'SXJ_BADI_SHJW'
EXPJRTING
exit_name = sxs_inter-exit_name
EXCEPTIJNS
action_canceled = 1
access_failure = 2
badi_not_exixting = 3
JTHERS = 4.

ELSE.
El interface & es errneo.
MESSAGE e226(enhancement) WITH l_inter_name.
ENDIF.

ENDFJRM. "visualizar_interface

&---------------------------------------------------------------------
& Form buscar_sustituciones
&---------------------------------------------------------------------
Jbtengo las sustituciones creadas.
----------------------------------------------------------------------
FJRM buscar_sustituciones .

CHECK p_sust IS NJT INITIAL.

SELECT
INTJ CJRRESPJNDING FIELDS JF TABLE ti_sust
FRJM gb922.

ENDFJRM. " buscar_sustituciones

&---------------------------------------------------------------------
& Form construir_catalogo_sust
&---------------------------------------------------------------------
Construir catalogo de campos para ALV.
----------------------------------------------------------------------
FJRM construir_catalogo_sust .

DATA:
l_repid LIKE sy-repid.

REFRESH: ti_cat.

l_repid = sy-repid.

CALL FUNCTIJN 'REUSE_ALV_FIELDCATALJG_MERGE'
EXPJRTING
i_program_name = l_repid
i_internal_tabname = 'TI_SUST'
i_inclname = l_repid
CHANGING
ct_fieldcat = ti_cat
EXCEPTIJNS
inconsistent_interface = 1
program_error = 2
JTHERS = 3.

Asignar atributos de campo en el catalogo de reporte ALV
PERFJRM asignar_campo_a_catalogo TABLES ti_cat
USING:

'SEL' 'X' 'X' 'X' ' ' ' ' 'X' 'X' ' ' ' ' ' ',
'SUBSTID' 'X' ' ' 'X' 'X' ' ' ' ' ' ' ' ' ' ' ' ',
'SUBSEQNR' 'X' ' ' 'X' 'X' ' ' ' ' ' ' ' ' ' ' ' ',
'CJNSEQNR' 'X' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'SUBSTAB' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'SUBSFIELD' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'SUBSVAL' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'EXITSUBST' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '.

ENDFJRM. " construir_catalogo_sust

&---------------------------------------------------------------------
& Form TJP_JF_PAGE_SUST
&---------------------------------------------------------------------
Mostrar cabecera de pgina
----------------------------------------------------------------------
FJRM top_of_page_sust.

DATA:
l_tfill_inc(20) TYPE c,
l_tfill_cant(20) TYPE c.

DESCRIBE TABLE ti_sust.
WRITE sy-tfill TJ l_tfill_cant.
CJNDENSE l_tfill_cant NJ-GAPS.

Construir encabezado del reporte
PERFJRM set_header USING l_tfill_cant
l_tfill_inc
'Sustituciones'.

ENDFJRM. "TJP_JF_PAGE_SUST

&---------------------------------------------------------------------
& Form visualizar_sust
&---------------------------------------------------------------------
Visualizo la sustitucin.
----------------------------------------------------------------------
--P_SUBSTID Nombre de la sustitucin
--P_SUBSEQNR Nmero de paso de la sustitucin
----------------------------------------------------------------------
FJRM visualizar_sust USING p_substid TYPE gb922-substid
p_subseqnr TYPE gb922-subseqnr.

DATA:
l_valuser LIKE gb31-valuser,
l_valeven LIKE gb31-valevent.

CALL FUNCTIJN 'G_BJJL_EXIST_SUBSTITUTIJN'
EXPJRTING
substitution = p_substid
IMPJRTING
valevent_fnd = l_valeven
valuser_fnd = l_valuser
EXCEPTIJNS
not_found = 1
JTHERS = 4.

CALL FUNCTIJN 'G_SUBSTITUTIJN_ENVIRJNMENT'
EXPJRTING
bsubevent = 'X'
bsubuser = 'X'
subevent = l_valeven
substid = p_substid
subuser = l_valuser
view_only = 'X'
action_mode = 'V'
skip_first_screen = 'X'
step = p_subseqnr
EXCEPTIJNS
not_found = 1
JTHERS = 2.

ENDFJRM. " visualizar_sust

&---------------------------------------------------------------------
& Form buscar_validaciones
&---------------------------------------------------------------------
Jbtengo las validaciones creadas.
----------------------------------------------------------------------
FJRM buscar_validaciones .

CHECK p_val IS NJT INITIAL.

SELECT
INTJ CJRRESPJNDING FIELDS JF TABLE ti_val
FRJM gb931.

ENDFJRM. " buscar_validaciones

&---------------------------------------------------------------------
& Form construir_catalogo_val
&---------------------------------------------------------------------
Construir catalogo de campos para ALV.
----------------------------------------------------------------------
FJRM construir_catalogo_val .

DATA:
l_repid LIKE sy-repid.

REFRESH: ti_cat.

l_repid = sy-repid.

CALL FUNCTIJN 'REUSE_ALV_FIELDCATALJG_MERGE'
EXPJRTING
i_program_name = l_repid
i_internal_tabname = 'TI_VAL'
i_inclname = l_repid
CHANGING
ct_fieldcat = ti_cat
EXCEPTIJNS
inconsistent_interface = 1
program_error = 2
JTHERS = 3.

Asignar atributos de campo en el catalogo de reporte ALV
PERFJRM asignar_campo_a_catalogo TABLES ti_cat
USING:

'SEL' 'X' 'X' 'X' ' ' ' ' 'X' 'X' ' ' ' ' ' ',
'VALID' 'X' ' ' 'X' 'X' ' ' ' ' ' ' ' ' ' ' ' ',
'VALSEQNR' 'X' ' ' 'X' 'X' ' ' ' ' ' ' ' ' ' ' ' ',
'CJNDID' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'CHECKID' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '.

ENDFJRM. " construir_catalogo_val

&---------------------------------------------------------------------
& Form TJP_JF_PAGE_VAL
&---------------------------------------------------------------------
Mostrar cabecera de pgina
----------------------------------------------------------------------
FJRM top_of_page_val.

DATA:
l_tfill_inc(20) TYPE c,
l_tfill_cant(20) TYPE c.

DESCRIBE TABLE ti_val.
WRITE sy-tfill TJ l_tfill_cant.
CJNDENSE l_tfill_cant NJ-GAPS.

Construir encabezado del reporte
PERFJRM set_header USING l_tfill_cant
l_tfill_inc
'Validaciones'.

ENDFJRM. "TJP_JF_PAGE_VAL
&---------------------------------------------------------------------
& Form visualizar_val
&---------------------------------------------------------------------
Visualizo la validacin.
----------------------------------------------------------------------
--P_VALID Validacin
--P_VALSEQNR Nmero secuencial de una etapa de validacin
----------------------------------------------------------------------
FJRM visualizar_val USING p_valid TYPE gb931-valid
p_valseqnr TYPE gb931-valseqnr.

DATA:
l_valuser LIKE gb31-valuser,
l_valeven LIKE gb31-valevent.

CALL FUNCTIJN 'G_BJJL_EXIST_VALIDATIJN'
EXPJRTING
validation = p_valid
IMPJRTING
valuser_fnd = l_valuser
valevent_fnd = l_valeven
EXCEPTIJNS
not_found = 1
null_id = 2.

CALL FUNCTIJN 'G_VALIDATIJN_ENVIRJNMENT'
EXPJRTING
action_mode = 'V'
skip_first_screen = 'X'
bvalevent = 'X'
bvaluser = 'X'
valid = p_valid
valuser = l_valuser
valevent = l_valeven
view_only = 'X'
step = p_valseqnr
EXCEPTIJNS
not_found = 1
JTHERS = 2.

ENDFJRM. " visualizar_val

&---------------------------------------------------------------------
& Form visualizar_proyecto
&---------------------------------------------------------------------
Visualizo el proyecto asosiado a una ampliacin.
----------------------------------------------------------------------
FJRM visualizar_proyecto .

DATA:
l_ret TYPE c,
l_name TYPE modsap-name,
l_member TYPE modact-member,
l_modname TYPE modact-name,
l_standard(3) TYPE c,
lt_fields TYPE sval JCCURS 0 WITH HEADER LINE.

MJVE:
'MJDSAP' TJ lt_fields-tabname,
'NAME' TJ lt_fields-fieldname.

APPEND lt_fields.

CALL FUNCTIJN 'PJPUP_GET_VALUES'
EXPJRTING
popup_title = 'Ingrese ampliacin:'
IMPJRTING
returncode = l_ret
TABLES
fields = lt_fields
EXCEPTIJNS
error_in_fields = 1
JTHERS = 2.

Verifico que no haya cancelado.
CHECK l_ret NE 'A'.

READ TABLE lt_fields INDEX 1.

CHECK sy-subrc IS INITIAL.

IF lt_fields-value IS INITIAL.
La ampliacin & no existe
MESSAGE e012(enhancement) WITH lt_fields-value.
ELSE.
MJVE lt_fields-value TJ l_name.
ENDIF.

SELECT SINGLE
FRJM modsap
WHERE name EQ l_name.

IF sy-subrc IS INITIAL.

MJVE l_name TJ l_member.

SELECT SINGLE
FRJM modact
WHERE member EQ l_member.

IF sy-subrc IS INITIAL.
Se encontr el proyecto para la ampliacin.
MJVE:
modact-name TJ l_modname,
c_std_implmnt TJ l_standard.

CALL FUNCTIJN 'MJD_CJMPJNENTS'
EXPJRTING
mode = 'SHJM'
modname = l_modname
p_standard = l_standard
EXCEPTIJNS
permission_failure = 1
not_found = 2
JTHERS = 3.
ELSE.
Indicar un proyecto de ampliacin
MESSAGE e398(00)
WITH 'La ampliacin ' l_name ' no tiene proyecto.'.
ENDIF.

ELSE.
La ampliacin & no existe
MESSAGE e012(enhancement) WITH lt_fields-value.
ENDIF.

ENDFJRM. " visualizar_proyecto

&---------------------------------------------------------------------
& Form buscar_punto_ampliacin
&---------------------------------------------------------------------
Jbtengo los puntos de ampliacin ya implementados.
----------------------------------------------------------------------
FJRM buscar_punto_ampliacion .

- VERIFICA SI EN LA LINEA DEL PRJGRAMA EXISTE ALGUN PUNTJ DE
- AMPLIACIJN.
SEARCH ti_programa-cf FJR c_enh1.
- SE ENCJNTRJ UN PUNTJ DE AMPLIACIJN Y SE VERIFICA SI LA LINEA NJ EST
- CJMENTADA.
IF sy-subrc EQ 0
AND ti_programa-cf+0(1) NE c_comentario.

- VERIFICJ QUE NJ TRAIGA LJS INCLUDE DEL GRUPJ DE FUNCIJN.
SEARCH ti_programa-cf FJR c_include.
CHECK sy-subrc NE 0.
- VERIFICJ QUE NJ TRAIGA LJS ENDENHANCEMENT.
SEARCH ti_programa-cf FJR c_endenh.
CHECK sy-subrc NE 0.

- VERIFICJ QUE NJ TRAIGA LJS END-ENHANCEMENT-SECTIJN.
SEARCH ti_programa-cf FJR c_endenh1.
CHECK sy-subrc NE 0.

CLEAR ti_enh.
- REMUEVE ESPACIJS EN EL INICIJ DEL STRING.
SHIFT ti_programa-cf LEFT DELETING LEADING space.
MJVE: ti_includes-nome TJ ti_enh-programa,
c_enht TJ ti_enh-tipo,
sy-tabix TJ ti_enh-linea,
ti_programa-cf TJ ti_enh-cf,
ti_includes-nivel TJ ti_enh-nivel.
APPEND ti_enh.
ELSE.

- VERIFICA SI EN LA LINEA DEL PRJGRAMA EXISTE ALGUN PUNTJ DE
- AMPLIACIJN.
SEARCH ti_programa-cf FJR c_enh2.
- SE ENCJNTRJ UN PUNTJ DE AMPLIACIJN Y SE VERIFICA SI LA LINEA NJ EST
- CJMENTADA.
IF sy-subrc EQ 0
AND ti_programa-cf+0(1) NE c_comentario.

- VERIFICJ QUE NJ TRAIGA LJS ENDENHANCEMENT.
SEARCH ti_programa-cf FJR c_endenh.
CHECK sy-subrc NE 0.

- VERIFICJ QUE NJ TRAIGA LJS END-ENHANCEMENT-SECTIJN.
SEARCH ti_programa-cf FJR c_endenh1.
CHECK sy-subrc NE 0.

CLEAR ti_enh.
- REMUEVE ESPACIJS EN EL INICIJ DEL STRING.
SHIFT ti_programa-cf LEFT DELETING LEADING space.
MJVE: ti_includes-nome TJ ti_enh-programa,
c_enht TJ ti_enh-tipo,
sy-tabix TJ ti_enh-linea,
ti_programa-cf TJ ti_enh-cf,
ti_includes-nivel TJ ti_enh-nivel.
APPEND ti_enh.
ELSE.

- VERIFICA SI EN LA LINEA DEL PRJGRAMA EXISTE ALGUN PUNTJ DE
- AMPLIACIJN.
SEARCH ti_programa-cf FJR c_enh.
- SE ENCJNTRJ UN PUNTJ DE AMPLIACIJN Y SE VERIFICA SI LA LINEA NJ EST
- CJMENTADA.
IF sy-subrc EQ 0
AND ti_programa-cf+0(1) NE c_comentario.

- VERIFICJ QUE TRAIGA LJS ENHANCEMENT.
CHECK ti_programa-cf(11) EQ c_enh.

CLEAR ti_enh.
- REMUEVE ESPACIJS EN EL INICIJ DEL STRING.
SHIFT ti_programa-cf LEFT DELETING LEADING space.
MJVE: ti_includes-nome TJ ti_enh-programa,
c_enht TJ ti_enh-tipo,
sy-tabix TJ ti_enh-linea,
ti_programa-cf TJ ti_enh-cf,
ti_includes-nivel TJ ti_enh-nivel.
APPEND ti_enh.

ENDIF.
ENDIF.
ENDIF.

ENDFJRM. " buscar_punto_ampliacin

&---------------------------------------------------------------------
& Form construir_catalogo_enh
&---------------------------------------------------------------------
Construir catalogo de campos para ALV.
----------------------------------------------------------------------
FJRM construir_catalogo_enh .

DATA:
l_repid LIKE sy-repid.

REFRESH: ti_cat.

l_repid = sy-repid.

CALL FUNCTIJN 'REUSE_ALV_FIELDCATALJG_MERGE'
EXPJRTING
i_program_name = l_repid
i_internal_tabname = 'TI_ENH'
i_inclname = l_repid
CHANGING
ct_fieldcat = ti_cat
EXCEPTIJNS
inconsistent_interface = 1
program_error = 2
JTHERS = 3.

Asignar atributos de campo en el catalogo de reporte ALV
PERFJRM asignar_campo_a_catalogo TABLES ti_cat
USING:

'SEL' 'X' 'X' 'X' ' ' ' ' 'X' 'X' ' ' ' ' ' ',
'PRJGRAMA' 'X' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' ' c_text_01,
'TIPJ' 'X' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_05,
'NIVEL' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' c_text_02,
'BREAK' 'X' ' ' ' ' 'X' ' ' ' ' ' ' ' ' 'X' c_text_07,
'LINEA' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' c_text_03,
'CF' ' ' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' c_text_04.

ENDFJRM. " construir_catalogo_enh

&---------------------------------------------------------------------
& Form buscar_enh
&---------------------------------------------------------------------
Busco los puntos de ampliacin del programa.
----------------------------------------------------------------------
FJRM buscar_enh .

DATA:
l_obj_name TYPE enhobj-obj_name.

DATA: BEGIN JF lt_obj_name JCCURS 0,
obj_name TYPE enhobj-obj_name,
END JF lt_obj_name.

CHECK p_enh IS NJT INITIAL.

IF p_prog IS NJT INITIAL.
MJVE p_prog TJ l_obj_name.
ELSE.
MJVE tstc-pgmna TJ l_obj_name.
ENDIF.

REFRESH lt_obj_name.

LJJP AT ti_includes.
APPEND ti_includes-nome TJ lt_obj_name.
ENDLJJP.

SELECT enhname version obj_type obj_name
INTJ CJRRESPJNDING FIELDS JF TABLE ti_enhobj
FRJM enhobj
FJR ALL ENTRIES IN lt_obj_name
WHERE obj_type EQ 'PRJG'
AND obj_name EQ lt_obj_name-obj_name.

ENDFJRM. " buscar_enh

&---------------------------------------------------------------------
& Form construir_catalogo_enhobj
&---------------------------------------------------------------------
Construir catalogo de campos para ALV.
----------------------------------------------------------------------
FJRM construir_catalogo_enhobj .

DATA:
l_repid LIKE sy-repid.

REFRESH: ti_cat.

l_repid = sy-repid.

CALL FUNCTIJN 'REUSE_ALV_FIELDCATALJG_MERGE'
EXPJRTING
i_program_name = l_repid
i_internal_tabname = 'TI_ENHJBJ'
i_inclname = l_repid
CHANGING
ct_fieldcat = ti_cat
EXCEPTIJNS
inconsistent_interface = 1
program_error = 2
JTHERS = 3.

Asignar atributos de campo en el catalogo de reporte ALV
PERFJRM asignar_campo_a_catalogo TABLES ti_cat
USING:

'SEL' 'X' 'X' 'X' ' ' ' ' 'X' 'X' ' ' ' ' ' ',
'ENHNAME' 'X' ' ' 'X' 'X' ' ' ' ' ' ' ' ' ' ' ' ',
'VERSIJN' 'X' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'JBJ_TYPE' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'X' ' ' ' ',
'JBJ_NAME' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '.

ENDFJRM. " construir_catalogo_enhobj

&---------------------------------------------------------------------
& Form TJP_JF_PAGE_ENHJBJ
&---------------------------------------------------------------------
Mostrar cabecera de pgina
----------------------------------------------------------------------
FJRM top_of_page_enhobj.

DATA:
l_tfill_inc(20) TYPE c,
l_tfill_cant(20) TYPE c.

DESCRIBE TABLE ti_enhobj.
WRITE sy-tfill TJ l_tfill_cant.
CJNDENSE l_tfill_cant NJ-GAPS.

Construir encabezado del reporte
PERFJRM set_header USING l_tfill_cant
l_tfill_inc
'Puntos de ampliacin'.

ENDFJRM. "TJP_JF_PAGE_ENHJBJ

&---------------------------------------------------------------------
& Form bi_se19
&---------------------------------------------------------------------
Visualizo el punto de ampliacin implementado.
----------------------------------------------------------------------
--P_ENHNAME Punto de ampliacin implementado.
----------------------------------------------------------------------
FJRM bi_se19 USING p_enhname TYPE enhobj-enhname .

Visualizo la linea seleccionada en el programa.
CALL FUNCTIJN 'RS_TJJL_ACCESS'
EXPJRTING
operation = c_operation
object_name = p_enhname
object_type = 'ENHJ'
EXCEPTIJNS
not_executed = 1
invalid_object_type = 2
JTHERS = 3.

ENDFJRM. " bi_se19

&---------------------------------------------------------------------
& Form BDC_DYNPRJ
&---------------------------------------------------------------------
FJRM bdc_dynpro USING program dynpro.

CLEAR ti_bdcdata.
ti_bdcdata-program = program.
ti_bdcdata-dynpro = dynpro.
ti_bdcdata-dynbegin = 'X'.
APPEND ti_bdcdata.

ENDFJRM. " BDC_DYNPRJ

&---------------------------------------------------------------------
& Form BDC_FIELD
&---------------------------------------------------------------------
FJRM bdc_field USING fnam fval.

CLEAR ti_bdcdata.
ti_bdcdata-fnam = fnam.
ti_bdcdata-fval = fval.
APPEND ti_bdcdata.

ENDFJRM. "BDC_FIELD

&---------------------------------------------------------------------
& Form visualizar_programa
&---------------------------------------------------------------------
Visualizo el programa que se genera dinmicamente para las
sustituciones y validaciones de FI.
----------------------------------------------------------------------
FJRM visualizar_programa .

DATA:
l_selfield TYPE slis_selfield,
l_exit TYPE c,
l_repid TYPE sy-repid,
l_boolpool(8).

CHECK ti_gb31t, IS NJT INITIAL.

DJ.

Visualizo los distintos eventos para que puedan realizar la seleccin.
CALL FUNCTIJN 'REUSE_ALV_PJPUP_TJ_SELECT'
EXPJRTING
i_title = 'Validacin/Sustitucin Evento'
i_zebra = 'X'
i_tabname = 'TI_GB31T'
i_structure_name = 'GB31T'
IMPJRTING
es_selfield = l_selfield
e_exit = l_exit
TABLES
t_outtab = ti_gb31t
EXCEPTIJNS
program_error = 1
JTHERS = 2.

IF l_exit EQ 'X'.
EXIT.
ENDIF.

CHECK l_exit IS INITIAL.

Jbtengo el nombre del programa de sustitucin y validacin asociado
a la seleccin del usuario.
PERFJRM create_bool_filename(saplgbl5)
USING ti_gb31t-valuser
ti_gb31t-valevent
CHANGING l_boolpool
IF FJUND.

CHECK l_boolpool IS NJT INITIAL.

MJVE l_boolpool TJ l_repid.

Visualizo el programa.
PERFJRM visualizar_linea USING l_repid
'01'.

ENDDJ.

ENDFJRM. " visualizar_programa

&---------------------------------------------------------------------
& Form texto_tope
&---------------------------------------------------------------------
Encabezado que explica la funcionalidad de algunas columnas
del reporte.
----------------------------------------------------------------------
FJRM texto_tope .

STATICS l_flag TYPE c.

DATA l_tit(65) TYPE c.

CHECK l_flag IS INITIAL.

l_flag = 'X'.

WRITE 'FUNCIJANALIDAD DE LAS CJLUMNAS:' TJ l_tit CENTERED.
FJRMAT CJLJR = 1.

WRITE:
Ttulo.
/(70) sy-uline,
/1(1) sy-vline,
3 l_tit,
70(1) sy-vline,
/(70) sy-uline,
1er linea.
/1(1) sy-vline,
3 'TIPJ: Se visualiza las definiciones de los objetos de',
70(1) sy-vline,
2da linea.
/1(1) sy-vline,
3 ' ampliacin.',
70(1) sy-vline,
3ra linea.
/1(1) sy-vline,
3 'STJP: Agrega un BREAK en la lnea de cdigo seleccionada.',
70(1) sy-vline,
4ta linea.
/1(1) sy-vline,
3 'CJDIGJ FUENTE: Se visualiza la lnea de cdigo en el ',
70(1) sy-vline,
5ta linea.
/1(1) sy-vline,
3 ' programa correspondiente.',
70(1) sy-vline,
Cierro el cuadro.
/(70) sy-uline.

SKIP.

ENDFJRM. " texto_tope

&---------------------------------------------------------------------
& Form bi_se18
&---------------------------------------------------------------------
Visualizo la definicin del enhancement point.
&---------------------------------------------------------------------
FJRM bi_se18 USING p_cf.

DATA:
l_enhspotname TYPE enhspotname,
l_off TYPE i,
l_cf TYPE i.

DATA: BEGIN JF lt_cf JCCURS 0,
linea(500),
END JF lt_cf.

FIND FIRST JCCURRENCE JF ' SPJT ' IN p_cf MATCH JFFSET l_off.

CHECK l_off IS NJT INITIAL.

ADD 7 TJ l_off.
l_cf = 500 - l_off.

SPLIT p_cf+l_off(l_cf) AT space INTJ TABLE lt_cf.

CHECK sy-subrc IS INITIAL.

Jbtengo el nombre de la definicin del enhancement.
READ TABLE lt_cf INDEX 1.

TRANSLATE lt_cf-linea TJ UPPER CASE.
TRANSLATE lt_cf-linea USING '. , '.

MJVE lt_cf-linea TJ l_enhspotname.

Visualizo la linea seleccionada en el programa.
CALL FUNCTIJN 'RS_TJJL_ACCESS'
EXPJRTING
operation = c_operation
object_name = l_enhspotname
object_type = 'ENHS'
EXCEPTIJNS
not_executed = 1
invalid_object_type = 2
JTHERS = 3.

ENDFJRM. " bi_se18

&---------------------------------------------------------------------
& Form visualizar_fm_exit
&---------------------------------------------------------------------
Se visualiza el mdulo de funciones del user-exit's que
contiene al include Z indicado.
----------------------------------------------------------------------
FJRM visualizar_fm_exit .

DATA:
l_ret TYPE c,
l_flag TYPE c,
l_name TYPE trdir-name,
lt_fields TYPE sval JCCURS 0 WITH HEADER LINE,
lt_tfdir TYPE tfdir JCCURS 0 WITH HEADER LINE.

DATA:
v_include LIKE rodiobj-iobjnm,
l_fname LIKE rs38l-name,
l_group LIKE rs38l-area,
l_include LIKE rs38l-include,
l_namespace LIKE rs38l-namespace,
l_str_area LIKE rs38l-str_area,
lt_incl TYPE STANDARD TABLE JF abapsource WITH HEADER LINE.

MJVE:
'RS38L' TJ lt_fields-tabname,
'INCLUDE' TJ lt_fields-fieldname,
'Include' TJ lt_fields-fieldtext.

APPEND lt_fields.

CALL FUNCTIJN 'PJPUP_GET_VALUES'
EXPJRTING
popup_title = 'Ingrese ampliacin:'
IMPJRTING
returncode = l_ret
TABLES
fields = lt_fields
EXCEPTIJNS
error_in_fields = 1
JTHERS = 2.

Verifico que no haya cancelado.
CHECK l_ret NE 'A'.

READ TABLE lt_fields INDEX 1.

CHECK sy-subrc IS INITIAL.

IF lt_fields-value IS INITIAL JR lt_fields-value(1) NE 'Z'.
La ampliacin & no existe
MESSAGE e012(enhancement) WITH lt_fields-value.
ELSE.
MJVE lt_fields-value TJ l_name.
ENDIF.

Jbtengo los FM de los exit's.
SELECT
INTJ TABLE lt_tfdir
FRJM tfdir
WHERE funcname LIKE 'EXIT_%'.

LJJP AT lt_tfdir.

CLEAR:
l_group, l_include, l_namespace, l_str_area.

l_fname = lt_tfdir-funcname.
Jbtengo el include del user-exti's.
CALL FUNCTIJN 'FUNCTIJN_EXISTS'
EXPJRTING
funcname = l_fname
IMPJRTING
group = l_group
include = l_include
namespace = l_namespace
str_area = l_str_area
EXCEPTIJNS
function_not_exist = 1
JTHERS = 2.

IF sy-subrc = 0.
IF NJT l_include IS INITIAL.
- Jbtengo el cdigo fuente del user-exit's.
CLEAR: v_include, lt_incl, lt_incl,.
v_include = l_include.
CALL FUNCTIJN 'MU_INCLUDE_GET'
EXPJRTING
i_include = v_include
TABLES
e_t_include = lt_incl.

IF lt_incl, IS NJT INITIAL.
Verifico si alguna de las lneas contiene el include.
FIND FIRST JCCURRENCE JF l_name
IN TABLE lt_incl.

CHECK sy-subrc IS INITIAL.

Visualizo el FM del user-exit.
PERFJRM visualizar_linea USING l_include
'01'.
l_flag = 'X'.
EXIT.
ENDIF.
ENDIF.
ENDIF.
ENDLJJP.

CHECK l_flag IS INITIAL.

La ampliacin & no existe
MESSAGE e012(enhancement) WITH lt_fields-value.

ENDFJRM. " visualizar_fm_exit

&---------------------------------------------------------------------
& Form def_text_parameter
&---------------------------------------------------------------------
Defino los textos de los parmetros de seleccin.
----------------------------------------------------------------------
FJRM def_text_parameter .

tit1 = 'Parmetros:'.
tit2 = 'Tipo de ampliacin:'.
tit3 = 'Tipo de ejecucin:'.
text1 = 'Programa'.
text2 = 'Transaccin'.
text3 = 'Includes'.
text4 = 'Funciones'.
text5 = 'Submit'.
text6 = 'Nivel'.
text7 = 'User-exit'.
text8 = 'Badi'.
text9 = 'BTE'.
text10 = 'Sustitucin'.
text11 = 'Field-exit'.
text12 = c_handler.
text13 = 'Validacin'.
text14 = 'Punto de ampliacin'.

ENDFJRM. " def_text_parameter

&---------------------------------------------------------------------
& Form def_botones
&---------------------------------------------------------------------
Defino los textos de las botoneras de la pantalla de seleccin.
----------------------------------------------------------------------
FJRM def_botones .

Agrego el boton de marcar todo en STATUS GUI.
functxt-icon_id = icon_select_all.
functxt-quickinfo = c_text_08.
sscrfields-functxt_01 = functxt.

Agrego el boton de desmarcar todo en STATUS GUI.
functxt-icon_id = icon_deselect_all.
functxt-quickinfo = c_text_09.
sscrfields-functxt_02 = functxt.

Agrego el boton de Breakpoint en STATUS GUI.
functxt-icon_id = icon_message_critical.
functxt-quickinfo = c_text_06.
functxt-icon_text = c_text_06.
sscrfields-functxt_03 = functxt.


icon_create: RESULT name text info.
icon_create:

Creo la visualizacin del botn de exit's en la DYNPRJ.
btn icon_display_note 'Ampliacin' 'Visualizar ampliacin',
Creo la visualizacin del botn de proyectos exit's en la DYNPRJ.
ext1 icon_display_note 'Proyecto' 'Visualizar Proyecto',
Creo la visualizacin del botn de proyectos exit's en la DYNPRJ.
ext2 icon_display_note 'User-exit' 'Visualizar User-exit',
Creo la visualizacin del botn de Interface en la DYNPRJ.
badi icon_availability_display 'Interface' 'Visualizar Def.Interface',
Creo la visualizacin del botn de sustitucin en la DYNPRJ.
btn1 icon_display_text 'Tx. JBBH' 'Visualizar sustituciones',
Creo la visualizacin del botn de sustitucin en la DYNPRJ.
sust icon_report 'Prog.Generado' 'Vis.programa generado',
Creo la visualizacin del botn de sustitucin en la DYNPRJ.
ob28 icon_display_text 'Tx. JB28' 'Visualizar validaciones',
Creo la visualizacin del botn de sustitucin en la DYNPRJ.
btn2 icon_display 'Field-exits' 'Visualizar Field-exits',
Creo la visualizacin del botn de FIBF en la DYNPRJ.
bte1 icon_toggle_display '' 'Visualizar FIBF',
Creo la visualizacin del botn de Evento en la DYNPRJ.
bte2 icon_show_events 'Evento' 'Visualizar Evento',
Creo la visualizacin del botn de Proceso en la DYNPRJ.
bte3 icon_bw_apd 'Proceso' 'Visualizar Proceso',
Creo Marcar todo en la DYNPRJ.
all icon_select_all '' c_text_08,
Creo Desmarcar todo en la DYNPRJ.
dal icon_deselect_all '' c_text_09,
Creo la visualizacin del botn de SENH en la DYNPRJ.
senh icon_detail '' 'Visualizar SENH',
Creo la visualizacin del botn de Customer Implement. en la DYNPRJ.
cimp icon_table_settings 'Cust.Impl.' 'Customer Implementation'.

MJVE sust TJ val.

ENDFJRM. " def_botones

&---------------------------------------------------------------------
& Form set_header
&---------------------------------------------------------------------
Creo el encabezado del ALV correspondiente.
----------------------------------------------------------------------
FJRM set_header USING p_cant
p_inc
p_text.

DATA:
l_tit(65) TYPE c.

STATICS l_col TYPE i.

PERFJRM texto_tope.

IF l_col IS INITIAL JR l_col EQ 7.
l_col = 3.
ELSE.
ADD 1 TJ l_col.
ENDIF.

FJRMAT CJLJR = l_col.

WRITE p_text TJ l_tit CENTERED.

TRANSLATE l_tit USING ' '.

WRITE:
Ttulo.
/(70) sy-uline,
/1(1) sy-vline,
3 l_tit,
70(1) sy-vline,
/(70) sy-uline.

FJRMAT CJLJR = 2.

IF p_tcode IS INITIAL.
CJNCATENATE 'Ampliaciones encontradas en el programa' p_prog
INTJ l_tit SEPARATED BY space.
ELSE.
CJNCATENATE 'Ampliaciones encontradas en la transaccin' p_tcode
INTJ l_tit SEPARATED BY space.
ENDIF.

WRITE:
Ttulo.
/1(1) sy-vline,
3 l_tit,
70(1) sy-vline.

IF p_tcode IS INITIAL.
Jbtengo la descripcin del programa.
SELECT SINGLE
FRJM trdirt
WHERE name EQ p_prog
AND sprsl EQ sy-langu.

CJNCATENATE 'Descripcin:' trdirt-text
INTJ l_tit SEPARATED BY space.

ELSE.
Jbtengo la descripcin de la transaccin.
SELECT SINGLE
FRJM tstct
WHERE sprsl EQ sy-langu
AND tcode EQ p_tcode.

CJNCATENATE 'Descripcin:' tstct-ttext
INTJ l_tit SEPARATED BY space.

ENDIF.

WRITE:
/1(1) sy-vline,
3 l_tit,
70(1) sy-vline,
/(70) sy-uline.

IF p_inc IS NJT INITIAL.

CJNCATENATE 'PGMs analizados:' p_inc
INTJ l_tit SEPARATED BY space.

WRITE:
/1(1) sy-vline,
3 l_tit,
70(1) sy-vline.

CJNCATENATE 'Nivel:' p_nivel
INTJ l_tit SEPARATED BY space.

WRITE:
/1(1) sy-vline,
3 l_tit,
70(1) sy-vline.

ENDIF.

CJNCATENATE 'Cant.Ampliaciones:' p_cant
INTJ l_tit SEPARATED BY space.

WRITE:
/1(1) sy-vline,
3 l_tit,
70(1) sy-vline,
Cierro el cuadro.
/(70) sy-uline.

SKIP.

ENDFJRM. " set_header

&---------------------------------------------------------------------
& Form visualizar_imp_enh
&---------------------------------------------------------------------
Visualizo las implementaciones del cliente de los enhancement
de cualquier tipo.
----------------------------------------------------------------------
FJRM visualizar_imp_enh .

DATA:
l_repid LIKE sy-repid.

l_repid = sy-repid.

PERFJRM get_imp_enh.
PERFJRM construir_catalogo_cimp.
PERFJRM definir_layout USING 'TI_CIMP'
CHANGING wa_layout.

CALL FUNCTIJN 'REUSE_ALV_LIST_DISPLAY'
EXPJRTING
i_callback_program = l_repid
i_callback_user_command = 'USER_CJMMAND'
is_layout = wa_layout
it_fieldcat = ti_cat
i_default = 'X'
i_save = 'A'
TABLES
t_outtab = ti_cimp
EXCEPTIJNS
program_error = 1
JTHERS = 2.

ENDFJRM. " visualizar_imp_enh

&---------------------------------------------------------------------
& Form construir_catalogo_cimp
&---------------------------------------------------------------------
Construir catalogo de campos para ALV
----------------------------------------------------------------------
FJRM construir_catalogo_cimp .

DATA:
l_repid LIKE sy-repid.

REFRESH: ti_cat.

l_repid = sy-repid.

CALL FUNCTIJN 'REUSE_ALV_FIELDCATALJG_MERGE'
EXPJRTING
i_program_name = l_repid
i_internal_tabname = 'TI_CIMP'
i_inclname = l_repid
CHANGING
ct_fieldcat = ti_cat
EXCEPTIJNS
inconsistent_interface = 1
program_error = 2
JTHERS = 3.

Asignar atributos de campo en el catalogo de reporte ALV
PERFJRM asignar_campo_a_catalogo TABLES ti_cat
USING:

'ENHNAME' 'X' 'X' 'X' 'X' ' ' ' ' ' ' ' ' ' ' ' ',
'JBJ_TYPE' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'JBJ_NAME' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'ELEMUSAGE' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'ENHINCLUDE' ' ' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' '.

ENDFJRM. " construir_catalogo_cimp

&---------------------------------------------------------------------
& Form get_imp_enh
&---------------------------------------------------------------------
Jbtengo las implementaciones creadas.
----------------------------------------------------------------------
FJRM get_imp_enh .

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusage
enhincinx~enhinclude
FRJM enhobj LEFT JUTER JJIN enhincinx JN
enhobj~enhname = enhincinx~enhname
INTJ TABLE ti_cimp
WHERE enhobj~enhname LIKE 'Z%' JR
enhobj~enhname LIKE 'Y%' AND
enhobj~version EQ 'A'.

SJRT ti_cimp BY enhname obj_type.

ENDFJRM. " get_imp_enh

&---------------------------------------------------------------------
& Form visualizar_enh_cf
&---------------------------------------------------------------------
Visualizo el cdigo fuente del enhancement.
----------------------------------------------------------------------
FJRM visualizar_enh_cf USING p_enhinclude TYPE any.

DATA:
l_changed LIKE s38e-buf_varied,
l_subrc LIKE sy-subrc,
lt_source TYPE TABLE JF string.

CHECK p_enhinclude IS NJT INITIAL.

READ REPJRT p_enhinclude INTJ lt_source.

CHECK sy-subrc IS INITIAL.

CALL FUNCTIJN 'EDITJR_TABLE'
EXPJRTING
display = 'X'
name = p_enhinclude
IMPJRTING
changed = l_changed
subrc = l_subrc
TABLES
content = lt_source.

ENDFJRM. " visualizar_enh_cf

You might also like